From d2a3e504cfbc864b5bd3bb60f892db80eef60bde Mon Sep 17 00:00:00 2001 From: Sergio Rubio Date: Tue, 5 Jun 2018 20:04:39 +0200 Subject: [PATCH] Vendor dependencies using golang/dep Output from 'dep status': PROJECT CONSTRAINT VERSION REVISION LATEST PKGS USED cloud.google.com/go v0.23.0 v0.23.0 0fd7230 v0.23.0 1 github.com/briandowns/openweathermap ^0.11.0 0.11 1b87579 0.11 1 github.com/gdamore/encoding branch master branch master b23993c b23993c 1 github.com/gdamore/tcell ^1.0.0 v1.0.0 061d51a v1.0.0 2 github.com/go-test/deep ^1.0.1 v1.0.1 6592d9c v1.0.1 1 github.com/golang/protobuf v1.1.0 v1.1.0 b4deda0 v1.1.0 1 github.com/google/go-github branch master branch master 2ae5df7 2ae5df7 1 github.com/google/go-querystring branch master branch master 53e6ce1 53e6ce1 1 github.com/jessevdk/go-flags ^1.4.0 v1.4.0 c6ca198 v1.4.0 1 github.com/lucasb-eyer/go-colorful v1.0 v1.0 345fbb3 v1.0 1 github.com/mattn/go-runewidth v0.0.2 v0.0.2 9e777a8 v0.0.2 1 github.com/olebedev/config branch master branch master 9a10d05 9a10d05 1 github.com/radovskyb/watcher ^1.0.2 v1.0.2 6145e14 v1.0.2 1 github.com/rivo/tview branch master branch master 71ecf1f 71ecf1f 1 github.com/yfronto/newrelic branch master branch master f7fa0c6 f7fa0c6 1 golang.org/x/net branch master branch master 1e49130 1e49130 2 golang.org/x/oauth2 branch master branch master 1e0a3fa 1e0a3fa 5 golang.org/x/text v0.3.0 v0.3.0 f21a4df v0.3.0 5 google.golang.org/api branch master branch master 00e3bb8 00e3bb8 4 google.golang.org/appengine v1.0.0 v1.0.0 150dc57 v1.0.0 10 gopkg.in/yaml.v2 ^2.2.1 v2.2.1 5420a8b v2.2.1 1 See https://golang.github.io/dep/docs/daily-dep.html --- .gitignore | 1 + Gopkg.lock | 169 + Gopkg.toml | 78 + Makefile | 8 +- vendor/cloud.google.com/go/AUTHORS | 15 + vendor/cloud.google.com/go/CONTRIBUTORS | 40 + vendor/cloud.google.com/go/LICENSE | 202 + .../go/compute/metadata/metadata.go | 437 + .../briandowns/openweathermap/.gitignore | 31 + .../briandowns/openweathermap/.travis.yml | 29 + .../briandowns/openweathermap/CONTRIBUTING.md | 14 + .../briandowns/openweathermap/LICENSE | 174 + .../briandowns/openweathermap/Makefile | 19 + .../briandowns/openweathermap/README.md | 265 + .../briandowns/openweathermap/conditions.go | 185 + .../briandowns/openweathermap/current.go | 143 + .../briandowns/openweathermap/doc.go | 18 + .../briandowns/openweathermap/forecast.go | 151 + .../briandowns/openweathermap/forecast16.go | 36 + .../briandowns/openweathermap/forecast5.go | 50 + .../briandowns/openweathermap/history.go | 147 + .../openweathermap/openweathermap.go | 228 + .../briandowns/openweathermap/pollution.go | 82 + .../briandowns/openweathermap/station.go | 80 + .../briandowns/openweathermap/uv.go | 170 + .../github.com/gdamore/encoding/.appveyor.yml | 13 + .../github.com/gdamore/encoding/.travis.yml | 6 + vendor/github.com/gdamore/encoding/LICENSE | 202 + vendor/github.com/gdamore/encoding/README.md | 19 + vendor/github.com/gdamore/encoding/ascii.go | 36 + vendor/github.com/gdamore/encoding/charmap.go | 192 + vendor/github.com/gdamore/encoding/doc.go | 17 + vendor/github.com/gdamore/encoding/ebcdic.go | 273 + vendor/github.com/gdamore/encoding/latin1.go | 33 + vendor/github.com/gdamore/encoding/latin5.go | 35 + vendor/github.com/gdamore/encoding/utf8.go | 35 + vendor/github.com/gdamore/tcell/.appveyor.yml | 13 + vendor/github.com/gdamore/tcell/.gitignore | 1 + vendor/github.com/gdamore/tcell/.travis.yml | 17 + vendor/github.com/gdamore/tcell/AUTHORS | 4 + vendor/github.com/gdamore/tcell/LICENSE | 202 + vendor/github.com/gdamore/tcell/README.md | 262 + vendor/github.com/gdamore/tcell/attr.go | 32 + vendor/github.com/gdamore/tcell/cell.go | 186 + .../github.com/gdamore/tcell/charset_stub.go | 21 + .../github.com/gdamore/tcell/charset_unix.go | 49 + .../gdamore/tcell/charset_windows.go | 21 + vendor/github.com/gdamore/tcell/color.go | 1019 ++ vendor/github.com/gdamore/tcell/colorfit.go | 52 + .../github.com/gdamore/tcell/console_stub.go | 23 + .../github.com/gdamore/tcell/console_win.go | 1025 ++ vendor/github.com/gdamore/tcell/database.json | 1351 ++ vendor/github.com/gdamore/tcell/doc.go | 40 + vendor/github.com/gdamore/tcell/encoding.go | 139 + vendor/github.com/gdamore/tcell/errors.go | 73 + vendor/github.com/gdamore/tcell/event.go | 53 + vendor/github.com/gdamore/tcell/interrupt.go | 41 + vendor/github.com/gdamore/tcell/key.go | 464 + vendor/github.com/gdamore/tcell/mouse.go | 97 + vendor/github.com/gdamore/tcell/resize.go | 42 + vendor/github.com/gdamore/tcell/runes.go | 111 + vendor/github.com/gdamore/tcell/screen.go | 212 + vendor/github.com/gdamore/tcell/simulation.go | 505 + vendor/github.com/gdamore/tcell/style.go | 126 + .../gdamore/tcell/terminfo/.gitignore | 1 + .../gdamore/tcell/terminfo/TERMINALS.md | 7 + .../gdamore/tcell/terminfo/mkdatabase.sh | 189 + .../gdamore/tcell/terminfo/mkinfo.go | 769 ++ .../gdamore/tcell/terminfo/models.txt | 59 + .../gdamore/tcell/terminfo/term_Eterm.go | 24 + .../tcell/terminfo/term_Eterm_256color.go | 105 + .../gdamore/tcell/terminfo/term_adm3a.go | 22 + .../gdamore/tcell/terminfo/term_aixterm.go | 76 + .../gdamore/tcell/terminfo/term_ansi.go | 38 + .../gdamore/tcell/terminfo/term_aterm.go | 107 + .../gdamore/tcell/terminfo/term_beterm.go | 51 + .../gdamore/tcell/terminfo/term_bsdos_pc.go | 39 + .../gdamore/tcell/terminfo/term_cygwin.go | 60 + .../gdamore/tcell/terminfo/term_d200.go | 94 + .../gdamore/tcell/terminfo/term_d210.go | 92 + .../gdamore/tcell/terminfo/term_dtterm.go | 64 + .../gdamore/tcell/terminfo/term_gnome.go | 153 + .../tcell/terminfo/term_gnome_256color.go | 153 + .../gdamore/tcell/terminfo/term_hpterm.go | 47 + .../gdamore/tcell/terminfo/term_hz1500.go | 23 + .../gdamore/tcell/terminfo/term_konsole.go | 112 + .../tcell/terminfo/term_konsole_256color.go | 112 + .../gdamore/tcell/terminfo/term_kterm.go | 64 + .../gdamore/tcell/terminfo/term_linux.go | 65 + .../gdamore/tcell/terminfo/term_pcansi.go | 36 + .../gdamore/tcell/terminfo/term_rxvt.go | 107 + .../tcell/terminfo/term_rxvt_256color.go | 107 + .../tcell/terminfo/term_rxvt_unicode.go | 81 + .../terminfo/term_rxvt_unicode_256color.go | 81 + .../gdamore/tcell/terminfo/term_screen.go | 63 + .../tcell/terminfo/term_screen_256color.go | 63 + .../gdamore/tcell/terminfo/term_st.go | 155 + .../gdamore/tcell/terminfo/term_st_meta.go | 155 + .../tcell/terminfo/term_st_meta_256color.go | 155 + .../tcell/terminfo/term_st_meta_truecolor.go | 158 + .../tcell/terminfo/term_st_truecolor.go | 158 + .../gdamore/tcell/terminfo/term_sun.go | 43 + .../gdamore/tcell/terminfo/term_sun_color.go | 46 + .../gdamore/tcell/terminfo/term_tvi910.go | 36 + .../gdamore/tcell/terminfo/term_tvi912.go | 35 + .../gdamore/tcell/terminfo/term_tvi921.go | 31 + .../gdamore/tcell/terminfo/term_tvi925.go | 40 + .../gdamore/tcell/terminfo/term_tvi950.go | 43 + .../gdamore/tcell/terminfo/term_tvi970.go | 37 + .../gdamore/tcell/terminfo/term_vt100.go | 45 + .../gdamore/tcell/terminfo/term_vt102.go | 44 + .../gdamore/tcell/terminfo/term_vt220.go | 54 + .../gdamore/tcell/terminfo/term_vt320.go | 60 + .../gdamore/tcell/terminfo/term_vt400.go | 43 + .../gdamore/tcell/terminfo/term_vt420.go | 47 + .../gdamore/tcell/terminfo/term_vt52.go | 26 + .../gdamore/tcell/terminfo/term_wy50.go | 56 + .../gdamore/tcell/terminfo/term_wy60.go | 60 + .../gdamore/tcell/terminfo/term_wy99_ansi.go | 58 + .../gdamore/tcell/terminfo/term_wy99a_ansi.go | 58 + .../gdamore/tcell/terminfo/term_xfce.go | 153 + .../gdamore/tcell/terminfo/term_xnuppc.go | 31 + .../gdamore/tcell/terminfo/term_xterm.go | 152 + .../tcell/terminfo/term_xterm_256color.go | 152 + .../tcell/terminfo/term_xterm_truecolor.go | 155 + .../gdamore/tcell/terminfo/terminfo.go | 831 ++ vendor/github.com/gdamore/tcell/tscreen.go | 1382 ++ .../github.com/gdamore/tcell/tscreen_bsd.go | 119 + .../github.com/gdamore/tcell/tscreen_linux.go | 129 + .../github.com/gdamore/tcell/tscreen_posix.go | 206 + .../github.com/gdamore/tcell/tscreen_stub.go | 32 + .../gdamore/tcell/tscreen_windows.go | 40 + vendor/github.com/go-test/deep/.gitignore | 2 + vendor/github.com/go-test/deep/.travis.yml | 13 + vendor/github.com/go-test/deep/CHANGES.md | 9 + vendor/github.com/go-test/deep/LICENSE | 21 + vendor/github.com/go-test/deep/README.md | 51 + vendor/github.com/go-test/deep/deep.go | 352 + vendor/github.com/golang/protobuf/AUTHORS | 3 + .../github.com/golang/protobuf/CONTRIBUTORS | 3 + vendor/github.com/golang/protobuf/LICENSE | 31 + .../github.com/golang/protobuf/proto/clone.go | 253 + .../golang/protobuf/proto/decode.go | 428 + .../golang/protobuf/proto/discard.go | 350 + .../golang/protobuf/proto/encode.go | 221 + .../github.com/golang/protobuf/proto/equal.go | 300 + .../golang/protobuf/proto/extensions.go | 543 + .../github.com/golang/protobuf/proto/lib.go | 921 ++ .../golang/protobuf/proto/message_set.go | 314 + .../golang/protobuf/proto/pointer_reflect.go | 357 + .../golang/protobuf/proto/pointer_unsafe.go | 308 + .../golang/protobuf/proto/properties.go | 544 + .../golang/protobuf/proto/table_marshal.go | 2681 ++++ .../golang/protobuf/proto/table_merge.go | 654 + .../golang/protobuf/proto/table_unmarshal.go | 1967 +++ .../github.com/golang/protobuf/proto/text.go | 843 ++ .../golang/protobuf/proto/text_parser.go | 880 ++ vendor/github.com/google/go-github/AUTHORS | 173 + vendor/github.com/google/go-github/LICENSE | 27 + .../google/go-github/github/activity.go | 69 + .../go-github/github/activity_events.go | 324 + .../github/activity_notifications.go | 223 + .../google/go-github/github/activity_star.go | 135 + .../go-github/github/activity_watching.go | 146 + .../google/go-github/github/admin.go | 101 + .../google/go-github/github/admin_stats.go | 171 + .../google/go-github/github/apps.go | 197 + .../go-github/github/apps_installation.go | 101 + .../go-github/github/apps_marketplace.go | 180 + .../google/go-github/github/authorizations.go | 435 + .../github.com/google/go-github/github/doc.go | 187 + .../google/go-github/github/event_types.go | 752 ++ .../google/go-github/github/gen-accessors.go | 332 + .../google/go-github/github/gists.go | 388 + .../google/go-github/github/gists_comments.go | 119 + .../github.com/google/go-github/github/git.go | 12 + .../google/go-github/github/git_blobs.go | 75 + .../google/go-github/github/git_commits.go | 139 + .../google/go-github/github/git_refs.go | 233 + .../google/go-github/github/git_tags.go | 84 + .../google/go-github/github/git_trees.go | 93 + .../go-github/github/github-accessors.go | 10989 ++++++++++++++++ .../google/go-github/github/github.go | 989 ++ .../google/go-github/github/gitignore.go | 64 + .../google/go-github/github/issues.go | 332 + .../go-github/github/issues_assignees.go | 85 + .../go-github/github/issues_comments.go | 152 + .../google/go-github/github/issues_events.go | 151 + .../google/go-github/github/issues_labels.go | 270 + .../go-github/github/issues_milestones.go | 160 + .../go-github/github/issues_timeline.go | 149 + .../google/go-github/github/licenses.go | 103 + .../google/go-github/github/messages.go | 245 + .../google/go-github/github/migrations.go | 224 + .../github/migrations_source_import.go | 329 + .../google/go-github/github/misc.go | 257 + .../google/go-github/github/orgs.go | 212 + .../google/go-github/github/orgs_hooks.go | 107 + .../google/go-github/github/orgs_members.go | 370 + .../github/orgs_outside_collaborators.go | 81 + .../google/go-github/github/orgs_projects.go | 60 + .../google/go-github/github/orgs_teams.go | 514 + .../go-github/github/orgs_users_blocking.go | 91 + .../google/go-github/github/projects.go | 445 + .../google/go-github/github/pulls.go | 380 + .../google/go-github/github/pulls_comments.go | 162 + .../go-github/github/pulls_reviewers.go | 79 + .../google/go-github/github/pulls_reviews.go | 236 + .../google/go-github/github/reactions.go | 283 + .../google/go-github/github/repos.go | 1051 ++ .../go-github/github/repos_collaborators.go | 140 + .../google/go-github/github/repos_comments.go | 161 + .../google/go-github/github/repos_commits.go | 237 + .../github/repos_community_health.go | 57 + .../google/go-github/github/repos_contents.go | 266 + .../go-github/github/repos_deployments.go | 237 + .../google/go-github/github/repos_forks.go | 89 + .../google/go-github/github/repos_hooks.go | 192 + .../go-github/github/repos_invitations.go | 98 + .../google/go-github/github/repos_keys.go | 111 + .../google/go-github/github/repos_merging.go | 38 + .../google/go-github/github/repos_pages.go | 143 + .../google/go-github/github/repos_projects.go | 72 + .../google/go-github/github/repos_releases.go | 353 + .../google/go-github/github/repos_stats.go | 226 + .../google/go-github/github/repos_statuses.go | 129 + .../google/go-github/github/repos_traffic.go | 141 + .../google/go-github/github/search.go | 255 + .../google/go-github/github/strings.go | 93 + .../google/go-github/github/teams.go | 7 + .../github/teams_discussion_comments.go | 154 + .../go-github/github/teams_discussions.go | 159 + .../google/go-github/github/timestamp.go | 41 + .../google/go-github/github/users.go | 233 + .../go-github/github/users_administration.go | 67 + .../google/go-github/github/users_blocking.go | 91 + .../google/go-github/github/users_emails.go | 71 + .../go-github/github/users_followers.go | 119 + .../google/go-github/github/users_gpg_keys.go | 140 + .../google/go-github/github/users_keys.go | 108 + .../google/go-github/github/with_appengine.go | 20 + .../go-github/github/without_appengine.go | 19 + .../github.com/google/go-querystring/LICENSE | 27 + .../google/go-querystring/query/encode.go | 320 + .../github.com/jessevdk/go-flags/.travis.yml | 44 + vendor/github.com/jessevdk/go-flags/LICENSE | 26 + vendor/github.com/jessevdk/go-flags/README.md | 134 + vendor/github.com/jessevdk/go-flags/arg.go | 27 + .../jessevdk/go-flags/check_crosscompile.sh | 16 + .../github.com/jessevdk/go-flags/closest.go | 59 + .../github.com/jessevdk/go-flags/command.go | 465 + .../jessevdk/go-flags/completion.go | 309 + .../github.com/jessevdk/go-flags/convert.go | 348 + vendor/github.com/jessevdk/go-flags/error.go | 134 + vendor/github.com/jessevdk/go-flags/flags.go | 258 + vendor/github.com/jessevdk/go-flags/group.go | 406 + vendor/github.com/jessevdk/go-flags/help.go | 491 + vendor/github.com/jessevdk/go-flags/ini.go | 597 + vendor/github.com/jessevdk/go-flags/man.go | 205 + .../github.com/jessevdk/go-flags/multitag.go | 140 + vendor/github.com/jessevdk/go-flags/option.go | 459 + .../jessevdk/go-flags/optstyle_other.go | 67 + .../jessevdk/go-flags/optstyle_windows.go | 108 + vendor/github.com/jessevdk/go-flags/parser.go | 700 + .../github.com/jessevdk/go-flags/termsize.go | 28 + .../jessevdk/go-flags/termsize_nosysioctl.go | 7 + .../jessevdk/go-flags/tiocgwinsz_bsdish.go | 7 + .../jessevdk/go-flags/tiocgwinsz_linux.go | 7 + .../jessevdk/go-flags/tiocgwinsz_other.go | 7 + .../lucasb-eyer/go-colorful/.gitignore | 28 + .../lucasb-eyer/go-colorful/.travis.yml | 8 + .../lucasb-eyer/go-colorful/LICENSE | 7 + .../lucasb-eyer/go-colorful/README.md | 488 + .../lucasb-eyer/go-colorful/colorgens.go | 55 + .../lucasb-eyer/go-colorful/colors.go | 819 ++ .../go-colorful/happy_palettegen.go | 25 + .../lucasb-eyer/go-colorful/hexcolor.go | 37 + .../go-colorful/soft_palettegen.go | 185 + .../go-colorful/warm_palettegen.go | 25 + .../github.com/mattn/go-runewidth/.travis.yml | 8 + vendor/github.com/mattn/go-runewidth/LICENSE | 21 + .../github.com/mattn/go-runewidth/README.mkd | 27 + .../mattn/go-runewidth/runewidth.go | 1223 ++ .../mattn/go-runewidth/runewidth_js.go | 8 + .../mattn/go-runewidth/runewidth_posix.go | 77 + .../mattn/go-runewidth/runewidth_windows.go | 25 + vendor/github.com/olebedev/config/.gitignore | 22 + vendor/github.com/olebedev/config/LICENSE | 20 + vendor/github.com/olebedev/config/README.md | 19 + vendor/github.com/olebedev/config/config.go | 642 + vendor/github.com/olebedev/config/doc.go | 141 + vendor/github.com/olebedev/config/wercker.yml | 1 + .../github.com/radovskyb/watcher/.travis.yml | 4 + vendor/github.com/radovskyb/watcher/LICENSE | 27 + vendor/github.com/radovskyb/watcher/README.md | 172 + .../github.com/radovskyb/watcher/samefile.go | 9 + .../radovskyb/watcher/samefile_windows.go | 12 + .../github.com/radovskyb/watcher/watcher.go | 621 + .../github.com/rivo/tview/CODE_OF_CONDUCT.md | 73 + vendor/github.com/rivo/tview/CONTRIBUTING.md | 31 + vendor/github.com/rivo/tview/LICENSE.txt | 21 + vendor/github.com/rivo/tview/README.md | 101 + vendor/github.com/rivo/tview/ansii.go | 237 + vendor/github.com/rivo/tview/application.go | 375 + vendor/github.com/rivo/tview/box.go | 324 + vendor/github.com/rivo/tview/button.go | 137 + vendor/github.com/rivo/tview/checkbox.go | 203 + vendor/github.com/rivo/tview/doc.go | 151 + vendor/github.com/rivo/tview/dropdown.go | 408 + vendor/github.com/rivo/tview/flex.go | 180 + vendor/github.com/rivo/tview/focusable.go | 8 + vendor/github.com/rivo/tview/form.go | 513 + vendor/github.com/rivo/tview/frame.go | 157 + vendor/github.com/rivo/tview/grid.go | 631 + vendor/github.com/rivo/tview/inputfield.go | 338 + vendor/github.com/rivo/tview/list.go | 349 + vendor/github.com/rivo/tview/modal.go | 131 + vendor/github.com/rivo/tview/pages.go | 248 + vendor/github.com/rivo/tview/primitive.go | 46 + vendor/github.com/rivo/tview/styles.go | 34 + vendor/github.com/rivo/tview/table.go | 1043 ++ vendor/github.com/rivo/tview/textview.go | 966 ++ vendor/github.com/rivo/tview/tview.gif | Bin 0 -> 2226085 bytes vendor/github.com/rivo/tview/util.go | 645 + vendor/github.com/yfronto/newrelic/.gitignore | 0 .../github.com/yfronto/newrelic/.travis.yml | 16 + vendor/github.com/yfronto/newrelic/LICENSE | 30 + vendor/github.com/yfronto/newrelic/README.md | 75 + .../yfronto/newrelic/alert_conditions.go | 59 + .../yfronto/newrelic/alert_events.go | 60 + .../newrelic/alert_events_test_fixtures.go | 91 + .../newrelic/application_deployments.go | 53 + .../newrelic/application_host_metrics.go | 38 + .../yfronto/newrelic/application_hosts.go | 94 + .../newrelic/application_instance_metrics.go | 38 + .../yfronto/newrelic/application_instances.go | 94 + .../yfronto/newrelic/application_metrics.go | 36 + .../application_metrics_test_fixtures.go | 175 + .../yfronto/newrelic/applications.go | 111 + .../newrelic/applications_test_fixtures.go | 165 + vendor/github.com/yfronto/newrelic/array.go | 11 + .../yfronto/newrelic/browser_applications.go | 48 + .../yfronto/newrelic/common_test_fixtures.go | 17 + .../yfronto/newrelic/component_metrics.go | 34 + .../yfronto/newrelic/http_helper.go | 100 + .../newrelic/http_helper_test_fixtures.go | 119 + .../yfronto/newrelic/key_transactions.go | 76 + .../yfronto/newrelic/legacy_alert_policies.go | 78 + vendor/github.com/yfronto/newrelic/main.go | 48 + vendor/github.com/yfronto/newrelic/metrics.go | 128 + .../newrelic/mobile_application_metrics.go | 36 + .../yfronto/newrelic/mobile_applications.go | 61 + .../yfronto/newrelic/notification_channels.go | 78 + .../yfronto/newrelic/server_metrics.go | 34 + vendor/github.com/yfronto/newrelic/servers.go | 92 + vendor/github.com/yfronto/newrelic/usages.go | 49 + vendor/golang.org/x/net/AUTHORS | 3 + vendor/golang.org/x/net/CONTRIBUTORS | 3 + vendor/golang.org/x/net/LICENSE | 27 + vendor/golang.org/x/net/PATENTS | 22 + vendor/golang.org/x/net/context/context.go | 56 + .../x/net/context/ctxhttp/ctxhttp.go | 74 + .../x/net/context/ctxhttp/ctxhttp_pre17.go | 147 + vendor/golang.org/x/net/context/go17.go | 72 + vendor/golang.org/x/net/context/go19.go | 20 + vendor/golang.org/x/net/context/pre_go17.go | 300 + vendor/golang.org/x/net/context/pre_go19.go | 109 + vendor/golang.org/x/oauth2/.travis.yml | 13 + vendor/golang.org/x/oauth2/AUTHORS | 3 + vendor/golang.org/x/oauth2/CONTRIBUTING.md | 26 + vendor/golang.org/x/oauth2/CONTRIBUTORS | 3 + vendor/golang.org/x/oauth2/LICENSE | 27 + vendor/golang.org/x/oauth2/README.md | 77 + .../golang.org/x/oauth2/google/appengine.go | 89 + .../x/oauth2/google/appengine_hook.go | 14 + .../x/oauth2/google/appengineflex_hook.go | 11 + vendor/golang.org/x/oauth2/google/default.go | 115 + vendor/golang.org/x/oauth2/google/doc_go19.go | 42 + .../x/oauth2/google/doc_not_go19.go | 43 + vendor/golang.org/x/oauth2/google/go19.go | 57 + vendor/golang.org/x/oauth2/google/google.go | 192 + vendor/golang.org/x/oauth2/google/jwt.go | 74 + vendor/golang.org/x/oauth2/google/not_go19.go | 54 + vendor/golang.org/x/oauth2/google/sdk.go | 201 + .../x/oauth2/internal/client_appengine.go | 13 + vendor/golang.org/x/oauth2/internal/doc.go | 6 + vendor/golang.org/x/oauth2/internal/oauth2.go | 37 + vendor/golang.org/x/oauth2/internal/token.go | 268 + .../golang.org/x/oauth2/internal/transport.go | 34 + vendor/golang.org/x/oauth2/jws/jws.go | 182 + vendor/golang.org/x/oauth2/jwt/jwt.go | 162 + vendor/golang.org/x/oauth2/oauth2.go | 354 + vendor/golang.org/x/oauth2/token.go | 175 + vendor/golang.org/x/oauth2/transport.go | 144 + vendor/golang.org/x/text/AUTHORS | 3 + vendor/golang.org/x/text/CONTRIBUTORS | 3 + vendor/golang.org/x/text/LICENSE | 27 + vendor/golang.org/x/text/PATENTS | 22 + vendor/golang.org/x/text/encoding/encoding.go | 335 + .../text/encoding/internal/identifier/gen.go | 137 + .../internal/identifier/identifier.go | 81 + .../text/encoding/internal/identifier/mib.go | 1621 +++ vendor/golang.org/x/text/internal/gen/code.go | 369 + vendor/golang.org/x/text/internal/gen/gen.go | 333 + .../golang.org/x/text/transform/transform.go | 705 + vendor/golang.org/x/text/unicode/cldr/base.go | 105 + vendor/golang.org/x/text/unicode/cldr/cldr.go | 130 + .../golang.org/x/text/unicode/cldr/collate.go | 359 + .../golang.org/x/text/unicode/cldr/decode.go | 171 + .../golang.org/x/text/unicode/cldr/makexml.go | 400 + .../golang.org/x/text/unicode/cldr/resolve.go | 602 + .../golang.org/x/text/unicode/cldr/slice.go | 144 + vendor/golang.org/x/text/unicode/cldr/xml.go | 1494 +++ vendor/google.golang.org/api/AUTHORS | 10 + vendor/google.golang.org/api/CONTRIBUTORS | 54 + vendor/google.golang.org/api/LICENSE | 27 + .../api/calendar/v3/calendar-api.json | 2893 ++++ .../api/calendar/v3/calendar-gen.go | 8659 ++++++++++++ .../api/gensupport/backoff.go | 46 + .../api/gensupport/buffer.go | 77 + .../google.golang.org/api/gensupport/doc.go | 10 + .../google.golang.org/api/gensupport/go18.go | 17 + .../api/gensupport/header.go | 22 + .../google.golang.org/api/gensupport/json.go | 211 + .../api/gensupport/jsonfloat.go | 57 + .../google.golang.org/api/gensupport/media.go | 336 + .../api/gensupport/not_go18.go | 14 + .../api/gensupport/params.go | 50 + .../api/gensupport/resumable.go | 217 + .../google.golang.org/api/gensupport/retry.go | 85 + .../google.golang.org/api/gensupport/send.go | 71 + .../api/googleapi/googleapi.go | 406 + .../googleapi/internal/uritemplates/LICENSE | 18 + .../internal/uritemplates/uritemplates.go | 248 + .../googleapi/internal/uritemplates/utils.go | 17 + .../google.golang.org/api/googleapi/types.go | 202 + .../google.golang.org/appengine/.travis.yml | 18 + vendor/google.golang.org/appengine/LICENSE | 202 + vendor/google.golang.org/appengine/README.md | 73 + .../google.golang.org/appengine/appengine.go | 112 + .../appengine/appengine_vm.go | 20 + vendor/google.golang.org/appengine/errors.go | 46 + .../google.golang.org/appengine/identity.go | 142 + .../appengine/internal/api.go | 646 + .../appengine/internal/api_classic.go | 159 + .../appengine/internal/api_common.go | 86 + .../appengine/internal/app_id.go | 28 + .../app_identity/app_identity_service.pb.go | 296 + .../app_identity/app_identity_service.proto | 64 + .../appengine/internal/base/api_base.pb.go | 133 + .../appengine/internal/base/api_base.proto | 33 + .../internal/datastore/datastore_v3.pb.go | 2778 ++++ .../internal/datastore/datastore_v3.proto | 541 + .../appengine/internal/identity.go | 14 + .../appengine/internal/identity_classic.go | 27 + .../appengine/internal/identity_vm.go | 97 + .../appengine/internal/internal.go | 110 + .../appengine/internal/log/log_service.pb.go | 899 ++ .../appengine/internal/log/log_service.proto | 150 + .../appengine/internal/main.go | 15 + .../appengine/internal/main_vm.go | 44 + .../appengine/internal/metadata.go | 61 + .../internal/modules/modules_service.pb.go | 375 + .../internal/modules/modules_service.proto | 80 + .../appengine/internal/net.go | 56 + .../appengine/internal/regen.sh | 40 + .../internal/remote_api/remote_api.pb.go | 231 + .../internal/remote_api/remote_api.proto | 44 + .../appengine/internal/transaction.go | 107 + .../internal/urlfetch/urlfetch_service.pb.go | 355 + .../internal/urlfetch/urlfetch_service.proto | 64 + .../google.golang.org/appengine/namespace.go | 25 + vendor/google.golang.org/appengine/timeout.go | 20 + .../appengine/urlfetch/urlfetch.go | 210 + vendor/gopkg.in/yaml.v2/.travis.yml | 12 + vendor/gopkg.in/yaml.v2/LICENSE | 201 + vendor/gopkg.in/yaml.v2/LICENSE.libyaml | 31 + vendor/gopkg.in/yaml.v2/NOTICE | 13 + vendor/gopkg.in/yaml.v2/README.md | 133 + vendor/gopkg.in/yaml.v2/apic.go | 739 ++ vendor/gopkg.in/yaml.v2/decode.go | 775 ++ vendor/gopkg.in/yaml.v2/emitterc.go | 1685 +++ vendor/gopkg.in/yaml.v2/encode.go | 362 + vendor/gopkg.in/yaml.v2/go.mod | 5 + vendor/gopkg.in/yaml.v2/parserc.go | 1095 ++ vendor/gopkg.in/yaml.v2/readerc.go | 412 + vendor/gopkg.in/yaml.v2/resolve.go | 258 + vendor/gopkg.in/yaml.v2/scannerc.go | 2696 ++++ vendor/gopkg.in/yaml.v2/sorter.go | 113 + vendor/gopkg.in/yaml.v2/writerc.go | 26 + vendor/gopkg.in/yaml.v2/yaml.go | 466 + vendor/gopkg.in/yaml.v2/yamlh.go | 738 ++ vendor/gopkg.in/yaml.v2/yamlprivateh.go | 173 + 493 files changed, 119498 insertions(+), 4 deletions(-) create mode 100644 Gopkg.lock create mode 100644 Gopkg.toml create mode 100644 vendor/cloud.google.com/go/AUTHORS create mode 100644 vendor/cloud.google.com/go/CONTRIBUTORS create mode 100644 vendor/cloud.google.com/go/LICENSE create mode 100644 vendor/cloud.google.com/go/compute/metadata/metadata.go create mode 100644 vendor/github.com/briandowns/openweathermap/.gitignore create mode 100644 vendor/github.com/briandowns/openweathermap/.travis.yml create mode 100644 vendor/github.com/briandowns/openweathermap/CONTRIBUTING.md create mode 100644 vendor/github.com/briandowns/openweathermap/LICENSE create mode 100644 vendor/github.com/briandowns/openweathermap/Makefile create mode 100644 vendor/github.com/briandowns/openweathermap/README.md create mode 100644 vendor/github.com/briandowns/openweathermap/conditions.go create mode 100644 vendor/github.com/briandowns/openweathermap/current.go create mode 100644 vendor/github.com/briandowns/openweathermap/doc.go create mode 100644 vendor/github.com/briandowns/openweathermap/forecast.go create mode 100644 vendor/github.com/briandowns/openweathermap/forecast16.go create mode 100644 vendor/github.com/briandowns/openweathermap/forecast5.go create mode 100644 vendor/github.com/briandowns/openweathermap/history.go create mode 100644 vendor/github.com/briandowns/openweathermap/openweathermap.go create mode 100644 vendor/github.com/briandowns/openweathermap/pollution.go create mode 100644 vendor/github.com/briandowns/openweathermap/station.go create mode 100644 vendor/github.com/briandowns/openweathermap/uv.go create mode 100644 vendor/github.com/gdamore/encoding/.appveyor.yml create mode 100644 vendor/github.com/gdamore/encoding/.travis.yml create mode 100644 vendor/github.com/gdamore/encoding/LICENSE create mode 100644 vendor/github.com/gdamore/encoding/README.md create mode 100644 vendor/github.com/gdamore/encoding/ascii.go create mode 100644 vendor/github.com/gdamore/encoding/charmap.go create mode 100644 vendor/github.com/gdamore/encoding/doc.go create mode 100644 vendor/github.com/gdamore/encoding/ebcdic.go create mode 100644 vendor/github.com/gdamore/encoding/latin1.go create mode 100644 vendor/github.com/gdamore/encoding/latin5.go create mode 100644 vendor/github.com/gdamore/encoding/utf8.go create mode 100644 vendor/github.com/gdamore/tcell/.appveyor.yml create mode 100644 vendor/github.com/gdamore/tcell/.gitignore create mode 100644 vendor/github.com/gdamore/tcell/.travis.yml create mode 100644 vendor/github.com/gdamore/tcell/AUTHORS create mode 100644 vendor/github.com/gdamore/tcell/LICENSE create mode 100644 vendor/github.com/gdamore/tcell/README.md create mode 100644 vendor/github.com/gdamore/tcell/attr.go create mode 100644 vendor/github.com/gdamore/tcell/cell.go create mode 100644 vendor/github.com/gdamore/tcell/charset_stub.go create mode 100644 vendor/github.com/gdamore/tcell/charset_unix.go create mode 100644 vendor/github.com/gdamore/tcell/charset_windows.go create mode 100644 vendor/github.com/gdamore/tcell/color.go create mode 100644 vendor/github.com/gdamore/tcell/colorfit.go create mode 100644 vendor/github.com/gdamore/tcell/console_stub.go create mode 100644 vendor/github.com/gdamore/tcell/console_win.go create mode 100644 vendor/github.com/gdamore/tcell/database.json create mode 100644 vendor/github.com/gdamore/tcell/doc.go create mode 100644 vendor/github.com/gdamore/tcell/encoding.go create mode 100644 vendor/github.com/gdamore/tcell/errors.go create mode 100644 vendor/github.com/gdamore/tcell/event.go create mode 100644 vendor/github.com/gdamore/tcell/interrupt.go create mode 100644 vendor/github.com/gdamore/tcell/key.go create mode 100644 vendor/github.com/gdamore/tcell/mouse.go create mode 100644 vendor/github.com/gdamore/tcell/resize.go create mode 100644 vendor/github.com/gdamore/tcell/runes.go create mode 100644 vendor/github.com/gdamore/tcell/screen.go create mode 100644 vendor/github.com/gdamore/tcell/simulation.go create mode 100644 vendor/github.com/gdamore/tcell/style.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/.gitignore create mode 100644 vendor/github.com/gdamore/tcell/terminfo/TERMINALS.md create mode 100755 vendor/github.com/gdamore/tcell/terminfo/mkdatabase.sh create mode 100644 vendor/github.com/gdamore/tcell/terminfo/mkinfo.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/models.txt create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_Eterm.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_Eterm_256color.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_adm3a.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_aixterm.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_ansi.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_aterm.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_beterm.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_bsdos_pc.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_cygwin.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_d200.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_d210.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_dtterm.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_gnome.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_gnome_256color.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_hpterm.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_hz1500.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_konsole.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_konsole_256color.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_kterm.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_linux.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_pcansi.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_rxvt.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_rxvt_256color.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_rxvt_unicode.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_rxvt_unicode_256color.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_screen.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_screen_256color.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_st.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_st_meta.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_st_meta_256color.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_st_meta_truecolor.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_st_truecolor.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_sun.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_sun_color.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_tvi910.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_tvi912.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_tvi921.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_tvi925.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_tvi950.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_tvi970.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_vt100.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_vt102.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_vt220.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_vt320.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_vt400.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_vt420.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_vt52.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_wy50.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_wy60.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_wy99_ansi.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_wy99a_ansi.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_xfce.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_xnuppc.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_xterm.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_xterm_256color.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/term_xterm_truecolor.go create mode 100644 vendor/github.com/gdamore/tcell/terminfo/terminfo.go create mode 100644 vendor/github.com/gdamore/tcell/tscreen.go create mode 100644 vendor/github.com/gdamore/tcell/tscreen_bsd.go create mode 100644 vendor/github.com/gdamore/tcell/tscreen_linux.go create mode 100644 vendor/github.com/gdamore/tcell/tscreen_posix.go create mode 100644 vendor/github.com/gdamore/tcell/tscreen_stub.go create mode 100644 vendor/github.com/gdamore/tcell/tscreen_windows.go create mode 100644 vendor/github.com/go-test/deep/.gitignore create mode 100644 vendor/github.com/go-test/deep/.travis.yml create mode 100644 vendor/github.com/go-test/deep/CHANGES.md create mode 100644 vendor/github.com/go-test/deep/LICENSE create mode 100644 vendor/github.com/go-test/deep/README.md create mode 100644 vendor/github.com/go-test/deep/deep.go create mode 100644 vendor/github.com/golang/protobuf/AUTHORS create mode 100644 vendor/github.com/golang/protobuf/CONTRIBUTORS create mode 100644 vendor/github.com/golang/protobuf/LICENSE create mode 100644 vendor/github.com/golang/protobuf/proto/clone.go create mode 100644 vendor/github.com/golang/protobuf/proto/decode.go create mode 100644 vendor/github.com/golang/protobuf/proto/discard.go create mode 100644 vendor/github.com/golang/protobuf/proto/encode.go create mode 100644 vendor/github.com/golang/protobuf/proto/equal.go create mode 100644 vendor/github.com/golang/protobuf/proto/extensions.go create mode 100644 vendor/github.com/golang/protobuf/proto/lib.go create mode 100644 vendor/github.com/golang/protobuf/proto/message_set.go create mode 100644 vendor/github.com/golang/protobuf/proto/pointer_reflect.go create mode 100644 vendor/github.com/golang/protobuf/proto/pointer_unsafe.go create mode 100644 vendor/github.com/golang/protobuf/proto/properties.go create mode 100644 vendor/github.com/golang/protobuf/proto/table_marshal.go create mode 100644 vendor/github.com/golang/protobuf/proto/table_merge.go create mode 100644 vendor/github.com/golang/protobuf/proto/table_unmarshal.go create mode 100644 vendor/github.com/golang/protobuf/proto/text.go create mode 100644 vendor/github.com/golang/protobuf/proto/text_parser.go create mode 100644 vendor/github.com/google/go-github/AUTHORS create mode 100644 vendor/github.com/google/go-github/LICENSE create mode 100644 vendor/github.com/google/go-github/github/activity.go create mode 100644 vendor/github.com/google/go-github/github/activity_events.go create mode 100644 vendor/github.com/google/go-github/github/activity_notifications.go create mode 100644 vendor/github.com/google/go-github/github/activity_star.go create mode 100644 vendor/github.com/google/go-github/github/activity_watching.go create mode 100644 vendor/github.com/google/go-github/github/admin.go create mode 100644 vendor/github.com/google/go-github/github/admin_stats.go create mode 100644 vendor/github.com/google/go-github/github/apps.go create mode 100644 vendor/github.com/google/go-github/github/apps_installation.go create mode 100644 vendor/github.com/google/go-github/github/apps_marketplace.go create mode 100644 vendor/github.com/google/go-github/github/authorizations.go create mode 100644 vendor/github.com/google/go-github/github/doc.go create mode 100644 vendor/github.com/google/go-github/github/event_types.go create mode 100644 vendor/github.com/google/go-github/github/gen-accessors.go create mode 100644 vendor/github.com/google/go-github/github/gists.go create mode 100644 vendor/github.com/google/go-github/github/gists_comments.go create mode 100644 vendor/github.com/google/go-github/github/git.go create mode 100644 vendor/github.com/google/go-github/github/git_blobs.go create mode 100644 vendor/github.com/google/go-github/github/git_commits.go create mode 100644 vendor/github.com/google/go-github/github/git_refs.go create mode 100644 vendor/github.com/google/go-github/github/git_tags.go create mode 100644 vendor/github.com/google/go-github/github/git_trees.go create mode 100644 vendor/github.com/google/go-github/github/github-accessors.go create mode 100644 vendor/github.com/google/go-github/github/github.go create mode 100644 vendor/github.com/google/go-github/github/gitignore.go create mode 100644 vendor/github.com/google/go-github/github/issues.go create mode 100644 vendor/github.com/google/go-github/github/issues_assignees.go create mode 100644 vendor/github.com/google/go-github/github/issues_comments.go create mode 100644 vendor/github.com/google/go-github/github/issues_events.go create mode 100644 vendor/github.com/google/go-github/github/issues_labels.go create mode 100644 vendor/github.com/google/go-github/github/issues_milestones.go create mode 100644 vendor/github.com/google/go-github/github/issues_timeline.go create mode 100644 vendor/github.com/google/go-github/github/licenses.go create mode 100644 vendor/github.com/google/go-github/github/messages.go create mode 100644 vendor/github.com/google/go-github/github/migrations.go create mode 100644 vendor/github.com/google/go-github/github/migrations_source_import.go create mode 100644 vendor/github.com/google/go-github/github/misc.go create mode 100644 vendor/github.com/google/go-github/github/orgs.go create mode 100644 vendor/github.com/google/go-github/github/orgs_hooks.go create mode 100644 vendor/github.com/google/go-github/github/orgs_members.go create mode 100644 vendor/github.com/google/go-github/github/orgs_outside_collaborators.go create mode 100644 vendor/github.com/google/go-github/github/orgs_projects.go create mode 100644 vendor/github.com/google/go-github/github/orgs_teams.go create mode 100644 vendor/github.com/google/go-github/github/orgs_users_blocking.go create mode 100644 vendor/github.com/google/go-github/github/projects.go create mode 100644 vendor/github.com/google/go-github/github/pulls.go create mode 100644 vendor/github.com/google/go-github/github/pulls_comments.go create mode 100644 vendor/github.com/google/go-github/github/pulls_reviewers.go create mode 100644 vendor/github.com/google/go-github/github/pulls_reviews.go create mode 100644 vendor/github.com/google/go-github/github/reactions.go create mode 100644 vendor/github.com/google/go-github/github/repos.go create mode 100644 vendor/github.com/google/go-github/github/repos_collaborators.go create mode 100644 vendor/github.com/google/go-github/github/repos_comments.go create mode 100644 vendor/github.com/google/go-github/github/repos_commits.go create mode 100644 vendor/github.com/google/go-github/github/repos_community_health.go create mode 100644 vendor/github.com/google/go-github/github/repos_contents.go create mode 100644 vendor/github.com/google/go-github/github/repos_deployments.go create mode 100644 vendor/github.com/google/go-github/github/repos_forks.go create mode 100644 vendor/github.com/google/go-github/github/repos_hooks.go create mode 100644 vendor/github.com/google/go-github/github/repos_invitations.go create mode 100644 vendor/github.com/google/go-github/github/repos_keys.go create mode 100644 vendor/github.com/google/go-github/github/repos_merging.go create mode 100644 vendor/github.com/google/go-github/github/repos_pages.go create mode 100644 vendor/github.com/google/go-github/github/repos_projects.go create mode 100644 vendor/github.com/google/go-github/github/repos_releases.go create mode 100644 vendor/github.com/google/go-github/github/repos_stats.go create mode 100644 vendor/github.com/google/go-github/github/repos_statuses.go create mode 100644 vendor/github.com/google/go-github/github/repos_traffic.go create mode 100644 vendor/github.com/google/go-github/github/search.go create mode 100644 vendor/github.com/google/go-github/github/strings.go create mode 100644 vendor/github.com/google/go-github/github/teams.go create mode 100644 vendor/github.com/google/go-github/github/teams_discussion_comments.go create mode 100644 vendor/github.com/google/go-github/github/teams_discussions.go create mode 100644 vendor/github.com/google/go-github/github/timestamp.go create mode 100644 vendor/github.com/google/go-github/github/users.go create mode 100644 vendor/github.com/google/go-github/github/users_administration.go create mode 100644 vendor/github.com/google/go-github/github/users_blocking.go create mode 100644 vendor/github.com/google/go-github/github/users_emails.go create mode 100644 vendor/github.com/google/go-github/github/users_followers.go create mode 100644 vendor/github.com/google/go-github/github/users_gpg_keys.go create mode 100644 vendor/github.com/google/go-github/github/users_keys.go create mode 100644 vendor/github.com/google/go-github/github/with_appengine.go create mode 100644 vendor/github.com/google/go-github/github/without_appengine.go create mode 100644 vendor/github.com/google/go-querystring/LICENSE create mode 100644 vendor/github.com/google/go-querystring/query/encode.go create mode 100644 vendor/github.com/jessevdk/go-flags/.travis.yml create mode 100644 vendor/github.com/jessevdk/go-flags/LICENSE create mode 100644 vendor/github.com/jessevdk/go-flags/README.md create mode 100644 vendor/github.com/jessevdk/go-flags/arg.go create mode 100755 vendor/github.com/jessevdk/go-flags/check_crosscompile.sh create mode 100644 vendor/github.com/jessevdk/go-flags/closest.go create mode 100644 vendor/github.com/jessevdk/go-flags/command.go create mode 100644 vendor/github.com/jessevdk/go-flags/completion.go create mode 100644 vendor/github.com/jessevdk/go-flags/convert.go create mode 100644 vendor/github.com/jessevdk/go-flags/error.go create mode 100644 vendor/github.com/jessevdk/go-flags/flags.go create mode 100644 vendor/github.com/jessevdk/go-flags/group.go create mode 100644 vendor/github.com/jessevdk/go-flags/help.go create mode 100644 vendor/github.com/jessevdk/go-flags/ini.go create mode 100644 vendor/github.com/jessevdk/go-flags/man.go create mode 100644 vendor/github.com/jessevdk/go-flags/multitag.go create mode 100644 vendor/github.com/jessevdk/go-flags/option.go create mode 100644 vendor/github.com/jessevdk/go-flags/optstyle_other.go create mode 100644 vendor/github.com/jessevdk/go-flags/optstyle_windows.go create mode 100644 vendor/github.com/jessevdk/go-flags/parser.go create mode 100644 vendor/github.com/jessevdk/go-flags/termsize.go create mode 100644 vendor/github.com/jessevdk/go-flags/termsize_nosysioctl.go create mode 100644 vendor/github.com/jessevdk/go-flags/tiocgwinsz_bsdish.go create mode 100644 vendor/github.com/jessevdk/go-flags/tiocgwinsz_linux.go create mode 100644 vendor/github.com/jessevdk/go-flags/tiocgwinsz_other.go create mode 100644 vendor/github.com/lucasb-eyer/go-colorful/.gitignore create mode 100644 vendor/github.com/lucasb-eyer/go-colorful/.travis.yml create mode 100644 vendor/github.com/lucasb-eyer/go-colorful/LICENSE create mode 100644 vendor/github.com/lucasb-eyer/go-colorful/README.md create mode 100644 vendor/github.com/lucasb-eyer/go-colorful/colorgens.go create mode 100644 vendor/github.com/lucasb-eyer/go-colorful/colors.go create mode 100644 vendor/github.com/lucasb-eyer/go-colorful/happy_palettegen.go create mode 100644 vendor/github.com/lucasb-eyer/go-colorful/hexcolor.go create mode 100644 vendor/github.com/lucasb-eyer/go-colorful/soft_palettegen.go create mode 100644 vendor/github.com/lucasb-eyer/go-colorful/warm_palettegen.go create mode 100644 vendor/github.com/mattn/go-runewidth/.travis.yml create mode 100644 vendor/github.com/mattn/go-runewidth/LICENSE create mode 100644 vendor/github.com/mattn/go-runewidth/README.mkd create mode 100644 vendor/github.com/mattn/go-runewidth/runewidth.go create mode 100644 vendor/github.com/mattn/go-runewidth/runewidth_js.go create mode 100644 vendor/github.com/mattn/go-runewidth/runewidth_posix.go create mode 100644 vendor/github.com/mattn/go-runewidth/runewidth_windows.go create mode 100644 vendor/github.com/olebedev/config/.gitignore create mode 100644 vendor/github.com/olebedev/config/LICENSE create mode 100644 vendor/github.com/olebedev/config/README.md create mode 100644 vendor/github.com/olebedev/config/config.go create mode 100644 vendor/github.com/olebedev/config/doc.go create mode 100644 vendor/github.com/olebedev/config/wercker.yml create mode 100644 vendor/github.com/radovskyb/watcher/.travis.yml create mode 100644 vendor/github.com/radovskyb/watcher/LICENSE create mode 100644 vendor/github.com/radovskyb/watcher/README.md create mode 100644 vendor/github.com/radovskyb/watcher/samefile.go create mode 100644 vendor/github.com/radovskyb/watcher/samefile_windows.go create mode 100644 vendor/github.com/radovskyb/watcher/watcher.go create mode 100644 vendor/github.com/rivo/tview/CODE_OF_CONDUCT.md create mode 100644 vendor/github.com/rivo/tview/CONTRIBUTING.md create mode 100644 vendor/github.com/rivo/tview/LICENSE.txt create mode 100644 vendor/github.com/rivo/tview/README.md create mode 100644 vendor/github.com/rivo/tview/ansii.go create mode 100644 vendor/github.com/rivo/tview/application.go create mode 100644 vendor/github.com/rivo/tview/box.go create mode 100644 vendor/github.com/rivo/tview/button.go create mode 100644 vendor/github.com/rivo/tview/checkbox.go create mode 100644 vendor/github.com/rivo/tview/doc.go create mode 100644 vendor/github.com/rivo/tview/dropdown.go create mode 100644 vendor/github.com/rivo/tview/flex.go create mode 100644 vendor/github.com/rivo/tview/focusable.go create mode 100644 vendor/github.com/rivo/tview/form.go create mode 100644 vendor/github.com/rivo/tview/frame.go create mode 100644 vendor/github.com/rivo/tview/grid.go create mode 100644 vendor/github.com/rivo/tview/inputfield.go create mode 100644 vendor/github.com/rivo/tview/list.go create mode 100644 vendor/github.com/rivo/tview/modal.go create mode 100644 vendor/github.com/rivo/tview/pages.go create mode 100644 vendor/github.com/rivo/tview/primitive.go create mode 100644 vendor/github.com/rivo/tview/styles.go create mode 100644 vendor/github.com/rivo/tview/table.go create mode 100644 vendor/github.com/rivo/tview/textview.go create mode 100644 vendor/github.com/rivo/tview/tview.gif create mode 100644 vendor/github.com/rivo/tview/util.go create mode 100644 vendor/github.com/yfronto/newrelic/.gitignore create mode 100644 vendor/github.com/yfronto/newrelic/.travis.yml create mode 100644 vendor/github.com/yfronto/newrelic/LICENSE create mode 100644 vendor/github.com/yfronto/newrelic/README.md create mode 100644 vendor/github.com/yfronto/newrelic/alert_conditions.go create mode 100644 vendor/github.com/yfronto/newrelic/alert_events.go create mode 100644 vendor/github.com/yfronto/newrelic/alert_events_test_fixtures.go create mode 100644 vendor/github.com/yfronto/newrelic/application_deployments.go create mode 100644 vendor/github.com/yfronto/newrelic/application_host_metrics.go create mode 100644 vendor/github.com/yfronto/newrelic/application_hosts.go create mode 100644 vendor/github.com/yfronto/newrelic/application_instance_metrics.go create mode 100644 vendor/github.com/yfronto/newrelic/application_instances.go create mode 100644 vendor/github.com/yfronto/newrelic/application_metrics.go create mode 100644 vendor/github.com/yfronto/newrelic/application_metrics_test_fixtures.go create mode 100644 vendor/github.com/yfronto/newrelic/applications.go create mode 100644 vendor/github.com/yfronto/newrelic/applications_test_fixtures.go create mode 100644 vendor/github.com/yfronto/newrelic/array.go create mode 100644 vendor/github.com/yfronto/newrelic/browser_applications.go create mode 100644 vendor/github.com/yfronto/newrelic/common_test_fixtures.go create mode 100644 vendor/github.com/yfronto/newrelic/component_metrics.go create mode 100644 vendor/github.com/yfronto/newrelic/http_helper.go create mode 100644 vendor/github.com/yfronto/newrelic/http_helper_test_fixtures.go create mode 100644 vendor/github.com/yfronto/newrelic/key_transactions.go create mode 100644 vendor/github.com/yfronto/newrelic/legacy_alert_policies.go create mode 100644 vendor/github.com/yfronto/newrelic/main.go create mode 100644 vendor/github.com/yfronto/newrelic/metrics.go create mode 100644 vendor/github.com/yfronto/newrelic/mobile_application_metrics.go create mode 100644 vendor/github.com/yfronto/newrelic/mobile_applications.go create mode 100644 vendor/github.com/yfronto/newrelic/notification_channels.go create mode 100644 vendor/github.com/yfronto/newrelic/server_metrics.go create mode 100644 vendor/github.com/yfronto/newrelic/servers.go create mode 100644 vendor/github.com/yfronto/newrelic/usages.go create mode 100644 vendor/golang.org/x/net/AUTHORS create mode 100644 vendor/golang.org/x/net/CONTRIBUTORS create mode 100644 vendor/golang.org/x/net/LICENSE create mode 100644 vendor/golang.org/x/net/PATENTS create mode 100644 vendor/golang.org/x/net/context/context.go create mode 100644 vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go create mode 100644 vendor/golang.org/x/net/context/ctxhttp/ctxhttp_pre17.go create mode 100644 vendor/golang.org/x/net/context/go17.go create mode 100644 vendor/golang.org/x/net/context/go19.go create mode 100644 vendor/golang.org/x/net/context/pre_go17.go create mode 100644 vendor/golang.org/x/net/context/pre_go19.go create mode 100644 vendor/golang.org/x/oauth2/.travis.yml create mode 100644 vendor/golang.org/x/oauth2/AUTHORS create mode 100644 vendor/golang.org/x/oauth2/CONTRIBUTING.md create mode 100644 vendor/golang.org/x/oauth2/CONTRIBUTORS create mode 100644 vendor/golang.org/x/oauth2/LICENSE create mode 100644 vendor/golang.org/x/oauth2/README.md create mode 100644 vendor/golang.org/x/oauth2/google/appengine.go create mode 100644 vendor/golang.org/x/oauth2/google/appengine_hook.go create mode 100644 vendor/golang.org/x/oauth2/google/appengineflex_hook.go create mode 100644 vendor/golang.org/x/oauth2/google/default.go create mode 100644 vendor/golang.org/x/oauth2/google/doc_go19.go create mode 100644 vendor/golang.org/x/oauth2/google/doc_not_go19.go create mode 100644 vendor/golang.org/x/oauth2/google/go19.go create mode 100644 vendor/golang.org/x/oauth2/google/google.go create mode 100644 vendor/golang.org/x/oauth2/google/jwt.go create mode 100644 vendor/golang.org/x/oauth2/google/not_go19.go create mode 100644 vendor/golang.org/x/oauth2/google/sdk.go create mode 100644 vendor/golang.org/x/oauth2/internal/client_appengine.go create mode 100644 vendor/golang.org/x/oauth2/internal/doc.go create mode 100644 vendor/golang.org/x/oauth2/internal/oauth2.go create mode 100644 vendor/golang.org/x/oauth2/internal/token.go create mode 100644 vendor/golang.org/x/oauth2/internal/transport.go create mode 100644 vendor/golang.org/x/oauth2/jws/jws.go create mode 100644 vendor/golang.org/x/oauth2/jwt/jwt.go create mode 100644 vendor/golang.org/x/oauth2/oauth2.go create mode 100644 vendor/golang.org/x/oauth2/token.go create mode 100644 vendor/golang.org/x/oauth2/transport.go create mode 100644 vendor/golang.org/x/text/AUTHORS create mode 100644 vendor/golang.org/x/text/CONTRIBUTORS create mode 100644 vendor/golang.org/x/text/LICENSE create mode 100644 vendor/golang.org/x/text/PATENTS create mode 100644 vendor/golang.org/x/text/encoding/encoding.go create mode 100644 vendor/golang.org/x/text/encoding/internal/identifier/gen.go create mode 100644 vendor/golang.org/x/text/encoding/internal/identifier/identifier.go create mode 100644 vendor/golang.org/x/text/encoding/internal/identifier/mib.go create mode 100644 vendor/golang.org/x/text/internal/gen/code.go create mode 100644 vendor/golang.org/x/text/internal/gen/gen.go create mode 100644 vendor/golang.org/x/text/transform/transform.go create mode 100644 vendor/golang.org/x/text/unicode/cldr/base.go create mode 100644 vendor/golang.org/x/text/unicode/cldr/cldr.go create mode 100644 vendor/golang.org/x/text/unicode/cldr/collate.go create mode 100644 vendor/golang.org/x/text/unicode/cldr/decode.go create mode 100644 vendor/golang.org/x/text/unicode/cldr/makexml.go create mode 100644 vendor/golang.org/x/text/unicode/cldr/resolve.go create mode 100644 vendor/golang.org/x/text/unicode/cldr/slice.go create mode 100644 vendor/golang.org/x/text/unicode/cldr/xml.go create mode 100644 vendor/google.golang.org/api/AUTHORS create mode 100644 vendor/google.golang.org/api/CONTRIBUTORS create mode 100644 vendor/google.golang.org/api/LICENSE create mode 100644 vendor/google.golang.org/api/calendar/v3/calendar-api.json create mode 100644 vendor/google.golang.org/api/calendar/v3/calendar-gen.go create mode 100644 vendor/google.golang.org/api/gensupport/backoff.go create mode 100644 vendor/google.golang.org/api/gensupport/buffer.go create mode 100644 vendor/google.golang.org/api/gensupport/doc.go create mode 100644 vendor/google.golang.org/api/gensupport/go18.go create mode 100644 vendor/google.golang.org/api/gensupport/header.go create mode 100644 vendor/google.golang.org/api/gensupport/json.go create mode 100644 vendor/google.golang.org/api/gensupport/jsonfloat.go create mode 100644 vendor/google.golang.org/api/gensupport/media.go create mode 100644 vendor/google.golang.org/api/gensupport/not_go18.go create mode 100644 vendor/google.golang.org/api/gensupport/params.go create mode 100644 vendor/google.golang.org/api/gensupport/resumable.go create mode 100644 vendor/google.golang.org/api/gensupport/retry.go create mode 100644 vendor/google.golang.org/api/gensupport/send.go create mode 100644 vendor/google.golang.org/api/googleapi/googleapi.go create mode 100644 vendor/google.golang.org/api/googleapi/internal/uritemplates/LICENSE create mode 100644 vendor/google.golang.org/api/googleapi/internal/uritemplates/uritemplates.go create mode 100644 vendor/google.golang.org/api/googleapi/internal/uritemplates/utils.go create mode 100644 vendor/google.golang.org/api/googleapi/types.go create mode 100644 vendor/google.golang.org/appengine/.travis.yml create mode 100644 vendor/google.golang.org/appengine/LICENSE create mode 100644 vendor/google.golang.org/appengine/README.md create mode 100644 vendor/google.golang.org/appengine/appengine.go create mode 100644 vendor/google.golang.org/appengine/appengine_vm.go create mode 100644 vendor/google.golang.org/appengine/errors.go create mode 100644 vendor/google.golang.org/appengine/identity.go create mode 100644 vendor/google.golang.org/appengine/internal/api.go create mode 100644 vendor/google.golang.org/appengine/internal/api_classic.go create mode 100644 vendor/google.golang.org/appengine/internal/api_common.go create mode 100644 vendor/google.golang.org/appengine/internal/app_id.go create mode 100644 vendor/google.golang.org/appengine/internal/app_identity/app_identity_service.pb.go create mode 100644 vendor/google.golang.org/appengine/internal/app_identity/app_identity_service.proto create mode 100644 vendor/google.golang.org/appengine/internal/base/api_base.pb.go create mode 100644 vendor/google.golang.org/appengine/internal/base/api_base.proto create mode 100644 vendor/google.golang.org/appengine/internal/datastore/datastore_v3.pb.go create mode 100755 vendor/google.golang.org/appengine/internal/datastore/datastore_v3.proto create mode 100644 vendor/google.golang.org/appengine/internal/identity.go create mode 100644 vendor/google.golang.org/appengine/internal/identity_classic.go create mode 100644 vendor/google.golang.org/appengine/internal/identity_vm.go create mode 100644 vendor/google.golang.org/appengine/internal/internal.go create mode 100644 vendor/google.golang.org/appengine/internal/log/log_service.pb.go create mode 100644 vendor/google.golang.org/appengine/internal/log/log_service.proto create mode 100644 vendor/google.golang.org/appengine/internal/main.go create mode 100644 vendor/google.golang.org/appengine/internal/main_vm.go create mode 100644 vendor/google.golang.org/appengine/internal/metadata.go create mode 100644 vendor/google.golang.org/appengine/internal/modules/modules_service.pb.go create mode 100644 vendor/google.golang.org/appengine/internal/modules/modules_service.proto create mode 100644 vendor/google.golang.org/appengine/internal/net.go create mode 100755 vendor/google.golang.org/appengine/internal/regen.sh create mode 100644 vendor/google.golang.org/appengine/internal/remote_api/remote_api.pb.go create mode 100644 vendor/google.golang.org/appengine/internal/remote_api/remote_api.proto create mode 100644 vendor/google.golang.org/appengine/internal/transaction.go create mode 100644 vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.pb.go create mode 100644 vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto create mode 100644 vendor/google.golang.org/appengine/namespace.go create mode 100644 vendor/google.golang.org/appengine/timeout.go create mode 100644 vendor/google.golang.org/appengine/urlfetch/urlfetch.go create mode 100644 vendor/gopkg.in/yaml.v2/.travis.yml create mode 100644 vendor/gopkg.in/yaml.v2/LICENSE create mode 100644 vendor/gopkg.in/yaml.v2/LICENSE.libyaml create mode 100644 vendor/gopkg.in/yaml.v2/NOTICE create mode 100644 vendor/gopkg.in/yaml.v2/README.md create mode 100644 vendor/gopkg.in/yaml.v2/apic.go create mode 100644 vendor/gopkg.in/yaml.v2/decode.go create mode 100644 vendor/gopkg.in/yaml.v2/emitterc.go create mode 100644 vendor/gopkg.in/yaml.v2/encode.go create mode 100644 vendor/gopkg.in/yaml.v2/go.mod create mode 100644 vendor/gopkg.in/yaml.v2/parserc.go create mode 100644 vendor/gopkg.in/yaml.v2/readerc.go create mode 100644 vendor/gopkg.in/yaml.v2/resolve.go create mode 100644 vendor/gopkg.in/yaml.v2/scannerc.go create mode 100644 vendor/gopkg.in/yaml.v2/sorter.go create mode 100644 vendor/gopkg.in/yaml.v2/writerc.go create mode 100644 vendor/gopkg.in/yaml.v2/yaml.go create mode 100644 vendor/gopkg.in/yaml.v2/yamlh.go create mode 100644 vendor/gopkg.in/yaml.v2/yamlprivateh.go diff --git a/.gitignore b/.gitignore index 7ff72253..7048d6ec 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ gcal/client_secret.json .idea/ dist/* +bin/ diff --git a/Gopkg.lock b/Gopkg.lock new file mode 100644 index 00000000..6b10b303 --- /dev/null +++ b/Gopkg.lock @@ -0,0 +1,169 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "cloud.google.com/go" + packages = ["compute/metadata"] + revision = "0fd7230b2a7505833d5f69b75cbd6c9582401479" + version = "v0.23.0" + +[[projects]] + name = "github.com/briandowns/openweathermap" + packages = ["."] + revision = "1b875797cb8f0a25f7232377c231bf9a294f7c86" + version = "0.11" + +[[projects]] + branch = "master" + name = "github.com/gdamore/encoding" + packages = ["."] + revision = "b23993cbb6353f0e6aa98d0ee318a34728f628b9" + +[[projects]] + name = "github.com/gdamore/tcell" + packages = [ + ".", + "terminfo" + ] + revision = "061d51a604c546b48e92253cb65190d76cecf4c6" + version = "v1.0.0" + +[[projects]] + name = "github.com/go-test/deep" + packages = ["."] + revision = "6592d9cc0a499ad2d5f574fde80a2b5c5cc3b4f5" + version = "v1.0.1" + +[[projects]] + name = "github.com/golang/protobuf" + packages = ["proto"] + revision = "b4deda0973fb4c70b50d226b1af49f3da59f5265" + version = "v1.1.0" + +[[projects]] + branch = "master" + name = "github.com/google/go-github" + packages = ["github"] + revision = "2ae5df7848328c214a48cec94c7d410cf8526527" + +[[projects]] + branch = "master" + name = "github.com/google/go-querystring" + packages = ["query"] + revision = "53e6ce116135b80d037921a7fdd5138cf32d7a8a" + +[[projects]] + name = "github.com/jessevdk/go-flags" + packages = ["."] + revision = "c6ca198ec95c841fdb89fc0de7496fed11ab854e" + version = "v1.4.0" + +[[projects]] + name = "github.com/lucasb-eyer/go-colorful" + packages = ["."] + revision = "345fbb3dbcdb252d9985ee899a84963c0fa24c82" + version = "v1.0" + +[[projects]] + name = "github.com/mattn/go-runewidth" + packages = ["."] + revision = "9e777a8366cce605130a531d2cd6363d07ad7317" + version = "v0.0.2" + +[[projects]] + branch = "master" + name = "github.com/olebedev/config" + packages = ["."] + revision = "9a10d05a33a8b9e828f20491e21e8927dec35f72" + +[[projects]] + name = "github.com/radovskyb/watcher" + packages = ["."] + revision = "6145e1439b9de93806925353403f91d2abbad8a5" + version = "v1.0.2" + +[[projects]] + branch = "master" + name = "github.com/rivo/tview" + packages = ["."] + revision = "71ecf1f4299c6d72b16d20da72405b7e85ac8720" + +[[projects]] + branch = "master" + name = "github.com/yfronto/newrelic" + packages = ["."] + revision = "f7fa0c6f30ac3d86360c73726cfe9dd526a63d21" + +[[projects]] + branch = "master" + name = "golang.org/x/net" + packages = [ + "context", + "context/ctxhttp" + ] + revision = "1e491301e022f8f977054da4c2d852decd59571f" + +[[projects]] + branch = "master" + name = "golang.org/x/oauth2" + packages = [ + ".", + "google", + "internal", + "jws", + "jwt" + ] + revision = "1e0a3fa8ba9a5c9eb35c271780101fdaf1b205d7" + +[[projects]] + name = "golang.org/x/text" + packages = [ + "encoding", + "encoding/internal/identifier", + "internal/gen", + "transform", + "unicode/cldr" + ] + revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0" + version = "v0.3.0" + +[[projects]] + branch = "master" + name = "google.golang.org/api" + packages = [ + "calendar/v3", + "gensupport", + "googleapi", + "googleapi/internal/uritemplates" + ] + revision = "00e3bb8d04691e25ee2fccf98c866bcb7925c3ec" + +[[projects]] + name = "google.golang.org/appengine" + packages = [ + ".", + "internal", + "internal/app_identity", + "internal/base", + "internal/datastore", + "internal/log", + "internal/modules", + "internal/remote_api", + "internal/urlfetch", + "urlfetch" + ] + revision = "150dc57a1b433e64154302bdc40b6bb8aefa313a" + version = "v1.0.0" + +[[projects]] + name = "gopkg.in/yaml.v2" + packages = ["."] + revision = "5420a8b6744d3b0345ab293f6fcba19c978f1183" + version = "v2.2.1" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "96c4d6298328080435e3f1de8240ec9fb04419db37e20ae77d7fa8dc75ca3e5a" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml new file mode 100644 index 00000000..5f3bc316 --- /dev/null +++ b/Gopkg.toml @@ -0,0 +1,78 @@ +# Gopkg.toml example +# +# Refer to https://golang.github.io/dep/docs/Gopkg.toml.html +# for detailed Gopkg.toml documentation. +# +# required = ["github.com/user/thing/cmd/thing"] +# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] +# +# [[constraint]] +# name = "github.com/user/project" +# version = "1.0.0" +# +# [[constraint]] +# name = "github.com/user/project2" +# branch = "dev" +# source = "github.com/myfork/project2" +# +# [[override]] +# name = "github.com/x/y" +# version = "2.4.0" +# +# [prune] +# non-go = false +# go-tests = true +# unused-packages = true + + +[[constraint]] + name = "github.com/briandowns/openweathermap" + version = "0.11.0" + +[[constraint]] + name = "github.com/gdamore/tcell" + version = "1.0.0" + +[[constraint]] + name = "github.com/go-test/deep" + version = "1.0.1" + +[[constraint]] + name = "github.com/google/go-github" + branch = "master" + +[[constraint]] + name = "github.com/jessevdk/go-flags" + version = "1.4.0" + +[[constraint]] + branch = "master" + name = "github.com/olebedev/config" + +[[constraint]] + name = "github.com/radovskyb/watcher" + version = "1.0.2" + +[[constraint]] + branch = "master" + name = "github.com/rivo/tview" + +[[constraint]] + branch = "master" + name = "github.com/yfronto/newrelic" + +[[constraint]] + branch = "master" + name = "golang.org/x/oauth2" + +[[constraint]] + branch = "master" + name = "google.golang.org/api" + +[[constraint]] + name = "gopkg.in/yaml.v2" + version = "2.2.1" + +[prune] + go-tests = true + unused-packages = true diff --git a/Makefile b/Makefile index 0828bf38..4d54bd05 100644 --- a/Makefile +++ b/Makefile @@ -2,13 +2,13 @@ BRANCH := `git rev-parse --abbrev-ref HEAD` .PHONY: dependencies install run -dependencies: - go get -v ./... +build: + go build -o bin/wtf install: which wtf | xargs rm || true go install -ldflags="-X main.version=$(shell git describe --always --abbrev=6)_$(BRANCH) -X main.date=$(shell date +%FT%T%z)" which wtf -run: - wtf +run: build + bin/wtf diff --git a/vendor/cloud.google.com/go/AUTHORS b/vendor/cloud.google.com/go/AUTHORS new file mode 100644 index 00000000..c364af1d --- /dev/null +++ b/vendor/cloud.google.com/go/AUTHORS @@ -0,0 +1,15 @@ +# This is the official list of cloud authors for copyright purposes. +# This file is distinct from the CONTRIBUTORS files. +# See the latter for an explanation. + +# Names should be added to this file as: +# Name or Organization +# The email address is not required for organizations. + +Filippo Valsorda +Google Inc. +Ingo Oeser +Palm Stone Games, Inc. +Paweł Knap +Péter Szilágyi +Tyler Treat diff --git a/vendor/cloud.google.com/go/CONTRIBUTORS b/vendor/cloud.google.com/go/CONTRIBUTORS new file mode 100644 index 00000000..3b3cbed9 --- /dev/null +++ b/vendor/cloud.google.com/go/CONTRIBUTORS @@ -0,0 +1,40 @@ +# People who have agreed to one of the CLAs and can contribute patches. +# The AUTHORS file lists the copyright holders; this file +# lists people. For example, Google employees are listed here +# but not in AUTHORS, because Google holds the copyright. +# +# https://developers.google.com/open-source/cla/individual +# https://developers.google.com/open-source/cla/corporate +# +# Names should be added to this file as: +# Name + +# Keep the list alphabetically sorted. + +Alexis Hunt +Andreas Litt +Andrew Gerrand +Brad Fitzpatrick +Burcu Dogan +Dave Day +David Sansome +David Symonds +Filippo Valsorda +Glenn Lewis +Ingo Oeser +James Hall +Johan Euphrosine +Jonathan Amsterdam +Kunpei Sakai +Luna Duclos +Magnus Hiie +Mario Castro +Michael McGreevy +Omar Jarjur +Paweł Knap +Péter Szilágyi +Sarah Adams +Thanatat Tamtan +Toby Burress +Tuo Shan +Tyler Treat diff --git a/vendor/cloud.google.com/go/LICENSE b/vendor/cloud.google.com/go/LICENSE new file mode 100644 index 00000000..d6456956 --- /dev/null +++ b/vendor/cloud.google.com/go/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/cloud.google.com/go/compute/metadata/metadata.go b/vendor/cloud.google.com/go/compute/metadata/metadata.go new file mode 100644 index 00000000..e708c031 --- /dev/null +++ b/vendor/cloud.google.com/go/compute/metadata/metadata.go @@ -0,0 +1,437 @@ +// Copyright 2014 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package metadata provides access to Google Compute Engine (GCE) +// metadata and API service accounts. +// +// This package is a wrapper around the GCE metadata service, +// as documented at https://developers.google.com/compute/docs/metadata. +package metadata // import "cloud.google.com/go/compute/metadata" + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "net" + "net/http" + "net/url" + "os" + "runtime" + "strings" + "sync" + "time" + + "golang.org/x/net/context" + "golang.org/x/net/context/ctxhttp" +) + +const ( + // metadataIP is the documented metadata server IP address. + metadataIP = "169.254.169.254" + + // metadataHostEnv is the environment variable specifying the + // GCE metadata hostname. If empty, the default value of + // metadataIP ("169.254.169.254") is used instead. + // This is variable name is not defined by any spec, as far as + // I know; it was made up for the Go package. + metadataHostEnv = "GCE_METADATA_HOST" + + userAgent = "gcloud-golang/0.1" +) + +type cachedValue struct { + k string + trim bool + mu sync.Mutex + v string +} + +var ( + projID = &cachedValue{k: "project/project-id", trim: true} + projNum = &cachedValue{k: "project/numeric-project-id", trim: true} + instID = &cachedValue{k: "instance/id", trim: true} +) + +var ( + metaClient = &http.Client{ + Transport: &http.Transport{ + Dial: (&net.Dialer{ + Timeout: 2 * time.Second, + KeepAlive: 30 * time.Second, + }).Dial, + ResponseHeaderTimeout: 2 * time.Second, + }, + } + subscribeClient = &http.Client{ + Transport: &http.Transport{ + Dial: (&net.Dialer{ + Timeout: 2 * time.Second, + KeepAlive: 30 * time.Second, + }).Dial, + }, + } +) + +// NotDefinedError is returned when requested metadata is not defined. +// +// The underlying string is the suffix after "/computeMetadata/v1/". +// +// This error is not returned if the value is defined to be the empty +// string. +type NotDefinedError string + +func (suffix NotDefinedError) Error() string { + return fmt.Sprintf("metadata: GCE metadata %q not defined", string(suffix)) +} + +// Get returns a value from the metadata service. +// The suffix is appended to "http://${GCE_METADATA_HOST}/computeMetadata/v1/". +// +// If the GCE_METADATA_HOST environment variable is not defined, a default of +// 169.254.169.254 will be used instead. +// +// If the requested metadata is not defined, the returned error will +// be of type NotDefinedError. +func Get(suffix string) (string, error) { + val, _, err := getETag(metaClient, suffix) + return val, err +} + +// getETag returns a value from the metadata service as well as the associated +// ETag using the provided client. This func is otherwise equivalent to Get. +func getETag(client *http.Client, suffix string) (value, etag string, err error) { + // Using a fixed IP makes it very difficult to spoof the metadata service in + // a container, which is an important use-case for local testing of cloud + // deployments. To enable spoofing of the metadata service, the environment + // variable GCE_METADATA_HOST is first inspected to decide where metadata + // requests shall go. + host := os.Getenv(metadataHostEnv) + if host == "" { + // Using 169.254.169.254 instead of "metadata" here because Go + // binaries built with the "netgo" tag and without cgo won't + // know the search suffix for "metadata" is + // ".google.internal", and this IP address is documented as + // being stable anyway. + host = metadataIP + } + url := "http://" + host + "/computeMetadata/v1/" + suffix + req, _ := http.NewRequest("GET", url, nil) + req.Header.Set("Metadata-Flavor", "Google") + req.Header.Set("User-Agent", userAgent) + res, err := client.Do(req) + if err != nil { + return "", "", err + } + defer res.Body.Close() + if res.StatusCode == http.StatusNotFound { + return "", "", NotDefinedError(suffix) + } + if res.StatusCode != 200 { + return "", "", fmt.Errorf("status code %d trying to fetch %s", res.StatusCode, url) + } + all, err := ioutil.ReadAll(res.Body) + if err != nil { + return "", "", err + } + return string(all), res.Header.Get("Etag"), nil +} + +func getTrimmed(suffix string) (s string, err error) { + s, err = Get(suffix) + s = strings.TrimSpace(s) + return +} + +func (c *cachedValue) get() (v string, err error) { + defer c.mu.Unlock() + c.mu.Lock() + if c.v != "" { + return c.v, nil + } + if c.trim { + v, err = getTrimmed(c.k) + } else { + v, err = Get(c.k) + } + if err == nil { + c.v = v + } + return +} + +var ( + onGCEOnce sync.Once + onGCE bool +) + +// OnGCE reports whether this process is running on Google Compute Engine. +func OnGCE() bool { + onGCEOnce.Do(initOnGCE) + return onGCE +} + +func initOnGCE() { + onGCE = testOnGCE() +} + +func testOnGCE() bool { + // The user explicitly said they're on GCE, so trust them. + if os.Getenv(metadataHostEnv) != "" { + return true + } + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + resc := make(chan bool, 2) + + // Try two strategies in parallel. + // See https://github.com/GoogleCloudPlatform/google-cloud-go/issues/194 + go func() { + req, _ := http.NewRequest("GET", "http://"+metadataIP, nil) + req.Header.Set("User-Agent", userAgent) + res, err := ctxhttp.Do(ctx, metaClient, req) + if err != nil { + resc <- false + return + } + defer res.Body.Close() + resc <- res.Header.Get("Metadata-Flavor") == "Google" + }() + + go func() { + addrs, err := net.LookupHost("metadata.google.internal") + if err != nil || len(addrs) == 0 { + resc <- false + return + } + resc <- strsContains(addrs, metadataIP) + }() + + tryHarder := systemInfoSuggestsGCE() + if tryHarder { + res := <-resc + if res { + // The first strategy succeeded, so let's use it. + return true + } + // Wait for either the DNS or metadata server probe to + // contradict the other one and say we are running on + // GCE. Give it a lot of time to do so, since the system + // info already suggests we're running on a GCE BIOS. + timer := time.NewTimer(5 * time.Second) + defer timer.Stop() + select { + case res = <-resc: + return res + case <-timer.C: + // Too slow. Who knows what this system is. + return false + } + } + + // There's no hint from the system info that we're running on + // GCE, so use the first probe's result as truth, whether it's + // true or false. The goal here is to optimize for speed for + // users who are NOT running on GCE. We can't assume that + // either a DNS lookup or an HTTP request to a blackholed IP + // address is fast. Worst case this should return when the + // metaClient's Transport.ResponseHeaderTimeout or + // Transport.Dial.Timeout fires (in two seconds). + return <-resc +} + +// systemInfoSuggestsGCE reports whether the local system (without +// doing network requests) suggests that we're running on GCE. If this +// returns true, testOnGCE tries a bit harder to reach its metadata +// server. +func systemInfoSuggestsGCE() bool { + if runtime.GOOS != "linux" { + // We don't have any non-Linux clues available, at least yet. + return false + } + slurp, _ := ioutil.ReadFile("/sys/class/dmi/id/product_name") + name := strings.TrimSpace(string(slurp)) + return name == "Google" || name == "Google Compute Engine" +} + +// Subscribe subscribes to a value from the metadata service. +// The suffix is appended to "http://${GCE_METADATA_HOST}/computeMetadata/v1/". +// The suffix may contain query parameters. +// +// Subscribe calls fn with the latest metadata value indicated by the provided +// suffix. If the metadata value is deleted, fn is called with the empty string +// and ok false. Subscribe blocks until fn returns a non-nil error or the value +// is deleted. Subscribe returns the error value returned from the last call to +// fn, which may be nil when ok == false. +func Subscribe(suffix string, fn func(v string, ok bool) error) error { + const failedSubscribeSleep = time.Second * 5 + + // First check to see if the metadata value exists at all. + val, lastETag, err := getETag(subscribeClient, suffix) + if err != nil { + return err + } + + if err := fn(val, true); err != nil { + return err + } + + ok := true + if strings.ContainsRune(suffix, '?') { + suffix += "&wait_for_change=true&last_etag=" + } else { + suffix += "?wait_for_change=true&last_etag=" + } + for { + val, etag, err := getETag(subscribeClient, suffix+url.QueryEscape(lastETag)) + if err != nil { + if _, deleted := err.(NotDefinedError); !deleted { + time.Sleep(failedSubscribeSleep) + continue // Retry on other errors. + } + ok = false + } + lastETag = etag + + if err := fn(val, ok); err != nil || !ok { + return err + } + } +} + +// ProjectID returns the current instance's project ID string. +func ProjectID() (string, error) { return projID.get() } + +// NumericProjectID returns the current instance's numeric project ID. +func NumericProjectID() (string, error) { return projNum.get() } + +// InternalIP returns the instance's primary internal IP address. +func InternalIP() (string, error) { + return getTrimmed("instance/network-interfaces/0/ip") +} + +// ExternalIP returns the instance's primary external (public) IP address. +func ExternalIP() (string, error) { + return getTrimmed("instance/network-interfaces/0/access-configs/0/external-ip") +} + +// Hostname returns the instance's hostname. This will be of the form +// ".c..internal". +func Hostname() (string, error) { + return getTrimmed("instance/hostname") +} + +// InstanceTags returns the list of user-defined instance tags, +// assigned when initially creating a GCE instance. +func InstanceTags() ([]string, error) { + var s []string + j, err := Get("instance/tags") + if err != nil { + return nil, err + } + if err := json.NewDecoder(strings.NewReader(j)).Decode(&s); err != nil { + return nil, err + } + return s, nil +} + +// InstanceID returns the current VM's numeric instance ID. +func InstanceID() (string, error) { + return instID.get() +} + +// InstanceName returns the current VM's instance ID string. +func InstanceName() (string, error) { + host, err := Hostname() + if err != nil { + return "", err + } + return strings.Split(host, ".")[0], nil +} + +// Zone returns the current VM's zone, such as "us-central1-b". +func Zone() (string, error) { + zone, err := getTrimmed("instance/zone") + // zone is of the form "projects//zones/". + if err != nil { + return "", err + } + return zone[strings.LastIndex(zone, "/")+1:], nil +} + +// InstanceAttributes returns the list of user-defined attributes, +// assigned when initially creating a GCE VM instance. The value of an +// attribute can be obtained with InstanceAttributeValue. +func InstanceAttributes() ([]string, error) { return lines("instance/attributes/") } + +// ProjectAttributes returns the list of user-defined attributes +// applying to the project as a whole, not just this VM. The value of +// an attribute can be obtained with ProjectAttributeValue. +func ProjectAttributes() ([]string, error) { return lines("project/attributes/") } + +func lines(suffix string) ([]string, error) { + j, err := Get(suffix) + if err != nil { + return nil, err + } + s := strings.Split(strings.TrimSpace(j), "\n") + for i := range s { + s[i] = strings.TrimSpace(s[i]) + } + return s, nil +} + +// InstanceAttributeValue returns the value of the provided VM +// instance attribute. +// +// If the requested attribute is not defined, the returned error will +// be of type NotDefinedError. +// +// InstanceAttributeValue may return ("", nil) if the attribute was +// defined to be the empty string. +func InstanceAttributeValue(attr string) (string, error) { + return Get("instance/attributes/" + attr) +} + +// ProjectAttributeValue returns the value of the provided +// project attribute. +// +// If the requested attribute is not defined, the returned error will +// be of type NotDefinedError. +// +// ProjectAttributeValue may return ("", nil) if the attribute was +// defined to be the empty string. +func ProjectAttributeValue(attr string) (string, error) { + return Get("project/attributes/" + attr) +} + +// Scopes returns the service account scopes for the given account. +// The account may be empty or the string "default" to use the instance's +// main account. +func Scopes(serviceAccount string) ([]string, error) { + if serviceAccount == "" { + serviceAccount = "default" + } + return lines("instance/service-accounts/" + serviceAccount + "/scopes") +} + +func strsContains(ss []string, s string) bool { + for _, v := range ss { + if v == s { + return true + } + } + return false +} diff --git a/vendor/github.com/briandowns/openweathermap/.gitignore b/vendor/github.com/briandowns/openweathermap/.gitignore new file mode 100644 index 00000000..850006e4 --- /dev/null +++ b/vendor/github.com/briandowns/openweathermap/.gitignore @@ -0,0 +1,31 @@ +# Created by .gitignore support plugin (hsz.mobi) +### Go template +# Compiled Object files, Static and Dynamic libs (Shared Objects) +*.o +*.a +*.so + +# Folders +_obj +_test + +# Architecture specific extensions/prefixes +*.[568vq] +[568vq].out + +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* + +_testmain.go + +*.exe +*.test +*.prof + +.idea +*.iml + +coverage.* diff --git a/vendor/github.com/briandowns/openweathermap/.travis.yml b/vendor/github.com/briandowns/openweathermap/.travis.yml new file mode 100644 index 00000000..28614c4e --- /dev/null +++ b/vendor/github.com/briandowns/openweathermap/.travis.yml @@ -0,0 +1,29 @@ +language: go +go: + - 1.5.4 + - 1.6.2 +env: + - GOARCH: amd64 + - GOARCH: 386 +addons: + hosts: + - api.openweathermap.org +before_install: + - sudo apt-get -qq update + - sudo apt-get install -y socat + - cat /etc/hosts + - wget http://ipinfo.io/ip -qO - + - sudo socat TCP-LISTEN:80,fork TCP:${RTCP_HOST}:${RTCP_PORT} > /tmp/socat.log 2>&1 & + - go get github.com/mattn/goveralls + - go get golang.org/x/tools/cmd/cover +script: + - make test + - $HOME/gopath/bin/goveralls -service=travis-ci -repotoken $COVERALLS_TOKEN +notifications: + email: + recipients: + - brian.downs@gmail.com + on_success: change + on_failure: always + after_success: + - coveralls diff --git a/vendor/github.com/briandowns/openweathermap/CONTRIBUTING.md b/vendor/github.com/briandowns/openweathermap/CONTRIBUTING.md new file mode 100644 index 00000000..f6d0aa74 --- /dev/null +++ b/vendor/github.com/briandowns/openweathermap/CONTRIBUTING.md @@ -0,0 +1,14 @@ +# Contributing to openweathermap + +## Issues + +### Reporting an Issue + +* Please add an issue [here](https://github.com/briandowns/openweathermap/issues) and utilize the appropriate label. + +## Fixing Problems and/or Adding Features + +* Feel free to fork and fix an issue(s) or add a feature. +* Please provide tests for the submitted code. +* Run `go fmt` and `go vet` +* Once the pull request is submitted, it'll be tested and merged. diff --git a/vendor/github.com/briandowns/openweathermap/LICENSE b/vendor/github.com/briandowns/openweathermap/LICENSE new file mode 100644 index 00000000..dd5b3a58 --- /dev/null +++ b/vendor/github.com/briandowns/openweathermap/LICENSE @@ -0,0 +1,174 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. diff --git a/vendor/github.com/briandowns/openweathermap/Makefile b/vendor/github.com/briandowns/openweathermap/Makefile new file mode 100644 index 00000000..b390203b --- /dev/null +++ b/vendor/github.com/briandowns/openweathermap/Makefile @@ -0,0 +1,19 @@ +GOCMD = go +GOBUILD = $(GOCMD) build +GOGET = $(GOCMD) get -v +GOCLEAN = $(GOCMD) clean +GOINSTALL = $(GOCMD) install +GOTEST = $(GOCMD) test + +.PHONY: all + +all: test + +test: + $(GOTEST) -v -covermode=count -coverprofile=coverage.out ./... + +build: test + $(GOBUILD) + +install: test + $(GOINSTALL) diff --git a/vendor/github.com/briandowns/openweathermap/README.md b/vendor/github.com/briandowns/openweathermap/README.md new file mode 100644 index 00000000..53292f1c --- /dev/null +++ b/vendor/github.com/briandowns/openweathermap/README.md @@ -0,0 +1,265 @@ +# OpenWeatherMap Go API + +[![GoDoc](https://godoc.org/github.com/briandowns/openweathermap?status.svg)](https://godoc.org/github.com/briandowns/openweathermap) [![Build Status](https://travis-ci.org/briandowns/openweathermap.svg?branch=master)](https://travis-ci.org/briandowns/openweathermap) [![Coverage Status](https://coveralls.io/repos/github/briandowns/openweathermap/badge.svg?branch=master)](https://coveralls.io/github/briandowns/openweathermap?branch=master) + +Go (golang) package for use with openweathermap.org's API. + +For more detail about the library and its features, reference your local godoc once installed. + +[Website](https://briandowns.github.io/openweathermap)! + +To use the OpenweatherMap API, you need to obtain an API key. Sign up [here](http://home.openweathermap.org/users/sign_up). Once you have your key, create an environment variable called `OWM_API_KEY`. Start coding! + +[Slack Channel](https://openweathermapgolang.slack.com/messages/general) + +Contributions welcome! + +## Features + +### Current Weather Conditions + +- By City +- By City,St (State) +- By City,Co (Country) +- By City ID +- By Zip,Co (Country) +- By Longitude and Latitude + +## Forecast + +Get the weather conditions for a given number of days. + +- By City +- By City,St (State) +- By City,Co (Country) +- By City ID +- By Longitude and Latitude + +### Access to Condition Codes and Icons + +Gain access to OpenWeatherMap icons and condition codes. + +- Thunderstorms +- Drizzle +- Rain +- Snow +- Atmosphere +- Clouds +- Extreme +- Additional + +### Data Available in Multiple Measurement Systems + +- Fahrenheit (OpenWeatherMap API - imperial) +- Celsius (OpenWeatherMap API - metric) +- Kelvin (OpenWeatherMap API - internal) + +### UV Index Data + +- Current +- Historical + +### Pollution Data + +- Current + +## Historical Conditions + +- By Name +- By ID +- By Coordinates + +## Supported Languages + +English - en, Russian - ru, Italian - it, Spanish - es (or sp), Ukrainian - uk (or ua), German - de, Portuguese - pt, Romanian - ro, Polish - pl, Finnish - fi, Dutch - nl, French - fr, Bulgarian - bg, Swedish - sv (or se), Chinese Traditional - zh_tw, Chinese Simplified - zh (or zh_cn), Turkish - tr, Croatian - hr, Catalan - ca + +## Installation + +```bash +go get github.com/briandowns/openweathermap +``` + +## Examples + +There are a few full examples in the examples directory that can be referenced. 1 is a command line application and 1 is a simple web application. + +```Go +package main + +import ( + "log" + "fmt" + + // Shortening the import reference name seems to make it a bit easier + owm "github.com/briandowns/openweathermap" +) + +func main() { + w, err := owm.NewCurrent("F", "ru") // fahrenheit (imperial) with Russian output + if err != nil { + log.Fatalln(err) + } + + w.CurrentByName("Phoenix") + fmt.Println(w) +} +``` + +### Current Conditions by location name + +```Go +func main() { + w, err := owm.NewCurrent("K", "EN") // (internal - OpenWeatherMap reference for kelvin) with English output + if err != nil { + log.Fatalln(err) + } + + w.CurrentByName("Phoenix,AZ") + fmt.Println(w) +} +``` + +### Forecast Conditions in imperial (fahrenheit) by coordinates + +```Go +func main() { + w, err := owm.NewForecast("F", "FI") + if err != nil { + log.Fatalln(err) + } + + w.DailyByCoordinates( + &Coordinates{ + Longitude: -112.07, + Latitude: 33.45, + }, + ) + fmt.Println(w) +} +``` + +### Current conditions in metric (celsius) by location ID + +```Go +func main() { + w, err := owm.NewCurrent("C", "PL") + if err != nil { + log.Fatalln(err) + } + + w.CurrentByID(2172797) + fmt.Println(w) +} +``` + +### Current conditions by zip code. 2 character country code required + +```Go +func main() { + w, err := owm.NewCurrent("F", "EN") + if err != nil { + log.Fatalln(err) + } + + w.CurrentByZip(19125, "US") + fmt.Println(w) +} +``` + +### Configure http client + +```Go +func main() { + client := &http.Client{} + w, err := owm.NewCurrent("F", "EN", owm.WithHttpClient(client)) + if err != nil { + log.Fatalln(err) + } +} +``` + +### Current UV conditions + +```Go +func main() { + uv, err := NewUV() + if err != nil { + log.Fatalln(err) + } + + coord := &Coordinates{ + Longitude: 53.343497, + Latitude: -6.288379, + } + + if err := uv.Current(coord); err != nil { + t.Error(err) + } +} +``` + +### Historical UV conditions + +```Go +func main() { + uv, err := NewUV() + if err != nil { + log.Fatalln(err) + } + + coord := &Coordinates{ + Longitude: 54.995656, + Latitude: -7.326834, + } + + end := time.Now().UTC() + start := time.Now().UTC().Add(-time.Hour * time.Duration(24)) + + if err := uv.Historical(coord, start, end); err != nil { + log.Fatalln(err) + } +} +``` + +### UV Information + +```Go +func main() { + uv, err := NewUV() + if err != nil { + log.Fatalln(err) + } + + if err := uv.Current(coords); err != nil { + t.Error(err) + } + + info, err := uv.UVInformation() + if err != nil { + log.Fatalln(err) + } +} +``` + +### Pollution Information + +```Go +func main() { + pollution, err := NewPollution() + if err != nil { + log.Fatalln(err) + } + + params := &PollutionParameters{ + Location: Coordinates{ + Latitude: 0.0, + Longitude: 10.0, + }, + Datetime: "current", + } + + if err := pollution.PollutionByParams(params); err != nil { + log.Fatalln(err) + } +} +``` diff --git a/vendor/github.com/briandowns/openweathermap/conditions.go b/vendor/github.com/briandowns/openweathermap/conditions.go new file mode 100644 index 00000000..e73ececc --- /dev/null +++ b/vendor/github.com/briandowns/openweathermap/conditions.go @@ -0,0 +1,185 @@ +// Copyright 2015 Brian J. Downs +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package openweathermap + +import ( + "fmt" + "io" + "net/http" + "os" +) + +// IconData holds the relevant info for linking icons to conditions. +type IconData struct { + Condition string + Day string + Night string +} + +// ConditionData holds data structure for weather conditions information. +type ConditionData struct { + ID int + Meaning string + Icon1 string + Icon2 string +} + +// RetrieveIcon will get the specified icon from the API. +func RetrieveIcon(destination, iconFile string) (int64, error) { + fullFilePath := fmt.Sprintf("%s/%s", destination, iconFile) + + // Check to see if we've already gotten that icon file. If so, use it + // rather than getting it again. + if _, err := os.Stat(fullFilePath); err != nil { + response, err := http.Get(fmt.Sprintf(iconURL, iconFile)) + if err != nil { + return 0, err + } + defer response.Body.Close() + + // Create the icon file + out, err := os.Create(fullFilePath) + if err != nil { + return 0, err + } + defer out.Close() + + // Fill the empty file with the actual content + n, err := io.Copy(out, response.Body) + if err != nil { + return 0, err + } + return n, nil + } + return 0, nil +} + +// IconList is a slice of IconData pointers +var IconList = []*IconData{ + {Condition: "clear sky", Day: "01d.png", Night: "01n.png"}, + {Condition: "few clouds", Day: "02d.png", Night: "02n.png"}, + {Condition: "scattered clouds", Day: "03d.png", Night: "03n.png"}, + {Condition: "broken clouds", Day: "04d.png", Night: "04n.png"}, + {Condition: "shower rain", Day: "09d.png", Night: "09n.png"}, + {Condition: "rain", Day: "10d.png", Night: "10n.png"}, + {Condition: "thunderstorm", Day: "11d.png", Night: "11n.png"}, + {Condition: "snow", Day: "13d.png", Night: "13n.png"}, + {Condition: "mist", Day: "50d.png", Night: "50n.png"}, +} + +// ThunderstormConditions is a slice of ConditionData pointers +var ThunderstormConditions = []*ConditionData{ + {ID: 200, Meaning: "thunderstorm with light rain", Icon1: "11d.png"}, + {ID: 201, Meaning: "thunderstorm with rain", Icon1: "11d.png"}, + {ID: 202, Meaning: "thunderstorm with heavy rain", Icon1: "11d.png"}, + {ID: 210, Meaning: "light thunderstorm", Icon1: "11d.png"}, + {ID: 211, Meaning: "thunderstorm", Icon1: "11d.png"}, + {ID: 212, Meaning: "heavy thunderstorm", Icon1: "11d.png"}, + {ID: 221, Meaning: "ragged thunderstorm", Icon1: "11d.png"}, + {ID: 230, Meaning: "thunderstorm with light drizzle", Icon1: "11d.png"}, + {ID: 231, Meaning: "thunderstorm with drizzle", Icon1: "11d.png"}, + {ID: 232, Meaning: "thunderstorm with heavy drizzle", Icon1: "11d.png"}, +} + +// DrizzleConditions is a slice of ConditionData pointers +var DrizzleConditions = []*ConditionData{ + {ID: 300, Meaning: "light intensity drizzle", Icon1: "09d.png"}, + {ID: 301, Meaning: "drizzle", Icon1: "09d.png"}, + {ID: 302, Meaning: "heavy intensity drizzle", Icon1: "09d.png"}, + {ID: 310, Meaning: "light intensity drizzle rain", Icon1: "09d.png"}, + {ID: 311, Meaning: "drizzle rain", Icon1: "09d.png"}, + {ID: 312, Meaning: "heavy intensity drizzle rain", Icon1: "09d.png"}, + {ID: 313, Meaning: "shower rain and drizzle", Icon1: "09d.png"}, + {ID: 314, Meaning: "heavy shower rain and drizzle", Icon1: "09d.png"}, + {ID: 321, Meaning: "shower drizzle", Icon1: "09d.png"}, +} + +// RainConditions is a slice of ConditionData pointers +var RainConditions = []*ConditionData{ + {ID: 500, Meaning: "light rain", Icon1: "09d.png"}, + {ID: 501, Meaning: "moderate rain", Icon1: "09d.png"}, + {ID: 502, Meaning: "heavy intensity rain", Icon1: "09d.png"}, + {ID: 503, Meaning: "very heavy rain", Icon1: "09d.png"}, + {ID: 504, Meaning: "extreme rain", Icon1: "09d.png"}, + {ID: 511, Meaning: "freezing rain", Icon1: "13d.png"}, + {ID: 520, Meaning: "light intensity shower rain", Icon1: "09d.png"}, + {ID: 521, Meaning: "shower rain", Icon1: "09d.png"}, + {ID: 522, Meaning: "heavy intensity shower rain", Icon1: "09d.png"}, + {ID: 531, Meaning: "ragged shower rain", Icon1: "09d.png"}, +} + +// SnowConditions is a slice of ConditionData pointers +var SnowConditions = []*ConditionData{ + {ID: 600, Meaning: "light snow", Icon1: "13d.png"}, + {ID: 601, Meaning: "snow", Icon1: "13d.png"}, + {ID: 602, Meaning: "heavy snow", Icon1: "13d.png"}, + {ID: 611, Meaning: "sleet", Icon1: "13d.png"}, + {ID: 612, Meaning: "shower sleet", Icon1: "13d.png"}, + {ID: 615, Meaning: "light rain and snow", Icon1: "13d.png"}, + {ID: 616, Meaning: "rain and snow", Icon1: "13d.png"}, + {ID: 620, Meaning: "light shower snow", Icon1: "13d.png"}, + {ID: 621, Meaning: "shower snow", Icon1: "13d.png"}, + {ID: 622, Meaning: "heavy shower snow", Icon1: "13d.png"}, +} + +// AtmosphereConditions is a slice of ConditionData pointers +var AtmosphereConditions = []*ConditionData{ + {ID: 701, Meaning: "mist", Icon1: "50d.png"}, + {ID: 711, Meaning: "smoke", Icon1: "50d.png"}, + {ID: 721, Meaning: "haze", Icon1: "50d.png"}, + {ID: 731, Meaning: "sand, dust whirls", Icon1: "50d.png"}, + {ID: 741, Meaning: "fog", Icon1: "50d.png"}, + {ID: 751, Meaning: "sand", Icon1: "50d.png"}, + {ID: 761, Meaning: "dust", Icon1: "50d.png"}, + {ID: 762, Meaning: "volcanic ash", Icon1: "50d.png"}, + {ID: 771, Meaning: "squalls", Icon1: "50d.png"}, + {ID: 781, Meaning: "tornado", Icon1: "50d.png"}, +} + +// CloudConditions is a slice of ConditionData pointers +var CloudConditions = []*ConditionData{ + {ID: 800, Meaning: "clear sky", Icon1: "01d.png", Icon2: "01n.png"}, + {ID: 801, Meaning: "few clouds", Icon1: "02d.png", Icon2: " 02n.png"}, + {ID: 802, Meaning: "scattered clouds", Icon1: "03d.png", Icon2: "03d.png"}, + {ID: 803, Meaning: "broken clouds", Icon1: "04d.png", Icon2: "03d.png"}, + {ID: 804, Meaning: "overcast clouds", Icon1: "04d.png", Icon2: "04d.png"}, +} + +// ExtremeConditions is a slice of ConditionData pointers +var ExtremeConditions = []*ConditionData{ + {ID: 900, Meaning: "tornado", Icon1: ""}, + {ID: 901, Meaning: "tropical storm", Icon1: ""}, + {ID: 902, Meaning: "hurricane", Icon1: ""}, + {ID: 903, Meaning: "cold", Icon1: ""}, + {ID: 904, Meaning: "hot", Icon1: ""}, + {ID: 905, Meaning: "windy", Icon1: ""}, + {ID: 906, Meaning: "hail", Icon1: ""}, +} + +// AdditionalConditions is a slive of ConditionData pointers +var AdditionalConditions = []*ConditionData{ + {ID: 951, Meaning: "calm", Icon1: ""}, + {ID: 952, Meaning: "light breeze", Icon1: ""}, + {ID: 953, Meaning: "gentle breeze", Icon1: ""}, + {ID: 954, Meaning: "moderate breeze", Icon1: ""}, + {ID: 955, Meaning: "fresh breeze", Icon1: ""}, + {ID: 956, Meaning: "strong breeze", Icon1: ""}, + {ID: 957, Meaning: "high wind, near gale", Icon1: ""}, + {ID: 958, Meaning: "gale", Icon1: ""}, + {ID: 959, Meaning: "severe gale", Icon1: ""}, + {ID: 960, Meaning: "storm", Icon1: ""}, + {ID: 961, Meaning: "violent storm", Icon1: ""}, + {ID: 962, Meaning: "hurricane", Icon1: ""}, +} diff --git a/vendor/github.com/briandowns/openweathermap/current.go b/vendor/github.com/briandowns/openweathermap/current.go new file mode 100644 index 00000000..52941b71 --- /dev/null +++ b/vendor/github.com/briandowns/openweathermap/current.go @@ -0,0 +1,143 @@ +// Copyright 2015 Brian J. Downs +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package openweathermap + +import ( + "encoding/json" + "fmt" + "net/url" + "strings" +) + +// CurrentWeatherData struct contains an aggregate view of the structs +// defined above for JSON to be unmarshaled into. +type CurrentWeatherData struct { + GeoPos Coordinates `json:"coord"` + Sys Sys `json:"sys"` + Base string `json:"base"` + Weather []Weather `json:"weather"` + Main Main `json:"main"` + Wind Wind `json:"wind"` + Clouds Clouds `json:"clouds"` + Rain Rain `json:"rain"` + Snow Snow `json:"snow"` + Dt int `json:"dt"` + ID int `json:"id"` + Name string `json:"name"` + Cod int `json:"cod"` + Unit string + Lang string + Key string + *Settings +} + +// NewCurrent returns a new CurrentWeatherData pointer with the supplied parameters +func NewCurrent(unit, lang, key string, options ...Option) (*CurrentWeatherData, error) { + unitChoice := strings.ToUpper(unit) + langChoice := strings.ToUpper(lang) + + c := &CurrentWeatherData{ + Settings: NewSettings(), + } + + if ValidDataUnit(unitChoice) { + c.Unit = DataUnits[unitChoice] + } else { + return nil, errUnitUnavailable + } + + if ValidLangCode(langChoice) { + c.Lang = langChoice + } else { + return nil, errLangUnavailable + } + var err error + c.Key, err = setKey(key) + if err != nil { + return nil, err + } + + if err := setOptions(c.Settings, options); err != nil { + return nil, err + } + return c, nil +} + +// CurrentByName will provide the current weather with the provided +// location name. +func (w *CurrentWeatherData) CurrentByName(location string) error { + response, err := w.client.Get(fmt.Sprintf(fmt.Sprintf(baseURL, "appid=%s&q=%s&units=%s&lang=%s"), w.Key, url.QueryEscape(location), w.Unit, w.Lang)) + if err != nil { + return err + } + defer response.Body.Close() + + if err := json.NewDecoder(response.Body).Decode(&w); err != nil { + return err + } + + return nil +} + +// CurrentByCoordinates will provide the current weather with the +// provided location coordinates. +func (w *CurrentWeatherData) CurrentByCoordinates(location *Coordinates) error { + response, err := w.client.Get(fmt.Sprintf(fmt.Sprintf(baseURL, "appid=%s&lat=%f&lon=%f&units=%s&lang=%s"), w.Key, location.Latitude, location.Longitude, w.Unit, w.Lang)) + if err != nil { + return err + } + defer response.Body.Close() + + if err = json.NewDecoder(response.Body).Decode(&w); err != nil { + return err + } + + return nil +} + +// CurrentByID will provide the current weather with the +// provided location ID. +func (w *CurrentWeatherData) CurrentByID(id int) error { + response, err := w.client.Get(fmt.Sprintf(fmt.Sprintf(baseURL, "appid=%s&id=%d&units=%s&lang=%s"), w.Key, id, w.Unit, w.Lang)) + if err != nil { + return err + } + defer response.Body.Close() + + if err = json.NewDecoder(response.Body).Decode(&w); err != nil { + return err + } + + return nil +} + +// CurrentByZip will provide the current weather for the +// provided zip code. +func (w *CurrentWeatherData) CurrentByZip(zip int, countryCode string) error { + response, err := w.client.Get(fmt.Sprintf(fmt.Sprintf(baseURL, "appid=%s&zip=%d,%s&units=%s&lang=%s"), w.Key, zip, countryCode, w.Unit, w.Lang)) + if err != nil { + return err + } + defer response.Body.Close() + if err = json.NewDecoder(response.Body).Decode(&w); err != nil { + return err + } + + return nil +} + +// CurrentByArea will provide the current weather for the +// provided area. +func (w *CurrentWeatherData) CurrentByArea() {} diff --git a/vendor/github.com/briandowns/openweathermap/doc.go b/vendor/github.com/briandowns/openweathermap/doc.go new file mode 100644 index 00000000..39a41ffb --- /dev/null +++ b/vendor/github.com/briandowns/openweathermap/doc.go @@ -0,0 +1,18 @@ +// Copyright 2015 Brian J. Downs +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package openweathermap is a library for use to access the +// http://openweathermap.org API. JSON is the only return format supported +// at this time. +package openweathermap diff --git a/vendor/github.com/briandowns/openweathermap/forecast.go b/vendor/github.com/briandowns/openweathermap/forecast.go new file mode 100644 index 00000000..ebba0273 --- /dev/null +++ b/vendor/github.com/briandowns/openweathermap/forecast.go @@ -0,0 +1,151 @@ +// Copyright 2015 Brian J. Downs +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package openweathermap + +import ( + "fmt" + "io" + "net/url" + "strconv" + "strings" +) + +// ForecastSys area population +type ForecastSys struct { + Population int `json:"population"` +} + +// Temperature holds returned termperate sure stats +type Temperature struct { + Day float64 `json:"day"` + Min float64 `json:"min"` + Max float64 `json:"max"` + Night float64 `json:"night"` + Eve float64 `json:"eve"` + Morn float64 `json:"morn"` +} + +// City data for given location +type City struct { + ID int `json:"id"` + Name string `json:"name"` + Coord Coordinates `json:"coord"` + Country string `json:"country"` + Population int `json:"population"` + Sys ForecastSys `json:"sys"` +} + +type ForecastWeather interface { + DailyByName(location string, days int) error + DailyByCoordinates(location *Coordinates, days int) error + DailyByID(id, days int) error +} + +// json served by OWM API can take different forms, so all of them must be matched +// by corresponding data type and unmarshall method +type ForecastWeatherJson interface { + Decode(r io.Reader) error +} + +type ForecastWeatherData struct { + Unit string + Lang string + Key string + baseURL string + *Settings + ForecastWeatherJson +} + +// NewForecast returns a new HistoricalWeatherData pointer with +// the supplied arguments. +func NewForecast(forecastType, unit, lang, key string, options ...Option) (*ForecastWeatherData, error) { + unitChoice := strings.ToUpper(unit) + langChoice := strings.ToUpper(lang) + + if forecastType != "16" && forecastType != "5" { + return nil, errForecastUnavailable + } + + if !ValidDataUnit(unitChoice) { + return nil, errUnitUnavailable + } + + if !ValidLangCode(langChoice) { + return nil, errLangUnavailable + } + + settings := NewSettings() + if err := setOptions(settings, options); err != nil { + return nil, err + } + + var err error + k, err := setKey(key) + if err != nil { + return nil, err + } + forecastData := ForecastWeatherData{ + Unit: DataUnits[unitChoice], + Lang: langChoice, + Key: k, + Settings: settings, + } + + if forecastType == "16" { + forecastData.baseURL = forecast16Base + forecastData.ForecastWeatherJson = &Forecast16WeatherData{} + } else { + forecastData.baseURL = forecast5Base + forecastData.ForecastWeatherJson = &Forecast5WeatherData{} + } + + return &forecastData, nil +} + +// DailyByName will provide a forecast for the location given for the +// number of days given. +func (f *ForecastWeatherData) DailyByName(location string, days int) error { + response, err := f.client.Get(fmt.Sprintf(f.baseURL, f.Key, fmt.Sprintf("%s=%s", "q", url.QueryEscape(location)), f.Unit, f.Lang, days)) + if err != nil { + return err + } + defer response.Body.Close() + + return f.ForecastWeatherJson.Decode(response.Body) +} + +// DailyByCoordinates will provide a forecast for the coordinates ID give +// for the number of days given. +func (f *ForecastWeatherData) DailyByCoordinates(location *Coordinates, days int) error { + response, err := f.client.Get(fmt.Sprintf(f.baseURL, f.Key, fmt.Sprintf("lat=%f&lon=%f", location.Latitude, location.Longitude), f.Unit, f.Lang, days)) + if err != nil { + return err + } + defer response.Body.Close() + + return f.ForecastWeatherJson.Decode(response.Body) +} + +// DailyByID will provide a forecast for the location ID give for the +// number of days given. +func (f *ForecastWeatherData) DailyByID(id, days int) error { + response, err := f.client.Get(fmt.Sprintf(f.baseURL, f.Key, fmt.Sprintf("%s=%s", "id", strconv.Itoa(id)), f.Unit, f.Lang, days)) + if err != nil { + return err + } + defer response.Body.Close() + + return f.ForecastWeatherJson.Decode(response.Body) +} diff --git a/vendor/github.com/briandowns/openweathermap/forecast16.go b/vendor/github.com/briandowns/openweathermap/forecast16.go new file mode 100644 index 00000000..3ba9f513 --- /dev/null +++ b/vendor/github.com/briandowns/openweathermap/forecast16.go @@ -0,0 +1,36 @@ +package openweathermap + +import ( + "encoding/json" + "io" +) + +// Forecast16WeatherList holds specific query data +type Forecast16WeatherList struct { + Dt int `json:"dt"` + Temp Temperature `json:"temp"` + Pressure float64 `json:"pressure"` + Humidity int `json:"humidity"` + Weather []Weather `json:"weather"` + Speed float64 `json:"speed"` + Deg int `json:"deg"` + Clouds int `json:"clouds"` + Snow float64 `json:"snow"` + Rain float64 `json:"rain"` +} + +// Forecast16WeatherData will hold returned data from queries +type Forecast16WeatherData struct { + COD int `json:"cod"` + Message string `json:"message"` + City City `json:"city"` + Cnt int `json:"cnt"` + List []Forecast16WeatherList `json:"list"` +} + +func (f *Forecast16WeatherData) Decode(r io.Reader) error { + if err := json.NewDecoder(r).Decode(&f); err != nil { + return err + } + return nil +} diff --git a/vendor/github.com/briandowns/openweathermap/forecast5.go b/vendor/github.com/briandowns/openweathermap/forecast5.go new file mode 100644 index 00000000..9e52c20a --- /dev/null +++ b/vendor/github.com/briandowns/openweathermap/forecast5.go @@ -0,0 +1,50 @@ +package openweathermap + +import ( + "encoding/json" + "io" + "strings" + "time" +) + +type DtTxt struct { + time.Time +} + +func (dt *DtTxt) UnmarshalJSON(b []byte) error { + t, err := time.Parse("2006-01-02 15:04:05", strings.Trim(string(b), "\"")) + dt.Time = t + return err +} + +func (t *DtTxt) MarshalJSON() ([]byte, error) { + return json.Marshal(t) +} + +// Forecast5WeatherList holds specific query data +type Forecast5WeatherList struct { + Dt int `json:"dt"` + Main Main `json:"main"` + Weather []Weather `json:"weather"` + Clouds Clouds `json:"clouds"` + Wind Wind `json:"wind"` + Rain Rain `json:"rain"` + Snow Snow `json:"snow"` + DtTxt DtTxt `json:"dt_txt"` +} + +// Forecast5WeatherData will hold returned data from queries +type Forecast5WeatherData struct { + // COD string `json:"cod"` + // Message float64 `json:"message"` + City City `json:"city"` + Cnt int `json:"cnt"` + List []Forecast5WeatherList `json:"list"` +} + +func (f *Forecast5WeatherData) Decode(r io.Reader) error { + if err := json.NewDecoder(r).Decode(&f); err != nil { + return err + } + return nil +} diff --git a/vendor/github.com/briandowns/openweathermap/history.go b/vendor/github.com/briandowns/openweathermap/history.go new file mode 100644 index 00000000..bba6c83d --- /dev/null +++ b/vendor/github.com/briandowns/openweathermap/history.go @@ -0,0 +1,147 @@ +// Copyright 2015 Brian J. Downs +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package openweathermap + +import ( + "encoding/json" + "fmt" + "net/url" + "strings" +) + +// HistoricalParameters struct holds the (optional) fields to be +// supplied for historical data requests. +type HistoricalParameters struct { + Start int64 // Data start (unix time, UTC time zone) + End int64 // Data end (unix time, UTC time zone) + Cnt int // Amount of returned data (one per hour, can be used instead of Data end) +} + +// Rain struct contains 3 hour data +type Rain struct { + ThreeH float64 `json:"3h"` +} + +// Snow struct contains 3 hour data +type Snow struct { + ThreeH float64 `json:"3h"` +} + +// WeatherHistory struct contains aggregate fields from the above +// structs. +type WeatherHistory struct { + Main Main `json:"main"` + Wind Wind `json:"wind"` + Clouds Clouds `json:"clouds"` + Weather []Weather `json:"weather"` + Rain Rain `json:"rain"` + Dt int `json:"dt"` +} + +// HistoricalWeatherData struct is where the JSON is unmarshaled to +// when receiving data for a historical request. +type HistoricalWeatherData struct { + Message string `json:"message"` + Cod int `json:"cod"` + CityData int `json:"city_data"` + CalcTime float64 `json:"calctime"` + Cnt int `json:"cnt"` + List []WeatherHistory `json:"list"` + Unit string + Key string + *Settings +} + +// NewHistorical returns a new HistoricalWeatherData pointer with +//the supplied arguments. +func NewHistorical(unit, key string, options ...Option) (*HistoricalWeatherData, error) { + h := &HistoricalWeatherData{ + Settings: NewSettings(), + } + + unitChoice := strings.ToUpper(unit) + if !ValidDataUnit(unitChoice) { + return nil, errUnitUnavailable + } + h.Unit = DataUnits[unitChoice] + + var err error + h.Key, err = setKey(key) + if err != nil { + return nil, err + } + + if err := setOptions(h.Settings, options); err != nil { + return nil, err + } + return h, nil +} + +// HistoryByName will return the history for the provided location +func (h *HistoricalWeatherData) HistoryByName(location string) error { + response, err := h.client.Get(fmt.Sprintf(fmt.Sprintf(historyURL, "city?appid=%s&q=%s"), h.Key, url.QueryEscape(location))) + if err != nil { + return err + } + defer response.Body.Close() + + if err = json.NewDecoder(response.Body).Decode(&h); err != nil { + return err + } + + return nil +} + +// HistoryByID will return the history for the provided location ID +func (h *HistoricalWeatherData) HistoryByID(id int, hp ...*HistoricalParameters) error { + if len(hp) > 0 { + response, err := h.client.Get(fmt.Sprintf(fmt.Sprintf(historyURL, "city?appid=%s&id=%d&type=hour&start%d&end=%d&cnt=%d"), h.Key, id, hp[0].Start, hp[0].End, hp[0].Cnt)) + if err != nil { + return err + } + defer response.Body.Close() + + if err = json.NewDecoder(response.Body).Decode(&h); err != nil { + return err + } + } + + response, err := h.client.Get(fmt.Sprintf(fmt.Sprintf(historyURL, "city?appid=%s&id=%d"), h.Key, id)) + if err != nil { + return err + } + defer response.Body.Close() + + if err = json.NewDecoder(response.Body).Decode(&h); err != nil { + return err + } + + return nil +} + +// HistoryByCoord will return the history for the provided coordinates +func (h *HistoricalWeatherData) HistoryByCoord(location *Coordinates, hp *HistoricalParameters) error { + response, err := h.client.Get(fmt.Sprintf(fmt.Sprintf(historyURL, "appid=%s&lat=%f&lon=%f&start=%d&end=%d"), h.Key, location.Latitude, location.Longitude, hp.Start, hp.End)) + if err != nil { + return err + } + defer response.Body.Close() + + if err = json.NewDecoder(response.Body).Decode(&h); err != nil { + return err + } + + return nil +} diff --git a/vendor/github.com/briandowns/openweathermap/openweathermap.go b/vendor/github.com/briandowns/openweathermap/openweathermap.go new file mode 100644 index 00000000..11d4578b --- /dev/null +++ b/vendor/github.com/briandowns/openweathermap/openweathermap.go @@ -0,0 +1,228 @@ +// Copyright 2015 Brian J. Downs +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package openweathermap + +import ( + "errors" + "net/http" +) + +var errUnitUnavailable = errors.New("unit unavailable") +var errLangUnavailable = errors.New("language unavailable") +var errInvalidKey = errors.New("invalid api key") +var errInvalidOption = errors.New("invalid option") +var errInvalidHttpClient = errors.New("invalid http client") +var errForecastUnavailable = errors.New("forecast unavailable") + +// DataUnits represents the character chosen to represent the temperature notation +var DataUnits = map[string]string{"C": "metric", "F": "imperial", "K": "internal"} +var ( + baseURL = "http://api.openweathermap.org/data/2.5/weather?%s" + iconURL = "http://openweathermap.org/img/w/%s" + stationURL = "http://api.openweathermap.org/data/2.5/station?id=%d" + forecast5Base = "http://api.openweathermap.org/data/2.5/forecast?appid=%s&%s&mode=json&units=%s&lang=%s&cnt=%d" + forecast16Base = "http://api.openweathermap.org/data/2.5/forecast/daily?appid=%s&%s&mode=json&units=%s&lang=%s&cnt=%d" + historyURL = "http://api.openweathermap.org/data/2.5/history/%s" + pollutionURL = "http://api.openweathermap.org/pollution/v1/co/" + uvURL = "http://api.openweathermap.org/data/2.5/" + dataPostURL = "http://openweathermap.org/data/post" +) + +// LangCodes holds all supported languages to be used +// inspried and sourced from @bambocher (github.com/bambocher) +var LangCodes = map[string]string{ + "EN": "English", + "RU": "Russian", + "IT": "Italian", + "ES": "Spanish", + "SP": "Spanish", + "UK": "Ukrainian", + "UA": "Ukrainian", + "DE": "German", + "PT": "Portuguese", + "RO": "Romanian", + "PL": "Polish", + "FI": "Finnish", + "NL": "Dutch", + "FR": "French", + "BG": "Bulgarian", + "SV": "Swedish", + "SE": "Swedish", + "TR": "Turkish", + "HR": "Croatian", + "CA": "Catalan", + "ZH_TW": "Chinese Traditional", + "ZH": "Chinese Simplified", + "ZH_CN": "Chinese Simplified", +} + +// Config will hold default settings to be passed into the +// "NewCurrent, NewForecast, etc}" functions. +type Config struct { + Mode string // user choice of JSON or XML + Unit string // measurement for results to be displayed. F, C, or K + Lang string // should reference a key in the LangCodes map + APIKey string // API Key for connecting to the OWM + Username string // Username for posting data + Password string // Pasword for posting data +} + +// APIError returned on failed API calls. +type APIError struct { + Message string `json:"message"` + COD string `json:"cod"` +} + +// Coordinates struct holds longitude and latitude data in returned +// JSON or as parameter data for requests using longitude and latitude. +type Coordinates struct { + Longitude float64 `json:"lon"` + Latitude float64 `json:"lat"` +} + +// Sys struct contains general information about the request +// and the surrounding area for where the request was made. +type Sys struct { + Type int `json:"type"` + ID int `json:"id"` + Message float64 `json:"message"` + Country string `json:"country"` + Sunrise int `json:"sunrise"` + Sunset int `json:"sunset"` +} + +// Wind struct contains the speed and degree of the wind. +type Wind struct { + Speed float64 `json:"speed"` + Deg float64 `json:"deg"` +} + +// Weather struct holds high-level, basic info on the returned +// data. +type Weather struct { + ID int `json:"id"` + Main string `json:"main"` + Description string `json:"description"` + Icon string `json:"icon"` +} + +// Main struct contains the temperates, humidity, pressure for the request. +type Main struct { + Temp float64 `json:"temp"` + TempMin float64 `json:"temp_min"` + TempMax float64 `json:"temp_max"` + Pressure float64 `json:"pressure"` + SeaLevel float64 `json:"sea_level"` + GrndLevel float64 `json:"grnd_level"` + Humidity int `json:"humidity"` +} + +// Clouds struct holds data regarding cloud cover. +type Clouds struct { + All int `json:"all"` +} + +// return key +// } +func setKey(key string) (string, error) { + if err := ValidAPIKey(key); err != nil { + return "", err + } + return key, nil +} + +// ValidDataUnit makes sure the string passed in is an accepted +// unit of measure to be used for the return data. +func ValidDataUnit(u string) bool { + for d := range DataUnits { + if u == d { + return true + } + } + return false +} + +// ValidLangCode makes sure the string passed in is an +// acceptable lang code. +func ValidLangCode(c string) bool { + for d := range LangCodes { + if c == d { + return true + } + } + return false +} + +// ValidDataUnitSymbol makes sure the string passed in is an +// acceptable data unit symbol. +func ValidDataUnitSymbol(u string) bool { + for _, d := range DataUnits { + if u == d { + return true + } + } + return false +} + +// ValidAPIKey makes sure that the key given is a valid one +func ValidAPIKey(key string) error { + if len(key) == 32 { + return errors.New("invalid key") + } + return nil +} + +// CheckAPIKeyExists will see if an API key has been set. +func (c *Config) CheckAPIKeyExists() bool { return len(c.APIKey) > 1 } + +// Settings holds the client settings +type Settings struct { + client *http.Client +} + +// NewSettings returns a new Setting pointer with default http client. +func NewSettings() *Settings { + return &Settings{ + client: http.DefaultClient, + } +} + +// Optional client settings +type Option func(s *Settings) error + +// WithHttpClient sets custom http client when creating a new Client. +func WithHttpClient(c *http.Client) Option { + return func(s *Settings) error { + if c == nil { + return errInvalidHttpClient + } + s.client = c + return nil + } +} + +// setOptions sets Optional client settings to the Settings pointer +func setOptions(settings *Settings, options []Option) error { + for _, option := range options { + if option == nil { + return errInvalidOption + } + err := option(settings) + if err != nil { + return err + } + } + return nil +} diff --git a/vendor/github.com/briandowns/openweathermap/pollution.go b/vendor/github.com/briandowns/openweathermap/pollution.go new file mode 100644 index 00000000..abb5b2dd --- /dev/null +++ b/vendor/github.com/briandowns/openweathermap/pollution.go @@ -0,0 +1,82 @@ +package openweathermap + +import ( + "encoding/json" + "fmt" + "strconv" +) + +// DateTimeAliases holds the alias the pollution API supports in lieu +// of an ISO 8601 timestamp +var DateTimeAliases = []string{"current"} + +// ValidAlias checks to make sure the given alias is a valid one +func ValidAlias(alias string) bool { + for _, i := range DateTimeAliases { + if i == alias { + return true + } + } + return false +} + +// PollutionData holds the pollution specific data from the call +type PollutionData struct { + Precision float64 `json:"precision"` + Pressure float64 `json:"pressure"` + Value float64 `json:"value"` +} + +// PollutionParameters holds the parameters needed to make +// a call to the pollution API +type PollutionParameters struct { + Location Coordinates + Datetime string // this should be either ISO 8601 or an alias +} + +// Pollution holds the data returnd from the pollution API +type Pollution struct { + Time string `json:"time"` + Location Coordinates `json:"location"` + Data []PollutionData `json:"data"` + Key string + *Settings +} + +// NewPollution creates a new reference to Pollution +func NewPollution(key string, options ...Option) (*Pollution, error) { + k, err := setKey(key) + if err != nil { + return nil, err + } + p := &Pollution{ + Key: k, + Settings: NewSettings(), + } + + if err := setOptions(p.Settings, options); err != nil { + return nil, err + } + return p, nil +} + +// PollutionByParams gets the pollution data based on the given parameters +func (p *Pollution) PollutionByParams(params *PollutionParameters) error { + url := fmt.Sprintf("%s%s,%s/%s.json?appid=%s", + pollutionURL, + strconv.FormatFloat(params.Location.Latitude, 'f', -1, 64), + strconv.FormatFloat(params.Location.Longitude, 'f', -1, 64), + params.Datetime, + p.Key) + response, err := p.client.Get(url) + if err != nil { + return err + } + defer response.Body.Close() + + if err = json.NewDecoder(response.Body).Decode(&p); err != nil { + return err + } + + return nil +} diff --git a/vendor/github.com/briandowns/openweathermap/station.go b/vendor/github.com/briandowns/openweathermap/station.go new file mode 100644 index 00000000..731cf08e --- /dev/null +++ b/vendor/github.com/briandowns/openweathermap/station.go @@ -0,0 +1,80 @@ +// Copyright 2015 Brian J. Downs +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package openweathermap + +import ( + "fmt" + "net/http" + "net/url" +) + +// Slice of type string of the valid parameters to be sent from a station. +// The API refers to this data as the "Weather station data transmission protocol" +var StationDataParameters = []string{ + "wind_dir", // Wind direction + "wind_speed", // Wind speed + "wind_gust", // Wind gust speed + "temp", // Temperature + "humidity", // Relative humidty + "pressure", // Atmospheric pressure + "rain_1h", // Rain in the last hour + "rain_24h", // Rain in the last 24 hours + "rain_today", // Rain since midnight + "snow", // Snow in the last 24 hours + "lum", // Brightness + "lat", // Latitude + "long", // Longitude + "alt", // Altitude + "radiation", // Radiation + "dewpoint", // Dew point + "uv", // UV index + "name", // Weather station name +} + +// ValidateStationDataParameter will make sure that whatever parameter +// supplied is one that can actually be used in the POST request. +func ValidateStationDataParameter(param string) bool { + for _, p := range StationDataParameters { + if param == p { + return true + } + } + + return false +} + +// ConvertToURLValues will convert a map to a url.Values instance. We're +// taking a map[string]string instead of something more type specific since +// the url.Values instance only takes strings to create the URL values. +func ConvertToURLValues(data map[string]string) string { + v := url.Values{} + + for key, val := range data { + v.Set(key, val) + } + + return v.Encode() +} + +// SendStationData will send an instance the provided url.Values to the +// provided URL. +func SendStationData(data url.Values) { + resp, err := http.PostForm(dataPostURL, data) + if err != nil { + fmt.Println(err) + } + + fmt.Println(resp.Body) +} diff --git a/vendor/github.com/briandowns/openweathermap/uv.go b/vendor/github.com/briandowns/openweathermap/uv.go new file mode 100644 index 00000000..2b10b9d1 --- /dev/null +++ b/vendor/github.com/briandowns/openweathermap/uv.go @@ -0,0 +1,170 @@ +package openweathermap + +import ( + "encoding/json" + "errors" + "fmt" + "time" +) + +var errInvalidUVIndex = errors.New("invalid UV index value") + +// UVDataPoints holds the UV specific data +type UVDataPoints struct { + DT int64 `json:"dt"` + Value float64 `json:"value"` +} + +// UV contains the response from the OWM UV API +type UV struct { + Coord []float64 `json:"coord"` + Data []UVDataPoints `json:"data,omitempty"` + /*Data []struct { + DT int64 `json:"dt"` + Value float64 `json:"value"` + } `json:"data,omitempty"`*/ + DT int64 `json:"dt,omitempty"` + Value float64 `json:"value,omitempty"` + Key string + *Settings +} + +// NewUV creates a new reference to UV +func NewUV(key string, options ...Option) (*UV, error) { + k, err := setKey(key) + if err != nil { + return nil, err + } + u := &UV{ + Key: k, + Settings: NewSettings(), + } + + if err := setOptions(u.Settings, options); err != nil { + return nil, err + } + return u, nil +} + +// Current gets the current UV data for the given coordinates +func (u *UV) Current(coord *Coordinates) error { + response, err := u.client.Get(fmt.Sprintf("%suvi?lat=%f&lon=%f&appid=%s", uvURL, coord.Latitude, coord.Longitude, u.Key)) + if err != nil { + return err + } + defer response.Body.Close() + + if err = json.NewDecoder(response.Body).Decode(&u); err != nil { + return err + } + + return nil +} + +// Historical gets the historical UV data for the coordinates and times +func (u *UV) Historical(coord *Coordinates, start, end time.Time) error { + response, err := u.client.Get(fmt.Sprintf("%shistory?lat=%f&lon=%f&start=%d&end=%d&appid=%s", uvURL, coord.Latitude, coord.Longitude, start.Unix(), end.Unix(), u.Key)) + if err != nil { + return err + } + defer response.Body.Close() + + if err = json.NewDecoder(response.Body).Decode(&u); err != nil { + return err + } + + return nil +} + +// UVIndexInfo +type UVIndexInfo struct { + // UVIndex holds the range of the index + UVIndex []float64 + + // MGC represents the Media graphic color + MGC string + + // Risk of harm from unprotected sun exposure, for the average adult + Risk string + + // RecommendedProtection contains information on what a person should + // do when outside in the associated UVIndex + RecommendedProtection string +} + +// UVData contains data in regards to UV index ranges, rankings, and steps for protection +var UVData = []UVIndexInfo{ + { + UVIndex: []float64{0, 2.9}, + MGC: "Green", + Risk: "Low", + RecommendedProtection: "Wear sunglasses on bright days; use sunscreen if there is snow on the ground, which reflects UV radiation, or if you have particularly fair skin.", + }, + { + UVIndex: []float64{3, 5.9}, + MGC: "Yellow", + Risk: "Moderate", + RecommendedProtection: "Take precautions, such as covering up, if you will be outside. Stay in shade near midday when the sun is strongest.", + }, + { + UVIndex: []float64{6, 7.9}, + MGC: "Orange", + Risk: "High", + RecommendedProtection: "Cover the body with sun protective clothing, use SPF 30+ sunscreen, wear a hat, reduce time in the sun within three hours of solar noon, and wear sunglasses.", + }, + { + UVIndex: []float64{8, 10.9}, + MGC: "Red", + Risk: "Very high", + RecommendedProtection: "Wear SPF 30+ sunscreen, a shirt, sunglasses, and a wide-brimmed hat. Do not stay in the sun for too long.", + }, + { + UVIndex: []float64{11}, + MGC: "Violet", + Risk: "Extreme", + RecommendedProtection: "Take all precautions: Wear SPF 30+ sunscreen, a long-sleeved shirt and trousers, sunglasses, and a very broad hat. Avoid the sun within three hours of solar noon.", + }, +} + +// UVInformation provides information on the given UV data which includes the severity +// and "Recommended protection" +func (u *UV) UVInformation() ([]UVIndexInfo, error) { + switch { + case u.Value != 0: + switch { + case u.Value < 2.9: + return []UVIndexInfo{UVData[0]}, nil + case u.Value > 3 && u.Value < 5.9: + return []UVIndexInfo{UVData[1]}, nil + case u.Value > 6 && u.Value < 7.9: + return []UVIndexInfo{UVData[2]}, nil + case u.Value > 8 && u.Value < 10.9: + return []UVIndexInfo{UVData[3]}, nil + case u.Value >= 11: + return []UVIndexInfo{UVData[4]}, nil + default: + return nil, errInvalidUVIndex + } + + case len(u.Data) > 0: + var uvi []UVIndexInfo + for _, i := range u.Data { + switch { + case i.Value < 2.9: + uvi = append(uvi, UVData[0]) + case i.Value > 3 && u.Value < 5.9: + uvi = append(uvi, UVData[1]) + case i.Value > 6 && u.Value < 7.9: + uvi = append(uvi, UVData[2]) + case i.Value > 8 && u.Value < 10.9: + uvi = append(uvi, UVData[3]) + case i.Value >= 11: + uvi = append(uvi, UVData[4]) + default: + return nil, errInvalidUVIndex + } + } + } + + return nil, nil +} diff --git a/vendor/github.com/gdamore/encoding/.appveyor.yml b/vendor/github.com/gdamore/encoding/.appveyor.yml new file mode 100644 index 00000000..19a4c5dd --- /dev/null +++ b/vendor/github.com/gdamore/encoding/.appveyor.yml @@ -0,0 +1,13 @@ +version: 1.0.{build} +clone_folder: c:\gopath\src\github.com\gdamore\encoding +environment: + GOPATH: c:\gopath +build_script: +- go version +- go env +- SET PATH=%LOCALAPPDATA%\atom\bin;%GOPATH%\bin;%PATH% +- go get -t ./... +- go build +- go install ./... +test_script: +- go test ./... diff --git a/vendor/github.com/gdamore/encoding/.travis.yml b/vendor/github.com/gdamore/encoding/.travis.yml new file mode 100644 index 00000000..cfc7547b --- /dev/null +++ b/vendor/github.com/gdamore/encoding/.travis.yml @@ -0,0 +1,6 @@ +language: go + +go: + - 1.3 + - 1.5 + - tip diff --git a/vendor/github.com/gdamore/encoding/LICENSE b/vendor/github.com/gdamore/encoding/LICENSE new file mode 100644 index 00000000..d6456956 --- /dev/null +++ b/vendor/github.com/gdamore/encoding/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/github.com/gdamore/encoding/README.md b/vendor/github.com/gdamore/encoding/README.md new file mode 100644 index 00000000..3db2b4c5 --- /dev/null +++ b/vendor/github.com/gdamore/encoding/README.md @@ -0,0 +1,19 @@ +## encoding + +[![Linux Status](https://img.shields.io/travis/gdamore/encoding.svg?label=linux)](https://travis-ci.org/gdamore/encoding) +[![Windows Status](https://img.shields.io/appveyor/ci/gdamore/encoding.svg?label=windows)](https://ci.appveyor.com/project/gdamore/encoding) +[![Apache License](https://img.shields.io/badge/license-APACHE2-blue.svg)](https://github.com/gdamore/encoding/blob/master/LICENSE) +[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](https://godoc.org/github.com/gdamore/encoding) +[![Go Report Card](http://goreportcard.com/badge/gdamore/encoding)](http://goreportcard.com/report/gdamore/encoding) + +Package encoding provides a number of encodings that are missing from the +standard Go [encoding]("https://godoc.org/golang.org/x/text/encoding") package. + +We hope that we can contribute these to the standard Go library someday. It +turns out that some of these are useful for dealing with I/O streams coming +from non-UTF friendly sources. + +The UTF8 Encoder is also useful for situations where valid UTF-8 might be +carried in streams that contain non-valid UTF; in particular I use it for +helping me cope with terminals that embed escape sequences in otherwise +valid UTF-8. diff --git a/vendor/github.com/gdamore/encoding/ascii.go b/vendor/github.com/gdamore/encoding/ascii.go new file mode 100644 index 00000000..b7321f43 --- /dev/null +++ b/vendor/github.com/gdamore/encoding/ascii.go @@ -0,0 +1,36 @@ +// Copyright 2015 Garrett D'Amore +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package encoding + +import ( + "golang.org/x/text/encoding" +) + +// ASCII represents the 7-bit US-ASCII scheme. It decodes directly to +// UTF-8 without change, as all ASCII values are legal UTF-8. +// Unicode values less than 128 (i.e. 7 bits) map 1:1 with ASCII. +// It encodes runes outside of that to 0x1A, the ASCII substitution character. +var ASCII encoding.Encoding + +func init() { + amap := make(map[byte]rune) + for i := 128; i <= 255; i++ { + amap[byte(i)] = RuneError + } + + cm := &Charmap{Map: amap} + cm.Init() + ASCII = cm +} diff --git a/vendor/github.com/gdamore/encoding/charmap.go b/vendor/github.com/gdamore/encoding/charmap.go new file mode 100644 index 00000000..e64eaed1 --- /dev/null +++ b/vendor/github.com/gdamore/encoding/charmap.go @@ -0,0 +1,192 @@ +// Copyright 2015 Garrett D'Amore +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package encoding + +import ( + "sync" + "unicode/utf8" + + "golang.org/x/text/transform" + "golang.org/x/text/encoding" +) + +const ( + // RuneError is an alias for the UTF-8 replacement rune, '\uFFFD'. + RuneError = '\uFFFD' + + // RuneSelf is the rune below which UTF-8 and the Unicode values are + // identical. Its also the limit for ASCII. + RuneSelf = 0x80 + + // ASCIISub is the ASCII substitution character. + ASCIISub = '\x1a' +) + +// Charmap is a structure for setting up encodings for 8-bit character sets, +// for transforming between UTF8 and that other character set. It has some +// ideas borrowed from golang.org/x/text/encoding/charmap, but it uses a +// different implementation. This implementation uses maps, and supports +// user-defined maps. +// +// We do assume that a character map has a reasonable substitution character, +// and that valid encodings are stable (exactly a 1:1 map) and stateless +// (that is there is no shift character or anything like that.) Hence this +// approach will not work for many East Asian character sets. +// +// Measurement shows little or no measurable difference in the performance of +// the two approaches. The difference was down to a couple of nsec/op, and +// no consistent pattern as to which ran faster. With the conversion to +// UTF-8 the code takes about 25 nsec/op. The conversion in the reverse +// direction takes about 100 nsec/op. (The larger cost for conversion +// from UTF-8 is most likely due to the need to convert the UTF-8 byte stream +// to a rune before conversion. +// +type Charmap struct { + transform.NopResetter + bytes map[rune]byte + runes [256][]byte + once sync.Once + + // The map between bytes and runes. To indicate that a specific + // byte value is invalid for a charcter set, use the rune + // utf8.RuneError. Values that are absent from this map will + // be assumed to have the identity mapping -- that is the default + // is to assume ISO8859-1, where all 8-bit characters have the same + // numeric value as their Unicode runes. (Not to be confused with + // the UTF-8 values, which *will* be different for non-ASCII runes.) + // + // If no values less than RuneSelf are changed (or have non-identity + // mappings), then the character set is assumed to be an ASCII + // superset, and certain assumptions and optimizations become + // available for ASCII bytes. + Map map[byte]rune + + // The ReplacementChar is the byte value to use for substitution. + // It should normally be ASCIISub for ASCII encodings. This may be + // unset (left to zero) for mappings that are strictly ASCII supersets. + // In that case ASCIISub will be assumed instead. + ReplacementChar byte +} + +type cmapDecoder struct { + transform.NopResetter + runes [256][]byte +} + +type cmapEncoder struct { + transform.NopResetter + bytes map[rune]byte + replace byte +} + +// Init initializes internal values of a character map. This should +// be done early, to minimize the cost of allocation of transforms +// later. It is not strictly necessary however, as the allocation +// functions will arrange to call it if it has not already been done. +func (c *Charmap) Init() { + c.once.Do(c.initialize) +} + +func (c *Charmap) initialize() { + c.bytes = make(map[rune]byte) + ascii := true + + for i := 0; i < 256; i++ { + r, ok := c.Map[byte(i)] + if !ok { + r = rune(i) + } + if r < 128 && r != rune(i) { + ascii = false + } + if r != RuneError { + c.bytes[r] = byte(i) + } + utf := make([]byte, utf8.RuneLen(r)) + utf8.EncodeRune(utf, r) + c.runes[i] = utf + } + if ascii && c.ReplacementChar == '\x00' { + c.ReplacementChar = ASCIISub + } +} + +// NewDecoder returns a Decoder the converts from the 8-bit +// character set to UTF-8. Unknown mappings, if any, are mapped +// to '\uFFFD'. +func (c *Charmap) NewDecoder() *encoding.Decoder { + c.Init() + return &encoding.Decoder{Transformer: &cmapDecoder{runes: c.runes}} +} + +// NewEncoder returns a Transformer that converts from UTF8 to the +// 8-bit character set. Unknown mappings are mapped to 0x1A. +func (c *Charmap) NewEncoder() *encoding.Encoder { + c.Init() + return &encoding.Encoder{Transformer: + &cmapEncoder{bytes: c.bytes, replace: c.ReplacementChar}} +} + +func (d *cmapDecoder) Transform(dst, src []byte, atEOF bool) (int, int, error) { + var e error + var ndst, nsrc int + + for _, c := range src { + b := d.runes[c] + l := len(b) + + if ndst+l > len(dst) { + e = transform.ErrShortDst + break + } + for i := 0; i < l; i++ { + dst[ndst] = b[i] + ndst++ + } + nsrc++ + } + return ndst, nsrc, e +} + +func (d *cmapEncoder) Transform(dst, src []byte, atEOF bool) (int, int, error) { + var e error + var ndst, nsrc int + for nsrc < len(src) { + if ndst >= len(dst) { + e = transform.ErrShortDst + break + } + + r, sz := utf8.DecodeRune(src[nsrc:]) + if r == utf8.RuneError && sz == 1 { + // If its inconclusive due to insufficient data in + // in the source, report it + if !atEOF && !utf8.FullRune(src[nsrc:]) { + e = transform.ErrShortSrc + break + } + } + + if c, ok := d.bytes[r]; ok { + dst[ndst] = c + } else { + dst[ndst] = d.replace + } + nsrc += sz + ndst++ + } + + return ndst, nsrc, e +} diff --git a/vendor/github.com/gdamore/encoding/doc.go b/vendor/github.com/gdamore/encoding/doc.go new file mode 100644 index 00000000..8a7b48d7 --- /dev/null +++ b/vendor/github.com/gdamore/encoding/doc.go @@ -0,0 +1,17 @@ +// Copyright 2015 Garrett D'Amore +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package encoding provides a few of the encoding structures that are +// missing from the Go x/text/encoding tree. +package encoding diff --git a/vendor/github.com/gdamore/encoding/ebcdic.go b/vendor/github.com/gdamore/encoding/ebcdic.go new file mode 100644 index 00000000..8e13f1a9 --- /dev/null +++ b/vendor/github.com/gdamore/encoding/ebcdic.go @@ -0,0 +1,273 @@ +// Copyright 2015 Garrett D'Amore +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package encoding + +import ( + "golang.org/x/text/encoding" +) + +// EBCDIC represents the 8-bit EBCDIC scheme, found in some mainframe +// environments. If you don't know what this is, consider yourself lucky. +var EBCDIC encoding.Encoding + +func init() { + cm := &Charmap{ + ReplacementChar: '\x3f', + Map: map[byte]rune{ + // 0x00-0x03 match + 0x04: RuneError, + 0x05: '\t', + 0x06: RuneError, + 0x07: '\x7f', + 0x08: RuneError, + 0x09: RuneError, + 0x0a: RuneError, + // 0x0b-0x13 match + 0x14: RuneError, + 0x15: '\x85', // Not in any ISO code + 0x16: '\x08', + 0x17: RuneError, + // 0x18-0x19 match + 0x1a: RuneError, + 0x1b: RuneError, + // 0x1c-0x1f match + 0x20: RuneError, + 0x21: RuneError, + 0x22: RuneError, + 0x23: RuneError, + 0x24: RuneError, + 0x25: '\n', + 0x26: '\x17', + 0x27: '\x1b', + 0x28: RuneError, + 0x29: RuneError, + 0x2a: RuneError, + 0x2b: RuneError, + 0x2c: RuneError, + 0x2d: '\x05', + 0x2e: '\x06', + 0x2f: '\x07', + 0x30: RuneError, + 0x31: RuneError, + 0x32: '\x16', + 0x33: RuneError, + 0x34: RuneError, + 0x35: RuneError, + 0x36: RuneError, + 0x37: '\x04', + 0x38: RuneError, + 0x39: RuneError, + 0x3a: RuneError, + 0x3b: RuneError, + 0x3c: '\x14', + 0x3d: '\x15', + 0x3e: RuneError, + 0x3f: '\x1a', // also replacement char + 0x40: ' ', + 0x41: '\xa0', + 0x42: RuneError, + 0x43: RuneError, + 0x44: RuneError, + 0x45: RuneError, + 0x46: RuneError, + 0x47: RuneError, + 0x48: RuneError, + 0x49: RuneError, + 0x4a: RuneError, + 0x4b: '.', + 0x4c: '<', + 0x4d: '(', + 0x4e: '+', + 0x4f: '|', + 0x50: '&', + 0x51: RuneError, + 0x52: RuneError, + 0x53: RuneError, + 0x54: RuneError, + 0x55: RuneError, + 0x56: RuneError, + 0x57: RuneError, + 0x58: RuneError, + 0x59: RuneError, + 0x5a: '!', + 0x5b: '$', + 0x5c: '*', + 0x5d: ')', + 0x5e: ';', + 0x5f: '¬', + 0x60: '-', + 0x61: '/', + 0x62: RuneError, + 0x63: RuneError, + 0x64: RuneError, + 0x65: RuneError, + 0x66: RuneError, + 0x67: RuneError, + 0x68: RuneError, + 0x69: RuneError, + 0x6a: '¦', + 0x6b: ',', + 0x6c: '%', + 0x6d: '_', + 0x6e: '>', + 0x6f: '?', + 0x70: RuneError, + 0x71: RuneError, + 0x72: RuneError, + 0x73: RuneError, + 0x74: RuneError, + 0x75: RuneError, + 0x76: RuneError, + 0x77: RuneError, + 0x78: RuneError, + 0x79: '`', + 0x7a: ':', + 0x7b: '#', + 0x7c: '@', + 0x7d: '\'', + 0x7e: '=', + 0x7f: '"', + 0x80: RuneError, + 0x81: 'a', + 0x82: 'b', + 0x83: 'c', + 0x84: 'd', + 0x85: 'e', + 0x86: 'f', + 0x87: 'g', + 0x88: 'h', + 0x89: 'i', + 0x8a: RuneError, + 0x8b: RuneError, + 0x8c: RuneError, + 0x8d: RuneError, + 0x8e: RuneError, + 0x8f: '±', + 0x90: RuneError, + 0x91: 'j', + 0x92: 'k', + 0x93: 'l', + 0x94: 'm', + 0x95: 'n', + 0x96: 'o', + 0x97: 'p', + 0x98: 'q', + 0x99: 'r', + 0x9a: RuneError, + 0x9b: RuneError, + 0x9c: RuneError, + 0x9d: RuneError, + 0x9e: RuneError, + 0x9f: RuneError, + 0xa0: RuneError, + 0xa1: '~', + 0xa2: 's', + 0xa3: 't', + 0xa4: 'u', + 0xa5: 'v', + 0xa6: 'w', + 0xa7: 'x', + 0xa8: 'y', + 0xa9: 'z', + 0xaa: RuneError, + 0xab: RuneError, + 0xac: RuneError, + 0xad: RuneError, + 0xae: RuneError, + 0xaf: RuneError, + 0xb0: '^', + 0xb1: RuneError, + 0xb2: RuneError, + 0xb3: RuneError, + 0xb4: RuneError, + 0xb5: RuneError, + 0xb6: RuneError, + 0xb7: RuneError, + 0xb8: RuneError, + 0xb9: RuneError, + 0xba: '[', + 0xbb: ']', + 0xbc: RuneError, + 0xbd: RuneError, + 0xbe: RuneError, + 0xbf: RuneError, + 0xc0: '{', + 0xc1: 'A', + 0xc2: 'B', + 0xc3: 'C', + 0xc4: 'D', + 0xc5: 'E', + 0xc6: 'F', + 0xc7: 'G', + 0xc8: 'H', + 0xc9: 'I', + 0xca: '\xad', // NB: soft hyphen + 0xcb: RuneError, + 0xcc: RuneError, + 0xcd: RuneError, + 0xce: RuneError, + 0xcf: RuneError, + 0xd0: '}', + 0xd1: 'J', + 0xd2: 'K', + 0xd3: 'L', + 0xd4: 'M', + 0xd5: 'N', + 0xd6: 'O', + 0xd7: 'P', + 0xd8: 'Q', + 0xd9: 'R', + 0xda: RuneError, + 0xdb: RuneError, + 0xdc: RuneError, + 0xdd: RuneError, + 0xde: RuneError, + 0xdf: RuneError, + 0xe0: '\\', + 0xe1: '\u2007', // Non-breaking space + 0xe2: 'S', + 0xe3: 'T', + 0xe4: 'U', + 0xe5: 'V', + 0xe6: 'W', + 0xe7: 'X', + 0xe8: 'Y', + 0xe9: 'Z', + 0xea: RuneError, + 0xeb: RuneError, + 0xec: RuneError, + 0xed: RuneError, + 0xee: RuneError, + 0xef: RuneError, + 0xf0: '0', + 0xf1: '1', + 0xf2: '2', + 0xf3: '3', + 0xf4: '4', + 0xf5: '5', + 0xf6: '6', + 0xf7: '7', + 0xf8: '8', + 0xf9: '9', + 0xfa: RuneError, + 0xfb: RuneError, + 0xfc: RuneError, + 0xfd: RuneError, + 0xfe: RuneError, + 0xff: RuneError, + }} + cm.Init() + EBCDIC = cm +} diff --git a/vendor/github.com/gdamore/encoding/latin1.go b/vendor/github.com/gdamore/encoding/latin1.go new file mode 100644 index 00000000..226bf01d --- /dev/null +++ b/vendor/github.com/gdamore/encoding/latin1.go @@ -0,0 +1,33 @@ +// Copyright 2015 Garrett D'Amore +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package encoding + +import ( + "golang.org/x/text/encoding" +) + +// ISO8859_1 represents the 8-bit ISO8859-1 scheme. It decodes directly to +// UTF-8 without change, as all ISO8859-1 values are legal UTF-8. +// Unicode values less than 256 (i.e. 8 bits) map 1:1 with 8859-1. +// It encodes runes outside of that to 0x1A, the ASCII substitution character. +var ISO8859_1 encoding.Encoding + +func init() { + cm := &Charmap{} + cm.Init() + + // 8859-1 is the 8-bit identity map for Unicode. + ISO8859_1 = cm +} diff --git a/vendor/github.com/gdamore/encoding/latin5.go b/vendor/github.com/gdamore/encoding/latin5.go new file mode 100644 index 00000000..c75ecf27 --- /dev/null +++ b/vendor/github.com/gdamore/encoding/latin5.go @@ -0,0 +1,35 @@ +// Copyright 2015 Garrett D'Amore +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package encoding + +import ( + "golang.org/x/text/encoding" +) + +// ISO8859_9 represents the 8-bit ISO8859-9 scheme. +var ISO8859_9 encoding.Encoding + +func init() { + cm := &Charmap{Map: map[byte]rune{ + 0xD0: 'Ğ', + 0xDD: 'İ', + 0xDE: 'Ş', + 0xF0: 'ğ', + 0xFD: 'ı', + 0xFE: 'ş', + }} + cm.Init() + ISO8859_9 = cm +} diff --git a/vendor/github.com/gdamore/encoding/utf8.go b/vendor/github.com/gdamore/encoding/utf8.go new file mode 100644 index 00000000..2d59f4b3 --- /dev/null +++ b/vendor/github.com/gdamore/encoding/utf8.go @@ -0,0 +1,35 @@ +// Copyright 2015 Garrett D'Amore +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package encoding + +import ( + "golang.org/x/text/encoding" +) + +type validUtf8 struct{} + +// UTF8 is an encoding for UTF-8. All it does is verify that the UTF-8 +// in is valid. The main reason for its existence is that it will detect +// and report ErrSrcShort or ErrDstShort, whereas the Nop encoding just +// passes every byte, blithely. +var UTF8 encoding.Encoding = validUtf8{} + +func (validUtf8) NewDecoder() *encoding.Decoder { + return &encoding.Decoder{Transformer: encoding.UTF8Validator} +} + +func (validUtf8) NewEncoder() *encoding.Encoder { + return &encoding.Encoder{Transformer: encoding.UTF8Validator} +} diff --git a/vendor/github.com/gdamore/tcell/.appveyor.yml b/vendor/github.com/gdamore/tcell/.appveyor.yml new file mode 100644 index 00000000..435dfe3a --- /dev/null +++ b/vendor/github.com/gdamore/tcell/.appveyor.yml @@ -0,0 +1,13 @@ +version: 1.0.{build} +clone_folder: c:\gopath\src\github.com\gdamore\tcell +environment: + GOPATH: c:\gopath +build_script: +- go version +- go env +- SET PATH=%LOCALAPPDATA%\atom\bin;%GOPATH%\bin;%PATH% +- go get -t ./... +- go build +- go install ./... +test_script: +- go test ./... diff --git a/vendor/github.com/gdamore/tcell/.gitignore b/vendor/github.com/gdamore/tcell/.gitignore new file mode 100644 index 00000000..c57100a5 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/.gitignore @@ -0,0 +1 @@ +coverage.txt diff --git a/vendor/github.com/gdamore/tcell/.travis.yml b/vendor/github.com/gdamore/tcell/.travis.yml new file mode 100644 index 00000000..d3fc7d43 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/.travis.yml @@ -0,0 +1,17 @@ +language: go + +go: + - 1.5.x + - 1.6.x + - 1.7.x + - 1.8.x + - master + +before_install: + - go get -t -v ./... + +script: + - go test -race -coverprofile=coverage.txt -covermode=atomic + +after_success: + - bash <(curl -s https://codecov.io/bash) diff --git a/vendor/github.com/gdamore/tcell/AUTHORS b/vendor/github.com/gdamore/tcell/AUTHORS new file mode 100644 index 00000000..53f87ee6 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/AUTHORS @@ -0,0 +1,4 @@ +Garrett D'Amore +Zachary Yedidia +Junegunn Choi +Staysail Systems, Inc. diff --git a/vendor/github.com/gdamore/tcell/LICENSE b/vendor/github.com/gdamore/tcell/LICENSE new file mode 100644 index 00000000..d6456956 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/github.com/gdamore/tcell/README.md b/vendor/github.com/gdamore/tcell/README.md new file mode 100644 index 00000000..b3fcba90 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/README.md @@ -0,0 +1,262 @@ +## tcell + +[![Linux Status](https://img.shields.io/travis/gdamore/tcell.svg?label=linux)](https://travis-ci.org/gdamore/tcell) +[![Windows Status](https://img.shields.io/appveyor/ci/gdamore/tcell.svg?label=windows)](https://ci.appveyor.com/project/gdamore/tcell) +[![Apache License](https://img.shields.io/badge/license-APACHE2-blue.svg)](https://github.com/gdamore/tcell/blob/master/LICENSE) +[![Gitter](https://img.shields.io/badge/gitter-join-brightgreen.svg)](https://gitter.im/gdamore/tcell) +[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](https://godoc.org/github.com/gdamore/tcell) +[![Go Report Card](http://goreportcard.com/badge/gdamore/tcell)](http://goreportcard.com/report/gdamore/tcell) +[![codecov](https://codecov.io/gh/gdamore/tcell/branch/master/graph/badge.svg)](https://codecov.io/gh/gdamore/tcell) + + +> _Tcell is a work in progress (Gamma). +> Please use with caution; interfaces may change in before final release. +> That said, our confidence in Tcell's stability is increasing. If you +> would like to use it in your own application, it is recommended that +> you drop a message to garrett@damore.org before commitment._ + +Package tcell provides a cell based view for text terminals, like xterm. +It was inspired by termbox, but differs from termbox in some important +ways. It also adds substantial functionality beyond termbox. + +## Examples + +* [proxima5](https://github.com/gdamore/proxima5) - space shooter ([video](https://youtu.be/jNxKTCmY_bQ)) +* [govisor](https://github.com/gdamore/govisor) - service management UI ([screenshot](http://2.bp.blogspot.com/--OsvnfzSNow/Vf7aqMw3zXI/AAAAAAAAARo/uOMtOvw4Sbg/s1600/Screen%2BShot%2B2015-09-20%2Bat%2B9.08.41%2BAM.png)) +* mouse demo - [screenshot](http://2.bp.blogspot.com/-fWvW5opT0es/VhIdItdKqJI/AAAAAAAAATE/7Ojc0L1SpB0/s1600/Screen%2BShot%2B2015-10-04%2Bat%2B11.47.13%2BPM.png) - included mouse test +* [gomatrix](https://github.com/gdamore/gomatrix) - converted from Termbox +* [micro](https://github.com/zyedidia/micro/) - lightweight text editor with syntax-highlighting and themes +* [godu](https://github.com/viktomas/godu) - simple golang utility helping to discover large files/folders. + +## Pure Go Terminfo Database + +First, it includes a full parser and expander for terminfo capability strings, +so that it can avoid hard coding escape strings for formatting. It also favors +portability, and includes support for all POSIX systems, at the slight expense +of needing cgo support for terminal initializations. (This may be corrected +when Go provides standard support for terminal handling via termio ioctls on +all POSIX platforms.) The database itself, while built using CGO, as well +as the parser for it, is implemented in Pure Go. + +The database is also flexible & extensible, and can modified by either running a +program to build the database, or hand editing of simple JSON files. + +## More Portable + +Tcell is portable to a wider variety of systems. It relies on standard +POSIX supported function calls (on POSIX platforms) for setting terminal +modes, which leads to improved support for a broader array of platforms. +This does come at the cost of requiring your code to be able to use CGO, but +we believe that the vastly improved portability justifies this +requirement. Note that the functions called are part of the standard C +library, so there shouldn't be any additional external requirements beyond +that required for every POSIX program. + +## No async IO + +Tcell is able to operate without requiring SIGIO signals (unlike Termbox), +or asynchronous I/O, and can instead use standard Go file +objects and Go routines. This means it should be safe, especially for +use with programs that use exec, or otherwise need to manipulate the +tty streams. This model is also much closer to idiomatic Go, leading +to fewer surprises. + +## Richer Unicode & non-Unicode support + +Tcell includes enhanced support for Unicode, include wide characters and +combining characters, provided your terminal can support them. Note that +Windows terminals generally don't support the full Unicode repertoire. + +It will also convert to and from Unicode locales, so that the program +can work with UTF-8 internally, and get reasonable output in other locales. +We try hard to convert to native characters on both input and output, and +on output Tcell even makes use of the alternate character set to facilitate +drawing certain characters. + +## More Function Keys + +It also has richer support for a larger number of +special keys that some terminals can send. + +## Better color handling + +Tcell will respect your terminal's color space as specified within your terminfo +entries, so that for example attempts to emit color sequences on VT100 terminals +won't result in unintended consequences. + +In Windows mode, Tcell supports 16 colors, bold, dim, and reverse, +instead of just termbox's 8 colors with reverse. (Note that there is some +conflation with bold/dim and colors.) + +Tcell maps 16 colors down to 8, for Terminals that need it. (The upper +8 colors are just brighter versions of the lower 8.) + +## Better mouse support + +Tcell supports enhanced mouse tracking mode, so your application can receive +regular mouse motion events, and wheel events, if your terminal supports it. + +## Why not just patch termbox-go? + +I started this project originally by submitting patches to the author of +go-termbox, but due to some fundamental differences of opinion, I thought +it might be simpler just to start from scratch. At this point, Tcell has +far exceeded the capabilities of termbox. + +## Termbox compatibility + +A compatibility layer for termbox is provided in the compat +directory. To use it, try importing "github.com/gdamore/tcell/termbox" +instead. Most termbox-go programs will probably work without further +modification. + +## Working With Unicode + +Internally Tcell uses UTF-8, just like Go. However, Tcell understands how to +convert to and from other character sets, using the capabilities of +the golang.org/x/text/encoding packages. Your application must supply +them, as the full set of the most common ones bloats the program by about +2MB. If you're lazy, and want them all anyway, see the encoding +sub-directory. + +## Wide & Combining Characters + +The SetContent() API takes a primary rune, and an optional list of combining +runes. If any of the runes is a wide (East Asian) rune occupying two cells, +then the library will skip output from the following cell, but care must be +taken in the application to avoid explicitly attempting to set content in the +next cell, otherwise the results are undefined. (Normally wide character +is displayed, and the other character is not; do not depend on that behavior.) + +Experience has shown that the vanilla Windows 8 console application does not +support any of these characters properly, but at least some options like +ConEmu do support Wide characters at least. + +## Colors + +Tcell assumes the ANSI/XTerm color model, including the 256 color map that +XTerm uses when it supports 256 colors. The terminfo guidance will be +honored, with respect to the number of colors supported. Also, only +terminals which expose ANSI style setaf and setab will support color; +if you have a color terminal that only has setf and setb, please let me +know; it wouldn't be hard to add that if there is need. + +## 24-bit Color + +Tcell _supports true color_! (That is, if your terminal can support it, +Tcell can accurately display 24-bit color.) + +To use 24-bit color, you need to use a terminal that supports it. Modern +xterm and similar teminal emulators can support this. As terminfo lacks any +way to describe this capability, we fabricate the capability for +terminals with names ending in *-truecolor. The stock distribution ships +with a database that defines xterm-truecolor. To try it out, set your +TERM variable to xterm-truecolor. + +When using TrueColor, programs will display the colors that the programmer +intended, overriding any "themes" you may have set in your terminal +emulator. (For some cases, accurate color fidelity is more important +than respecting themes. For other cases, such as typical text apps that +only use a few colors, its more desirable to respect the themes that +the user has established.) + +If you find this undesirable, you can either use a TERM variable +that lacks the TRUECOLOR setting, or set TCELL_TRUECOLOR=disable in your +environment. + +## Performance + +Reasonable attempts have been made to minimize sending data to terminals, +avoiding repeated sequences or drawing the same cell on refresh updates. + +## Terminfo + +(Not relevent for Windows users.) + +The Terminfo implementation operates with two forms of database. The first +is the database.go file, which contains a number of real database entries +that are compiled into the program directly. This should minimize calling +out to database file searches. + +The second is a JSON file, that contains the same information, which can +be located either by the $TCELLDB environment file, $HOME/.tcelldb, or is +located in the Go source directory as database.json. + +These files (both the Go database.go and the database.json) file can be +generated using the mkinfo.go program. If you need to regnerate the +entire set for some reason, run the mkdatabase.sh file. The generation +uses the terminfo routines on the system to populate the data files. + +The mkinfo.go program can also be used to generate specific database entries +for named terminals, in case your favorite terminal is missing. (If you +find that this is the case, please let me know and I'll try to add it!) + +Tcell requires that the terminal support the 'cup' mode of cursor addressing. +Terminals without absolute cursor addressability are not supported. +This is unlikely to be a problem; such terminals have not been mass produced +since the early 1970s. + +## Mouse Support + +Mouse support is detected via the "kmous" terminfo variable, however, +enablement/disablement and decoding mouse events is done using hard coded +sequences based on the XTerm X11 model. As of this writing all popular +terminals with mouse tracking support this model. (Full terminfo support +is not possible as terminfo sequences are not defined.) + +On Windows, the mouse works normally. + +Mouse wheel buttons on various terminals are known to work, but the support +in terminal emulators, as well as support for various buttons and +live mouse tracking, varies widely. As a particular datum, MacOS X Terminal +does not support Mouse events at all (as of MacOS 10.10, aka Yosemite.) The +excellent iTerm application is fully supported, as is vanilla XTerm. + +Mouse tracking with live tracking also varies widely. Current XTerm +implementations, as well as current Screen and iTerm2, and Windows +consoles, all support this quite nicely. On other platforms you might +find that only mouse click and release events are reported, with +no intervening motion events. It really depends on your terminal. + +## Testablity + +There is a SimulationScreen, that can be used to simulate a real screen +for automated testing. The supplied tests do this. The simulation contains +event delivery, screen resizing support, and capabilities to inject events +and examine "physical" screen contents. + +## Platforms + +### Systems (Linux, FreeBSD, MacOS, Solaris, etc.) + +On POSIX systems, a POSIX termios implementation with /dev/tty is required. +On a small subset of these platforms (such as Solaris/illumos), we require +cgo to run, in order to access termios. (Note that Linux and BSD systems +do not require CGO for most purposes.) + +(Note: CGO support is required if you wish to rebuild the terminal database +from the system's native terminfo binary files. This is because we use the +system's native libterminfo to access that binary data. We probably could +eliminate that in the future by using a terminfo decompiler such as infocmp.) + +### Windows + +Windows console mode applications are supported. Unfortunately mintty +and other cygwin style applications are not supported. + +Modern console applications like ConEmu support all the good features +(resize, mouse tracking, etc.) + +I haven't figured out how to cleanly resolve the dichotomy between cygwin +style termios and the Windows Console API; it seems that perhaps nobody else +has either. If anyone has suggestions, let me know! Really, if you're +using a Windows application, you should use the native Windows console or a +fully compatible console implementation. Hopefully the Windows 10 console +is more functional in this regard. + +### Plan9 and Native Client (Nacl) + +The nacl and plan9 platforms won't work, but compilation stubs are supplied +for folks that want to include parts of this in software targetting those +platforms. The Simulation screen works, but as Tcell doesn't know how to +allocate a real screen object on those platforms, NewScreen() will fail. diff --git a/vendor/github.com/gdamore/tcell/attr.go b/vendor/github.com/gdamore/tcell/attr.go new file mode 100644 index 00000000..866c0ebd --- /dev/null +++ b/vendor/github.com/gdamore/tcell/attr.go @@ -0,0 +1,32 @@ +// Copyright 2015 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcell + +// AttrMask represents a mask of text attributes, apart from color. +// Note that support for attributes may vary widely across terminals. +type AttrMask int + +// Attributes are not colors, but affect the display of text. They can +// be combined. +const ( + AttrBold AttrMask = 1 << (25 + iota) + AttrBlink + AttrReverse + AttrUnderline + AttrDim + AttrNone AttrMask = 0 // Just normal text. +) + +const attrAll = AttrBold | AttrBlink | AttrReverse | AttrUnderline | AttrDim diff --git a/vendor/github.com/gdamore/tcell/cell.go b/vendor/github.com/gdamore/tcell/cell.go new file mode 100644 index 00000000..b54abcbc --- /dev/null +++ b/vendor/github.com/gdamore/tcell/cell.go @@ -0,0 +1,186 @@ +// Copyright 2015 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcell + +import ( + "github.com/mattn/go-runewidth" +) + +type cell struct { + currMain rune + currComb []rune + currStyle Style + lastMain rune + lastStyle Style + lastComb []rune + width int +} + +// CellBuffer represents a two dimensional array of character cells. +// This is primarily intended for use by Screen implementors; it +// contains much of the common code they need. To create one, just +// declare a variable of its type; no explicit initialization is necessary. +// +// CellBuffer is not thread safe. +type CellBuffer struct { + w int + h int + cells []cell +} + +// SetContent sets the contents (primary rune, combining runes, +// and style) for a cell at a given location. +func (cb *CellBuffer) SetContent(x int, y int, + mainc rune, combc []rune, style Style) { + + if x >= 0 && y >= 0 && x < cb.w && y < cb.h { + c := &cb.cells[(y*cb.w)+x] + + i := 0 + for i < len(combc) { + r := combc[i] + if runewidth.RuneWidth(r) != 0 { + // not a combining character, yank it + combc = append(combc[:i-1], combc[i+1:]...) + continue + } + i++ + } + + if c.currMain != mainc { + c.width = runewidth.RuneWidth(mainc) + } + c.currMain = mainc + c.currComb = combc + c.currStyle = style + } +} + +// GetContent returns the contents of a character cell, including the +// primary rune, any combining character runes (which will usually be +// nil), the style, and the display width in cells. (The width can be +// either 1, normally, or 2 for East Asian full-width characters.) +func (cb *CellBuffer) GetContent(x, y int) (rune, []rune, Style, int) { + var mainc rune + var combc []rune + var style Style + var width int + if x >= 0 && y >= 0 && x < cb.w && y < cb.h { + c := &cb.cells[(y*cb.w)+x] + mainc, combc, style = c.currMain, c.currComb, c.currStyle + if width = c.width; width == 0 || mainc < ' ' { + width = 1 + mainc = ' ' + } + } + return mainc, combc, style, width +} + +// Size returns the (width, height) in cells of the buffer. +func (cb *CellBuffer) Size() (int, int) { + return cb.w, cb.h +} + +// Invalidate marks all characters within the buffer as dirty. +func (cb *CellBuffer) Invalidate() { + for i := range cb.cells { + cb.cells[i].lastMain = rune(0) + } +} + +// Dirty checks if a character at the given location needs an +// to be refreshed on the physical display. This returns true +// if the cell content is different since the last time it was +// marked clean. +func (cb *CellBuffer) Dirty(x, y int) bool { + if x >= 0 && y >= 0 && x < cb.w && y < cb.h { + c := &cb.cells[(y*cb.w)+x] + if c.lastMain == rune(0) { + return true + } + if c.lastMain != c.currMain { + return true + } + if c.lastStyle != c.currStyle { + return true + } + if len(c.lastComb) != len(c.currComb) { + return true + } + for i := range c.lastComb { + if c.lastComb[i] != c.currComb[i] { + return true + } + } + } + return false +} + +// SetDirty is normally used to indicate that a cell has +// been displayed (in which case dirty is false), or to manually +// force a cell to be marked dirty. +func (cb *CellBuffer) SetDirty(x, y int, dirty bool) { + if x >= 0 && y >= 0 && x < cb.w && y < cb.h { + c := &cb.cells[(y*cb.w)+x] + if dirty { + c.lastMain = rune(0) + } else { + if c.currMain == rune(0) { + c.currMain = ' ' + } + c.lastMain = c.currMain + c.lastComb = c.currComb + c.lastStyle = c.currStyle + } + } +} + +// Resize is used to resize the cells array, with different dimensions, +// while preserving the original contents. The cells will be invalidated +// so that they can be redrawn. +func (cb *CellBuffer) Resize(w, h int) { + + if cb.h == h && cb.w == w { + return + } + + newc := make([]cell, w*h) + for y := 0; y < h && y < cb.h; y++ { + for x := 0; x < w && x < cb.w; x++ { + oc := &cb.cells[(y*cb.w)+x] + nc := &newc[(y*w)+x] + nc.currMain = oc.currMain + nc.currComb = oc.currComb + nc.currStyle = oc.currStyle + nc.width = oc.width + nc.lastMain = rune(0) + } + } + cb.cells = newc + cb.h = h + cb.w = w +} + +// Fill fills the entire cell buffer array with the specified character +// and style. Normally choose ' ' to clear the screen. This API doesn't +// support combining characters. +func (cb *CellBuffer) Fill(r rune, style Style) { + for i := range cb.cells { + c := &cb.cells[i] + c.currMain = r + c.currComb = nil + c.currStyle = style + } +} diff --git a/vendor/github.com/gdamore/tcell/charset_stub.go b/vendor/github.com/gdamore/tcell/charset_stub.go new file mode 100644 index 00000000..c1c1594c --- /dev/null +++ b/vendor/github.com/gdamore/tcell/charset_stub.go @@ -0,0 +1,21 @@ +// +build plan9 nacl + +// Copyright 2015 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcell + +func getCharset() string { + return "" +} diff --git a/vendor/github.com/gdamore/tcell/charset_unix.go b/vendor/github.com/gdamore/tcell/charset_unix.go new file mode 100644 index 00000000..d9f9d8e1 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/charset_unix.go @@ -0,0 +1,49 @@ +// +build !windows,!nacl,!plan9 + +// Copyright 2016 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcell + +import ( + "os" + "strings" +) + +func getCharset() string { + // Determine the character set. This can help us later. + // Per POSIX, we search for LC_ALL first, then LC_CTYPE, and + // finally LANG. First one set wins. + locale := "" + if locale = os.Getenv("LC_ALL"); locale == "" { + if locale = os.Getenv("LC_CTYPE"); locale == "" { + locale = os.Getenv("LANG") + } + } + if locale == "POSIX" || locale == "C" { + return "US-ASCII" + } + if i := strings.IndexRune(locale, '@'); i >= 0 { + locale = locale[:i] + } + if i := strings.IndexRune(locale, '.'); i >= 0 { + locale = locale[i+1:] + } else { + // Default assumption, and on Linux we can see LC_ALL + // without a character set, which we assume implies UTF-8. + return "UTF-8" + } + // XXX: add support for aliases + return locale +} diff --git a/vendor/github.com/gdamore/tcell/charset_windows.go b/vendor/github.com/gdamore/tcell/charset_windows.go new file mode 100644 index 00000000..2400aa8a --- /dev/null +++ b/vendor/github.com/gdamore/tcell/charset_windows.go @@ -0,0 +1,21 @@ +// +build windows + +// Copyright 2015 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcell + +func getCharset() string { + return "UTF-16" +} diff --git a/vendor/github.com/gdamore/tcell/color.go b/vendor/github.com/gdamore/tcell/color.go new file mode 100644 index 00000000..2e096c70 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/color.go @@ -0,0 +1,1019 @@ +// Copyright 2015 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcell + +import "strconv" + +// Color represents a color. The low numeric values are the same as used +// by ECMA-48, and beyond that XTerm. A 24-bit RGB value may be used by +// adding in the ColorIsRGB flag. For Color names we use the W3C approved +// color names. +// +// Note that on various terminals colors may be approximated however, or +// not supported at all. If no suitable representation for a color is known, +// the library will simply not set any color, deferring to whatever default +// attributes the terminal uses. +type Color int32 + +const ( + // ColorDefault is used to leave the Color unchanged from whatever + // system or teminal default may exist. + ColorDefault Color = -1 + + // ColorIsRGB is used to indicate that the numeric value is not + // a known color constant, but rather an RGB value. The lower + // order 3 bytes are RGB. + ColorIsRGB Color = 1 << 24 +) + +// Note that the order of these options is important -- it follows the +// definitions used by ECMA and XTerm. Hence any further named colors +// must begin at a value not less than 256. +const ( + ColorBlack Color = iota + ColorMaroon + ColorGreen + ColorOlive + ColorNavy + ColorPurple + ColorTeal + ColorSilver + ColorGray + ColorRed + ColorLime + ColorYellow + ColorBlue + ColorFuchsia + ColorAqua + ColorWhite + Color16 + Color17 + Color18 + Color19 + Color20 + Color21 + Color22 + Color23 + Color24 + Color25 + Color26 + Color27 + Color28 + Color29 + Color30 + Color31 + Color32 + Color33 + Color34 + Color35 + Color36 + Color37 + Color38 + Color39 + Color40 + Color41 + Color42 + Color43 + Color44 + Color45 + Color46 + Color47 + Color48 + Color49 + Color50 + Color51 + Color52 + Color53 + Color54 + Color55 + Color56 + Color57 + Color58 + Color59 + Color60 + Color61 + Color62 + Color63 + Color64 + Color65 + Color66 + Color67 + Color68 + Color69 + Color70 + Color71 + Color72 + Color73 + Color74 + Color75 + Color76 + Color77 + Color78 + Color79 + Color80 + Color81 + Color82 + Color83 + Color84 + Color85 + Color86 + Color87 + Color88 + Color89 + Color90 + Color91 + Color92 + Color93 + Color94 + Color95 + Color96 + Color97 + Color98 + Color99 + Color100 + Color101 + Color102 + Color103 + Color104 + Color105 + Color106 + Color107 + Color108 + Color109 + Color110 + Color111 + Color112 + Color113 + Color114 + Color115 + Color116 + Color117 + Color118 + Color119 + Color120 + Color121 + Color122 + Color123 + Color124 + Color125 + Color126 + Color127 + Color128 + Color129 + Color130 + Color131 + Color132 + Color133 + Color134 + Color135 + Color136 + Color137 + Color138 + Color139 + Color140 + Color141 + Color142 + Color143 + Color144 + Color145 + Color146 + Color147 + Color148 + Color149 + Color150 + Color151 + Color152 + Color153 + Color154 + Color155 + Color156 + Color157 + Color158 + Color159 + Color160 + Color161 + Color162 + Color163 + Color164 + Color165 + Color166 + Color167 + Color168 + Color169 + Color170 + Color171 + Color172 + Color173 + Color174 + Color175 + Color176 + Color177 + Color178 + Color179 + Color180 + Color181 + Color182 + Color183 + Color184 + Color185 + Color186 + Color187 + Color188 + Color189 + Color190 + Color191 + Color192 + Color193 + Color194 + Color195 + Color196 + Color197 + Color198 + Color199 + Color200 + Color201 + Color202 + Color203 + Color204 + Color205 + Color206 + Color207 + Color208 + Color209 + Color210 + Color211 + Color212 + Color213 + Color214 + Color215 + Color216 + Color217 + Color218 + Color219 + Color220 + Color221 + Color222 + Color223 + Color224 + Color225 + Color226 + Color227 + Color228 + Color229 + Color230 + Color231 + Color232 + Color233 + Color234 + Color235 + Color236 + Color237 + Color238 + Color239 + Color240 + Color241 + Color242 + Color243 + Color244 + Color245 + Color246 + Color247 + Color248 + Color249 + Color250 + Color251 + Color252 + Color253 + Color254 + Color255 + ColorAliceBlue + ColorAntiqueWhite + ColorAquaMarine + ColorAzure + ColorBeige + ColorBisque + ColorBlanchedAlmond + ColorBlueViolet + ColorBrown + ColorBurlyWood + ColorCadetBlue + ColorChartreuse + ColorChocolate + ColorCoral + ColorCornflowerBlue + ColorCornsilk + ColorCrimson + ColorDarkBlue + ColorDarkCyan + ColorDarkGoldenrod + ColorDarkGray + ColorDarkGreen + ColorDarkKhaki + ColorDarkMagenta + ColorDarkOliveGreen + ColorDarkOrange + ColorDarkOrchid + ColorDarkRed + ColorDarkSalmon + ColorDarkSeaGreen + ColorDarkSlateBlue + ColorDarkSlateGray + ColorDarkTurquoise + ColorDarkViolet + ColorDeepPink + ColorDeepSkyBlue + ColorDimGray + ColorDodgerBlue + ColorFireBrick + ColorFloralWhite + ColorForestGreen + ColorGainsboro + ColorGhostWhite + ColorGold + ColorGoldenrod + ColorGreenYellow + ColorHoneydew + ColorHotPink + ColorIndianRed + ColorIndigo + ColorIvory + ColorKhaki + ColorLavender + ColorLavenderBlush + ColorLawnGreen + ColorLemonChiffon + ColorLightBlue + ColorLightCoral + ColorLightCyan + ColorLightGoldenrodYellow + ColorLightGray + ColorLightGreen + ColorLightPink + ColorLightSalmon + ColorLightSeaGreen + ColorLightSkyBlue + ColorLightSlateGray + ColorLightSteelBlue + ColorLightYellow + ColorLimeGreen + ColorLinen + ColorMediumAquamarine + ColorMediumBlue + ColorMediumOrchid + ColorMediumPurple + ColorMediumSeaGreen + ColorMediumSlateBlue + ColorMediumSpringGreen + ColorMediumTurquoise + ColorMediumVioletRed + ColorMidnightBlue + ColorMintCream + ColorMistyRose + ColorMoccasin + ColorNavajoWhite + ColorOldLace + ColorOliveDrab + ColorOrange + ColorOrangeRed + ColorOrchid + ColorPaleGoldenrod + ColorPaleGreen + ColorPaleTurquoise + ColorPaleVioletRed + ColorPapayaWhip + ColorPeachPuff + ColorPeru + ColorPink + ColorPlum + ColorPowderBlue + ColorRebeccaPurple + ColorRosyBrown + ColorRoyalBlue + ColorSaddleBrown + ColorSalmon + ColorSandyBrown + ColorSeaGreen + ColorSeashell + ColorSienna + ColorSkyblue + ColorSlateBlue + ColorSlateGray + ColorSnow + ColorSpringGreen + ColorSteelBlue + ColorTan + ColorThistle + ColorTomato + ColorTurquoise + ColorViolet + ColorWheat + ColorWhiteSmoke + ColorYellowGreen +) + +// These are aliases for the color gray, because some of us spell +// it as grey. +const ( + ColorGrey = ColorGray + ColorDimGrey = ColorDimGray + ColorDarkGrey = ColorDarkGray + ColorDarkSlateGrey = ColorDarkSlateGray + ColorLightGrey = ColorLightGray + ColorLightSlateGrey = ColorLightSlateGray + ColorSlateGrey = ColorSlateGray +) + +// ColorValues maps color constants to their RGB values. +var ColorValues = map[Color]int32{ + ColorBlack: 0x000000, + ColorMaroon: 0x800000, + ColorGreen: 0x008000, + ColorOlive: 0x808000, + ColorNavy: 0x000080, + ColorPurple: 0x800080, + ColorTeal: 0x008080, + ColorSilver: 0xC0C0C0, + ColorGray: 0x808080, + ColorRed: 0xFF0000, + ColorLime: 0x00FF00, + ColorYellow: 0xFFFF00, + ColorBlue: 0x0000FF, + ColorFuchsia: 0xFF00FF, + ColorAqua: 0x00FFFF, + ColorWhite: 0xFFFFFF, + Color16: 0x000000, // black + Color17: 0x00005F, + Color18: 0x000087, + Color19: 0x0000AF, + Color20: 0x0000D7, + Color21: 0x0000FF, // blue + Color22: 0x005F00, + Color23: 0x005F5F, + Color24: 0x005F87, + Color25: 0x005FAF, + Color26: 0x005FD7, + Color27: 0x005FFF, + Color28: 0x008700, + Color29: 0x00875F, + Color30: 0x008787, + Color31: 0x0087Af, + Color32: 0x0087D7, + Color33: 0x0087FF, + Color34: 0x00AF00, + Color35: 0x00AF5F, + Color36: 0x00AF87, + Color37: 0x00AFAF, + Color38: 0x00AFD7, + Color39: 0x00AFFF, + Color40: 0x00D700, + Color41: 0x00D75F, + Color42: 0x00D787, + Color43: 0x00D7AF, + Color44: 0x00D7D7, + Color45: 0x00D7FF, + Color46: 0x00FF00, // lime + Color47: 0x00FF5F, + Color48: 0x00FF87, + Color49: 0x00FFAF, + Color50: 0x00FFd7, + Color51: 0x00FFFF, // aqua + Color52: 0x5F0000, + Color53: 0x5F005F, + Color54: 0x5F0087, + Color55: 0x5F00AF, + Color56: 0x5F00D7, + Color57: 0x5F00FF, + Color58: 0x5F5F00, + Color59: 0x5F5F5F, + Color60: 0x5F5F87, + Color61: 0x5F5FAF, + Color62: 0x5F5FD7, + Color63: 0x5F5FFF, + Color64: 0x5F8700, + Color65: 0x5F875F, + Color66: 0x5F8787, + Color67: 0x5F87AF, + Color68: 0x5F87D7, + Color69: 0x5F87FF, + Color70: 0x5FAF00, + Color71: 0x5FAF5F, + Color72: 0x5FAF87, + Color73: 0x5FAFAF, + Color74: 0x5FAFD7, + Color75: 0x5FAFFF, + Color76: 0x5FD700, + Color77: 0x5FD75F, + Color78: 0x5FD787, + Color79: 0x5FD7AF, + Color80: 0x5FD7D7, + Color81: 0x5FD7FF, + Color82: 0x5FFF00, + Color83: 0x5FFF5F, + Color84: 0x5FFF87, + Color85: 0x5FFFAF, + Color86: 0x5FFFD7, + Color87: 0x5FFFFF, + Color88: 0x870000, + Color89: 0x87005F, + Color90: 0x870087, + Color91: 0x8700AF, + Color92: 0x8700D7, + Color93: 0x8700FF, + Color94: 0x875F00, + Color95: 0x875F5F, + Color96: 0x875F87, + Color97: 0x875FAF, + Color98: 0x875FD7, + Color99: 0x875FFF, + Color100: 0x878700, + Color101: 0x87875F, + Color102: 0x878787, + Color103: 0x8787AF, + Color104: 0x8787D7, + Color105: 0x8787FF, + Color106: 0x87AF00, + Color107: 0x87AF5F, + Color108: 0x87AF87, + Color109: 0x87AFAF, + Color110: 0x87AFD7, + Color111: 0x87AFFF, + Color112: 0x87D700, + Color113: 0x87D75F, + Color114: 0x87D787, + Color115: 0x87D7AF, + Color116: 0x87D7D7, + Color117: 0x87D7FF, + Color118: 0x87FF00, + Color119: 0x87FF5F, + Color120: 0x87FF87, + Color121: 0x87FFAF, + Color122: 0x87FFD7, + Color123: 0x87FFFF, + Color124: 0xAF0000, + Color125: 0xAF005F, + Color126: 0xAF0087, + Color127: 0xAF00AF, + Color128: 0xAF00D7, + Color129: 0xAF00FF, + Color130: 0xAF5F00, + Color131: 0xAF5F5F, + Color132: 0xAF5F87, + Color133: 0xAF5FAF, + Color134: 0xAF5FD7, + Color135: 0xAF5FFF, + Color136: 0xAF8700, + Color137: 0xAF875F, + Color138: 0xAF8787, + Color139: 0xAF87AF, + Color140: 0xAF87D7, + Color141: 0xAF87FF, + Color142: 0xAFAF00, + Color143: 0xAFAF5F, + Color144: 0xAFAF87, + Color145: 0xAFAFAF, + Color146: 0xAFAFD7, + Color147: 0xAFAFFF, + Color148: 0xAFD700, + Color149: 0xAFD75F, + Color150: 0xAFD787, + Color151: 0xAFD7AF, + Color152: 0xAFD7D7, + Color153: 0xAFD7FF, + Color154: 0xAFFF00, + Color155: 0xAFFF5F, + Color156: 0xAFFF87, + Color157: 0xAFFFAF, + Color158: 0xAFFFD7, + Color159: 0xAFFFFF, + Color160: 0xD70000, + Color161: 0xD7005F, + Color162: 0xD70087, + Color163: 0xD700AF, + Color164: 0xD700D7, + Color165: 0xD700FF, + Color166: 0xD75F00, + Color167: 0xD75F5F, + Color168: 0xD75F87, + Color169: 0xD75FAF, + Color170: 0xD75FD7, + Color171: 0xD75FFF, + Color172: 0xD78700, + Color173: 0xD7875F, + Color174: 0xD78787, + Color175: 0xD787AF, + Color176: 0xD787D7, + Color177: 0xD787FF, + Color178: 0xD7AF00, + Color179: 0xD7AF5F, + Color180: 0xD7AF87, + Color181: 0xD7AFAF, + Color182: 0xD7AFD7, + Color183: 0xD7AFFF, + Color184: 0xD7D700, + Color185: 0xD7D75F, + Color186: 0xD7D787, + Color187: 0xD7D7AF, + Color188: 0xD7D7D7, + Color189: 0xD7D7FF, + Color190: 0xD7FF00, + Color191: 0xD7FF5F, + Color192: 0xD7FF87, + Color193: 0xD7FFAF, + Color194: 0xD7FFD7, + Color195: 0xD7FFFF, + Color196: 0xFF0000, // red + Color197: 0xFF005F, + Color198: 0xFF0087, + Color199: 0xFF00AF, + Color200: 0xFF00D7, + Color201: 0xFF00FF, // fuchsia + Color202: 0xFF5F00, + Color203: 0xFF5F5F, + Color204: 0xFF5F87, + Color205: 0xFF5FAF, + Color206: 0xFF5FD7, + Color207: 0xFF5FFF, + Color208: 0xFF8700, + Color209: 0xFF875F, + Color210: 0xFF8787, + Color211: 0xFF87AF, + Color212: 0xFF87D7, + Color213: 0xFF87FF, + Color214: 0xFFAF00, + Color215: 0xFFAF5F, + Color216: 0xFFAF87, + Color217: 0xFFAFAF, + Color218: 0xFFAFD7, + Color219: 0xFFAFFF, + Color220: 0xFFD700, + Color221: 0xFFD75F, + Color222: 0xFFD787, + Color223: 0xFFD7AF, + Color224: 0xFFD7D7, + Color225: 0xFFD7FF, + Color226: 0xFFFF00, // yellow + Color227: 0xFFFF5F, + Color228: 0xFFFF87, + Color229: 0xFFFFAF, + Color230: 0xFFFFD7, + Color231: 0xFFFFFF, // white + Color232: 0x080808, + Color233: 0x121212, + Color234: 0x1C1C1C, + Color235: 0x262626, + Color236: 0x303030, + Color237: 0x3A3A3A, + Color238: 0x444444, + Color239: 0x4E4E4E, + Color240: 0x585858, + Color241: 0x626262, + Color242: 0x6C6C6C, + Color243: 0x767676, + Color244: 0x808080, // grey + Color245: 0x8A8A8A, + Color246: 0x949494, + Color247: 0x9E9E9E, + Color248: 0xA8A8A8, + Color249: 0xB2B2B2, + Color250: 0xBCBCBC, + Color251: 0xC6C6C6, + Color252: 0xD0D0D0, + Color253: 0xDADADA, + Color254: 0xE4E4E4, + Color255: 0xEEEEEE, + ColorAliceBlue: 0xF0F8FF, + ColorAntiqueWhite: 0xFAEBD7, + ColorAquaMarine: 0x7FFFD4, + ColorAzure: 0xF0FFFF, + ColorBeige: 0xF5F5DC, + ColorBisque: 0xFFE4C4, + ColorBlanchedAlmond: 0xFFEBCD, + ColorBlueViolet: 0x8A2BE2, + ColorBrown: 0xA52A2A, + ColorBurlyWood: 0xDEB887, + ColorCadetBlue: 0x5F9EA0, + ColorChartreuse: 0x7FFF00, + ColorChocolate: 0xD2691E, + ColorCoral: 0xFF7F50, + ColorCornflowerBlue: 0x6495ED, + ColorCornsilk: 0xFFF8DC, + ColorCrimson: 0xDC143C, + ColorDarkBlue: 0x00008B, + ColorDarkCyan: 0x008B8B, + ColorDarkGoldenrod: 0xB8860B, + ColorDarkGray: 0xA9A9A9, + ColorDarkGreen: 0x006400, + ColorDarkKhaki: 0xBDB76B, + ColorDarkMagenta: 0x8B008B, + ColorDarkOliveGreen: 0x556B2F, + ColorDarkOrange: 0xFF8C00, + ColorDarkOrchid: 0x9932CC, + ColorDarkRed: 0x8B0000, + ColorDarkSalmon: 0xE9967A, + ColorDarkSeaGreen: 0x8FBC8F, + ColorDarkSlateBlue: 0x483D8B, + ColorDarkSlateGray: 0x2F4F4F, + ColorDarkTurquoise: 0x00CED1, + ColorDarkViolet: 0x9400D3, + ColorDeepPink: 0xFF1493, + ColorDeepSkyBlue: 0x00BFFF, + ColorDimGray: 0x696969, + ColorDodgerBlue: 0x1E90FF, + ColorFireBrick: 0xB22222, + ColorFloralWhite: 0xFFFAF0, + ColorForestGreen: 0x228B22, + ColorGainsboro: 0xDCDCDC, + ColorGhostWhite: 0xF8F8FF, + ColorGold: 0xFFD700, + ColorGoldenrod: 0xDAA520, + ColorGreenYellow: 0xADFF2F, + ColorHoneydew: 0xF0FFF0, + ColorHotPink: 0xFF69B4, + ColorIndianRed: 0xCD5C5C, + ColorIndigo: 0x4B0082, + ColorIvory: 0xFFFFF0, + ColorKhaki: 0xF0E68C, + ColorLavender: 0xE6E6FA, + ColorLavenderBlush: 0xFFF0F5, + ColorLawnGreen: 0x7CFC00, + ColorLemonChiffon: 0xFFFACD, + ColorLightBlue: 0xADD8E6, + ColorLightCoral: 0xF08080, + ColorLightCyan: 0xE0FFFF, + ColorLightGoldenrodYellow: 0xFAFAD2, + ColorLightGray: 0xD3D3D3, + ColorLightGreen: 0x90EE90, + ColorLightPink: 0xFFB6C1, + ColorLightSalmon: 0xFFA07A, + ColorLightSeaGreen: 0x20B2AA, + ColorLightSkyBlue: 0x87CEFA, + ColorLightSlateGray: 0x778899, + ColorLightSteelBlue: 0xB0C4DE, + ColorLightYellow: 0xFFFFE0, + ColorLimeGreen: 0x32CD32, + ColorLinen: 0xFAF0E6, + ColorMediumAquamarine: 0x66CDAA, + ColorMediumBlue: 0x0000CD, + ColorMediumOrchid: 0xBA55D3, + ColorMediumPurple: 0x9370DB, + ColorMediumSeaGreen: 0x3CB371, + ColorMediumSlateBlue: 0x7B68EE, + ColorMediumSpringGreen: 0x00FA9A, + ColorMediumTurquoise: 0x48D1CC, + ColorMediumVioletRed: 0xC71585, + ColorMidnightBlue: 0x191970, + ColorMintCream: 0xF5FFFA, + ColorMistyRose: 0xFFE4E1, + ColorMoccasin: 0xFFE4B5, + ColorNavajoWhite: 0xFFDEAD, + ColorOldLace: 0xFDF5E6, + ColorOliveDrab: 0x6B8E23, + ColorOrange: 0xFFA500, + ColorOrangeRed: 0xFF4500, + ColorOrchid: 0xDA70D6, + ColorPaleGoldenrod: 0xEEE8AA, + ColorPaleGreen: 0x98FB98, + ColorPaleTurquoise: 0xAFEEEE, + ColorPaleVioletRed: 0xDB7093, + ColorPapayaWhip: 0xFFEFD5, + ColorPeachPuff: 0xFFDAB9, + ColorPeru: 0xCD853F, + ColorPink: 0xFFC0CB, + ColorPlum: 0xDDA0DD, + ColorPowderBlue: 0xB0E0E6, + ColorRebeccaPurple: 0x663399, + ColorRosyBrown: 0xBC8F8F, + ColorRoyalBlue: 0x4169E1, + ColorSaddleBrown: 0x8B4513, + ColorSalmon: 0xFA8072, + ColorSandyBrown: 0xF4A460, + ColorSeaGreen: 0x2E8B57, + ColorSeashell: 0xFFF5EE, + ColorSienna: 0xA0522D, + ColorSkyblue: 0x87CEEB, + ColorSlateBlue: 0x6A5ACD, + ColorSlateGray: 0x708090, + ColorSnow: 0xFFFAFA, + ColorSpringGreen: 0x00FF7F, + ColorSteelBlue: 0x4682B4, + ColorTan: 0xD2B48C, + ColorThistle: 0xD8BFD8, + ColorTomato: 0xFF6347, + ColorTurquoise: 0x40E0D0, + ColorViolet: 0xEE82EE, + ColorWheat: 0xF5DEB3, + ColorWhiteSmoke: 0xF5F5F5, + ColorYellowGreen: 0x9ACD32, +} + +// ColorNames holds the written names of colors. Useful to present a list of +// recognized named colors. +var ColorNames = map[string]Color{ + "black": ColorBlack, + "maroon": ColorMaroon, + "green": ColorGreen, + "olive": ColorOlive, + "navy": ColorNavy, + "purple": ColorPurple, + "teal": ColorTeal, + "silver": ColorSilver, + "gray": ColorGray, + "red": ColorRed, + "lime": ColorLime, + "yellow": ColorYellow, + "blue": ColorBlue, + "fuchsia": ColorFuchsia, + "aqua": ColorAqua, + "white": ColorWhite, + "aliceblue": ColorAliceBlue, + "antiquewhite": ColorAntiqueWhite, + "aquamarine": ColorAquaMarine, + "azure": ColorAzure, + "beige": ColorBeige, + "bisque": ColorBisque, + "blanchedalmond": ColorBlanchedAlmond, + "blueviolet": ColorBlueViolet, + "brown": ColorBrown, + "burlywood": ColorBurlyWood, + "cadetblue": ColorCadetBlue, + "chartreuse": ColorChartreuse, + "chocolate": ColorChocolate, + "coral": ColorCoral, + "cornflowerblue": ColorCornflowerBlue, + "cornsilk": ColorCornsilk, + "crimson": ColorCrimson, + "darkblue": ColorDarkBlue, + "darkcyan": ColorDarkCyan, + "darkgoldenrod": ColorDarkGoldenrod, + "darkgray": ColorDarkGray, + "darkgreen": ColorDarkGreen, + "darkkhaki": ColorDarkKhaki, + "darkmagenta": ColorDarkMagenta, + "darkolivegreen": ColorDarkOliveGreen, + "darkorange": ColorDarkOrange, + "darkorchid": ColorDarkOrchid, + "darkred": ColorDarkRed, + "darksalmon": ColorDarkSalmon, + "darkseagreen": ColorDarkSeaGreen, + "darkslateblue": ColorDarkSlateBlue, + "darkslategray": ColorDarkSlateGray, + "darkturquoise": ColorDarkTurquoise, + "darkviolet": ColorDarkViolet, + "deeppink": ColorDeepPink, + "deepskyblue": ColorDeepSkyBlue, + "dimgray": ColorDimGray, + "dodgerblue": ColorDodgerBlue, + "firebrick": ColorFireBrick, + "floralwhite": ColorFloralWhite, + "forestgreen": ColorForestGreen, + "gainsboro": ColorGainsboro, + "ghostwhite": ColorGhostWhite, + "gold": ColorGold, + "goldenrod": ColorGoldenrod, + "greenyellow": ColorGreenYellow, + "honeydew": ColorHoneydew, + "hotpink": ColorHotPink, + "indianred": ColorIndianRed, + "indigo": ColorIndigo, + "ivory": ColorIvory, + "khaki": ColorKhaki, + "lavender": ColorLavender, + "lavenderblush": ColorLavenderBlush, + "lawngreen": ColorLawnGreen, + "lemonchiffon": ColorLemonChiffon, + "lightblue": ColorLightBlue, + "lightcoral": ColorLightCoral, + "lightcyan": ColorLightCyan, + "lightgoldenrodyellow": ColorLightGoldenrodYellow, + "lightgray": ColorLightGray, + "lightgreen": ColorLightGreen, + "lightpink": ColorLightPink, + "lightsalmon": ColorLightSalmon, + "lightseagreen": ColorLightSeaGreen, + "lightskyblue": ColorLightSkyBlue, + "lightslategray": ColorLightSlateGray, + "lightsteelblue": ColorLightSteelBlue, + "lightyellow": ColorLightYellow, + "limegreen": ColorLimeGreen, + "linen": ColorLinen, + "mediumaquamarine": ColorMediumAquamarine, + "mediumblue": ColorMediumBlue, + "mediumorchid": ColorMediumOrchid, + "mediumpurple": ColorMediumPurple, + "mediumseagreen": ColorMediumSeaGreen, + "mediumslateblue": ColorMediumSlateBlue, + "mediumspringgreen": ColorMediumSpringGreen, + "mediumturquoise": ColorMediumTurquoise, + "mediumvioletred": ColorMediumVioletRed, + "midnightblue": ColorMidnightBlue, + "mintcream": ColorMintCream, + "mistyrose": ColorMistyRose, + "moccasin": ColorMoccasin, + "navajowhite": ColorNavajoWhite, + "oldlace": ColorOldLace, + "olivedrab": ColorOliveDrab, + "orange": ColorOrange, + "orangered": ColorOrangeRed, + "orchid": ColorOrchid, + "palegoldenrod": ColorPaleGoldenrod, + "palegreen": ColorPaleGreen, + "paleturquoise": ColorPaleTurquoise, + "palevioletred": ColorPaleVioletRed, + "papayawhip": ColorPapayaWhip, + "peachpuff": ColorPeachPuff, + "peru": ColorPeru, + "pink": ColorPink, + "plum": ColorPlum, + "powderblue": ColorPowderBlue, + "rebeccapurple": ColorRebeccaPurple, + "rosybrown": ColorRosyBrown, + "royalblue": ColorRoyalBlue, + "saddlebrown": ColorSaddleBrown, + "salmon": ColorSalmon, + "sandybrown": ColorSandyBrown, + "seagreen": ColorSeaGreen, + "seashell": ColorSeashell, + "sienna": ColorSienna, + "skyblue": ColorSkyblue, + "slateblue": ColorSlateBlue, + "slategray": ColorSlateGray, + "snow": ColorSnow, + "springgreen": ColorSpringGreen, + "steelblue": ColorSteelBlue, + "tan": ColorTan, + "thistle": ColorThistle, + "tomato": ColorTomato, + "turquoise": ColorTurquoise, + "violet": ColorViolet, + "wheat": ColorWheat, + "whitesmoke": ColorWhiteSmoke, + "yellowgreen": ColorYellowGreen, + "grey": ColorGray, + "dimgrey": ColorDimGray, + "darkgrey": ColorDarkGray, + "darkslategrey": ColorDarkSlateGray, + "lightgrey": ColorLightGray, + "lightslategrey": ColorLightSlateGray, + "slategrey": ColorSlateGray, +} + +// Hex returns the color's hexadecimal RGB 24-bit value with each component +// consisting of a single byte, ala R << 16 | G << 8 | B. If the color +// is unknown or unset, -1 is returned. +func (c Color) Hex() int32 { + if c&ColorIsRGB != 0 { + return (int32(c) & 0xffffff) + } + if v, ok := ColorValues[c]; ok { + return v + } + return -1 +} + +// RGB returns the red, green, and blue components of the color, with +// each component represented as a value 0-255. In the event that the +// color cannot be broken up (not set usually), -1 is returned for each value. +func (c Color) RGB() (int32, int32, int32) { + v := c.Hex() + if v < 0 { + return -1, -1, -1 + } + return (v >> 16) & 0xff, (v >> 8) & 0xff, v & 0xff +} + +// NewRGBColor returns a new color with the given red, green, and blue values. +// Each value must be represented in the range 0-255. +func NewRGBColor(r, g, b int32) Color { + return NewHexColor(((r & 0xff) << 16) | ((g & 0xff) << 8) | (b & 0xff)) +} + +// NewHexColor returns a color using the given 24-bit RGB value. +func NewHexColor(v int32) Color { + return ColorIsRGB | Color(v) +} + +// GetColor creates a Color from a color name (W3C name). A hex value may +// be supplied as a string in the format "#ffffff". +func GetColor(name string) Color { + if c, ok := ColorNames[name]; ok { + return c + } + if len(name) == 7 && name[0] == '#' { + if v, e := strconv.ParseInt(name[1:], 16, 32); e == nil { + return NewHexColor(int32(v)) + } + } + return ColorDefault +} diff --git a/vendor/github.com/gdamore/tcell/colorfit.go b/vendor/github.com/gdamore/tcell/colorfit.go new file mode 100644 index 00000000..b7740b8a --- /dev/null +++ b/vendor/github.com/gdamore/tcell/colorfit.go @@ -0,0 +1,52 @@ +// Copyright 2016 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcell + +import ( + "github.com/lucasb-eyer/go-colorful" + "math" +) + +// FindColor attempts to find a given color, or the best match possible for it, +// from the palette given. This is an expensive operation, so results should +// be cached by the caller. +func FindColor(c Color, palette []Color) Color { + match := ColorDefault + dist := float64(0) + r, g, b := c.RGB() + c1 := colorful.Color{ + R: float64(r) / 255.0, + G: float64(g) / 255.0, + B: float64(b) / 255.0, + } + for _, d := range palette { + r, g, b = d.RGB() + c2 := colorful.Color{ + R: float64(r) / 255.0, + G: float64(g) / 255.0, + B: float64(b) / 255.0, + } + // CIE94 is more accurate, but really really expensive. + nd := c1.DistanceCIE76(c2) + if math.IsNaN(nd) { + nd = math.Inf(1) + } + if match == ColorDefault || nd < dist { + match = d + dist = nd + } + } + return match +} diff --git a/vendor/github.com/gdamore/tcell/console_stub.go b/vendor/github.com/gdamore/tcell/console_stub.go new file mode 100644 index 00000000..fda2f092 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/console_stub.go @@ -0,0 +1,23 @@ +// +build !windows + +// Copyright 2015 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcell + +// NewConsoleScreen returns a console based screen. This platform +// doesn't have support for any, so it returns nil and a suitable error. +func NewConsoleScreen() (Screen, error) { + return nil, ErrNoScreen +} diff --git a/vendor/github.com/gdamore/tcell/console_win.go b/vendor/github.com/gdamore/tcell/console_win.go new file mode 100644 index 00000000..e27bf6a3 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/console_win.go @@ -0,0 +1,1025 @@ +// +build windows + +// Copyright 2016 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcell + +import ( + "sync" + "syscall" + "unicode/utf16" + "unsafe" + "errors" +) + +type cScreen struct { + in syscall.Handle + out syscall.Handle + cancelflag syscall.Handle + scandone chan struct{} + evch chan Event + quit chan struct{} + curx int + cury int + style Style + clear bool + fini bool + + w int + h int + + oscreen consoleInfo + ocursor cursorInfo + oimode uint32 + oomode uint32 + cells CellBuffer + colors map[Color]Color + + sync.Mutex +} + +var winLock sync.Mutex + +var winPalette = []Color{ + ColorBlack, + ColorMaroon, + ColorGreen, + ColorNavy, + ColorOlive, + ColorPurple, + ColorTeal, + ColorSilver, + ColorGray, + ColorRed, + ColorLime, + ColorBlue, + ColorYellow, + ColorFuchsia, + ColorAqua, + ColorWhite, +} + +var winColors = map[Color]Color{ + ColorBlack: ColorBlack, + ColorMaroon: ColorMaroon, + ColorGreen: ColorGreen, + ColorNavy: ColorNavy, + ColorOlive: ColorOlive, + ColorPurple: ColorPurple, + ColorTeal: ColorTeal, + ColorSilver: ColorSilver, + ColorGray: ColorGray, + ColorRed: ColorRed, + ColorLime: ColorLime, + ColorBlue: ColorBlue, + ColorYellow: ColorYellow, + ColorFuchsia: ColorFuchsia, + ColorAqua: ColorAqua, + ColorWhite: ColorWhite, +} + +var k32 = syscall.NewLazyDLL("kernel32.dll") + +// We have to bring in the kernel32.dll directly, so we can get access to some +// system calls that the core Go API lacks. +// +// Note that Windows appends some functions with W to indicate that wide +// characters (Unicode) are in use. The documentation refers to them +// without this suffix, as the resolution is made via preprocessor. +var ( + procReadConsoleInput = k32.NewProc("ReadConsoleInputW") + procWaitForMultipleObjects = k32.NewProc("WaitForMultipleObjects") + procCreateEvent = k32.NewProc("CreateEventW") + procSetEvent = k32.NewProc("SetEvent") + procGetConsoleCursorInfo = k32.NewProc("GetConsoleCursorInfo") + procSetConsoleCursorInfo = k32.NewProc("SetConsoleCursorInfo") + procSetConsoleCursorPosition = k32.NewProc("SetConsoleCursorPosition") + procSetConsoleMode = k32.NewProc("SetConsoleMode") + procGetConsoleMode = k32.NewProc("GetConsoleMode") + procGetConsoleScreenBufferInfo = k32.NewProc("GetConsoleScreenBufferInfo") + procFillConsoleOutputAttribute = k32.NewProc("FillConsoleOutputAttribute") + procFillConsoleOutputCharacter = k32.NewProc("FillConsoleOutputCharacterW") + procSetConsoleWindowInfo = k32.NewProc("SetConsoleWindowInfo") + procSetConsoleScreenBufferSize = k32.NewProc("SetConsoleScreenBufferSize") + procSetConsoleTextAttribute = k32.NewProc("SetConsoleTextAttribute") +) + +const ( + w32Infinite = ^uintptr(0) + w32WaitObject0 = uintptr(0) +) + +// NewConsoleScreen returns a Screen for the Windows console associated +// with the current process. The Screen makes use of the Windows Console +// API to display content and read events. +func NewConsoleScreen() (Screen, error) { + return &cScreen{}, nil +} + +func (s *cScreen) Init() error { + s.evch = make(chan Event, 10) + s.quit = make(chan struct{}) + s.scandone = make(chan struct{}) + + in, e := syscall.Open("CONIN$", syscall.O_RDWR, 0) + if e != nil { + return e + } + s.in = in + out, e := syscall.Open("CONOUT$", syscall.O_RDWR, 0) + if e != nil { + syscall.Close(s.in) + return e + } + s.out = out + + cf, _, e := procCreateEvent.Call( + uintptr(0), + uintptr(1), + uintptr(0), + uintptr(0)) + if cf == uintptr(0) { + return e + } + s.cancelflag = syscall.Handle(cf) + + s.Lock() + + s.curx = -1 + s.cury = -1 + s.style = StyleDefault + s.getCursorInfo(&s.ocursor) + s.getConsoleInfo(&s.oscreen) + s.getOutMode(&s.oomode) + s.getInMode(&s.oimode) + s.resize() + + s.fini = false + s.setInMode(modeResizeEn) + s.setOutMode(0) + s.clearScreen(s.style) + s.hideCursor() + s.Unlock() + go s.scanInput() + + return nil +} + +func (s *cScreen) CharacterSet() string { + // We are always UTF-16LE on Windows + return "UTF-16LE" +} + +func (s *cScreen) EnableMouse() { + s.setInMode(modeResizeEn | modeMouseEn) +} + +func (s *cScreen) DisableMouse() { + s.setInMode(modeResizeEn) +} + +func (s *cScreen) Fini() { + s.Lock() + s.style = StyleDefault + s.curx = -1 + s.cury = -1 + s.fini = true + s.Unlock() + + s.setCursorInfo(&s.ocursor) + s.setInMode(s.oimode) + s.setOutMode(s.oomode) + s.setBufferSize(int(s.oscreen.size.x), int(s.oscreen.size.y)) + s.clearScreen(StyleDefault) + s.setCursorPos(0, 0) + procSetConsoleTextAttribute.Call( + uintptr(s.out), + uintptr(s.mapStyle(StyleDefault))) + + close(s.quit) + procSetEvent.Call(uintptr(s.cancelflag)) + // Block until scanInput returns; this prevents a race condition on Win 8+ + // which causes syscall.Close to block until another keypress is read. + <-s.scandone + syscall.Close(s.in) + syscall.Close(s.out) +} + +func (s *cScreen) PostEventWait(ev Event) { + s.evch <- ev +} + +func (s *cScreen) PostEvent(ev Event) error { + select { + case s.evch <- ev: + return nil + default: + return ErrEventQFull + } +} + +func (s *cScreen) PollEvent() Event { + select { + case <-s.quit: + return nil + case ev := <-s.evch: + return ev + } +} + +type cursorInfo struct { + size uint32 + visible uint32 +} + +type coord struct { + x int16 + y int16 +} + +func (c coord) uintptr() uintptr { + // little endian, put x first + return uintptr(c.x) | (uintptr(c.y) << 16) +} + +type rect struct { + left int16 + top int16 + right int16 + bottom int16 +} + +func (s *cScreen) showCursor() { + s.setCursorInfo(&cursorInfo{size: 100, visible: 1}) +} + +func (s *cScreen) hideCursor() { + s.setCursorInfo(&cursorInfo{size: 1, visible: 0}) +} + +func (s *cScreen) ShowCursor(x, y int) { + s.Lock() + if !s.fini { + s.curx = x + s.cury = y + } + s.doCursor() + s.Unlock() +} + +func (s *cScreen) doCursor() { + x, y := s.curx, s.cury + + if x < 0 || y < 0 || x >= s.w || y >= s.h { + s.setCursorPos(0, 0) + s.hideCursor() + } else { + s.setCursorPos(x, y) + s.showCursor() + } +} + +func (s *cScreen) HideCursor() { + s.ShowCursor(-1, -1) +} + +type charInfo struct { + ch uint16 + attr uint16 +} + +type inputRecord struct { + typ uint16 + _ uint16 + data [16]byte +} + +const ( + keyEvent uint16 = 1 + mouseEvent uint16 = 2 + resizeEvent uint16 = 4 + menuEvent uint16 = 8 // don't use + focusEvent uint16 = 16 // don't use +) + +type mouseRecord struct { + x int16 + y int16 + btns uint32 + mod uint32 + flags uint32 +} + +const ( + mouseDoubleClick uint32 = 0x2 + mouseHWheeled uint32 = 0x8 + mouseVWheeled uint32 = 0x4 + mouseMoved uint32 = 0x1 +) + +type resizeRecord struct { + x int16 + y int16 +} + +type keyRecord struct { + isdown int32 + repeat uint16 + kcode uint16 + scode uint16 + ch uint16 + mod uint32 +} + +const ( + // Constants per Microsoft. We don't put the modifiers + // here. + vkCancel = 0x03 + vkBack = 0x08 // Backspace + vkTab = 0x09 + vkClear = 0x0c + vkReturn = 0x0d + vkPause = 0x13 + vkEscape = 0x1b + vkSpace = 0x20 + vkPrior = 0x21 // PgUp + vkNext = 0x22 // PgDn + vkEnd = 0x23 + vkHome = 0x24 + vkLeft = 0x25 + vkUp = 0x26 + vkRight = 0x27 + vkDown = 0x28 + vkPrint = 0x2a + vkPrtScr = 0x2c + vkInsert = 0x2d + vkDelete = 0x2e + vkHelp = 0x2f + vkF1 = 0x70 + vkF2 = 0x71 + vkF3 = 0x72 + vkF4 = 0x73 + vkF5 = 0x74 + vkF6 = 0x75 + vkF7 = 0x76 + vkF8 = 0x77 + vkF9 = 0x78 + vkF10 = 0x79 + vkF11 = 0x7a + vkF12 = 0x7b + vkF13 = 0x7c + vkF14 = 0x7d + vkF15 = 0x7e + vkF16 = 0x7f + vkF17 = 0x80 + vkF18 = 0x81 + vkF19 = 0x82 + vkF20 = 0x83 + vkF21 = 0x84 + vkF22 = 0x85 + vkF23 = 0x86 + vkF24 = 0x87 +) + +var vkKeys = map[uint16]Key{ + vkCancel: KeyCancel, + vkBack: KeyBackspace, + vkTab: KeyTab, + vkClear: KeyClear, + vkPause: KeyPause, + vkPrint: KeyPrint, + vkPrtScr: KeyPrint, + vkPrior: KeyPgUp, + vkNext: KeyPgDn, + vkReturn: KeyEnter, + vkEnd: KeyEnd, + vkHome: KeyHome, + vkLeft: KeyLeft, + vkUp: KeyUp, + vkRight: KeyRight, + vkDown: KeyDown, + vkInsert: KeyInsert, + vkDelete: KeyDelete, + vkHelp: KeyHelp, + vkF1: KeyF1, + vkF2: KeyF2, + vkF3: KeyF3, + vkF4: KeyF4, + vkF5: KeyF5, + vkF6: KeyF6, + vkF7: KeyF7, + vkF8: KeyF8, + vkF9: KeyF9, + vkF10: KeyF10, + vkF11: KeyF11, + vkF12: KeyF12, + vkF13: KeyF13, + vkF14: KeyF14, + vkF15: KeyF15, + vkF16: KeyF16, + vkF17: KeyF17, + vkF18: KeyF18, + vkF19: KeyF19, + vkF20: KeyF20, + vkF21: KeyF21, + vkF22: KeyF22, + vkF23: KeyF23, + vkF24: KeyF24, +} + +// NB: All Windows platforms are little endian. We assume this +// never, ever change. The following code is endian safe. and does +// not use unsafe pointers. +func getu32(v []byte) uint32 { + return uint32(v[0]) + (uint32(v[1]) << 8) + (uint32(v[2]) << 16) + (uint32(v[3]) << 24) +} +func geti32(v []byte) int32 { + return int32(getu32(v)) +} +func getu16(v []byte) uint16 { + return uint16(v[0]) + (uint16(v[1]) << 8) +} +func geti16(v []byte) int16 { + return int16(getu16(v)) +} + +// Convert windows dwControlKeyState to modifier mask +func mod2mask(cks uint32) ModMask { + mm := ModNone + // Left or right control + if (cks & (0x0008 | 0x0004)) != 0 { + mm |= ModCtrl + } + // Left or right alt + if (cks & (0x0002 | 0x0001)) != 0 { + mm |= ModAlt + } + // Any shift + if (cks & 0x0010) != 0 { + mm |= ModShift + } + return mm +} + +func mrec2btns(mbtns, flags uint32) ButtonMask { + btns := ButtonNone + if mbtns&0x1 != 0 { + btns |= Button1 + } + if mbtns&0x2 != 0 { + btns |= Button2 + } + if mbtns&0x4 != 0 { + btns |= Button3 + } + if mbtns&0x8 != 0 { + btns |= Button4 + } + if mbtns&0x10 != 0 { + btns |= Button5 + } + if mbtns&0x20 != 0 { + btns |= Button6 + } + if mbtns&0x40 != 0 { + btns |= Button7 + } + if mbtns&0x80 != 0 { + btns |= Button8 + } + + if flags&mouseVWheeled != 0 { + if mbtns&0x80000000 == 0 { + btns |= WheelUp + } else { + btns |= WheelDown + } + } + if flags&mouseHWheeled != 0 { + if mbtns&0x80000000 == 0 { + btns |= WheelRight + } else { + btns |= WheelLeft + } + } + return btns +} + +func (s *cScreen) getConsoleInput() error { + // cancelFlag comes first as WaitForMultipleObjects returns the lowest index + // in the event that both events are signalled. + waitObjects := []syscall.Handle{s.cancelflag, s.in} + // As arrays are contiguous in memory, a pointer to the first object is the + // same as a pointer to the array itself. + pWaitObjects := unsafe.Pointer(&waitObjects[0]) + + rv, _, er := procWaitForMultipleObjects.Call( + uintptr(len(waitObjects)), + uintptr(pWaitObjects), + uintptr(0), + w32Infinite) + // WaitForMultipleObjects returns WAIT_OBJECT_0 + the index. + switch rv { + case w32WaitObject0: // s.cancelFlag + return errors.New("cancelled") + case w32WaitObject0 + 1: // s.in + rec := &inputRecord{} + var nrec int32 + rv, _, er := procReadConsoleInput.Call( + uintptr(s.in), + uintptr(unsafe.Pointer(rec)), + uintptr(1), + uintptr(unsafe.Pointer(&nrec))) + if rv == 0 { + return er + } + if nrec != 1 { + return nil + } + switch rec.typ { + case keyEvent: + krec := &keyRecord{} + krec.isdown = geti32(rec.data[0:]) + krec.repeat = getu16(rec.data[4:]) + krec.kcode = getu16(rec.data[6:]) + krec.scode = getu16(rec.data[8:]) + krec.ch = getu16(rec.data[10:]) + krec.mod = getu32(rec.data[12:]) + + if krec.isdown == 0 || krec.repeat < 1 { + // its a key release event, ignore it + return nil + } + if krec.ch != 0 { + // synthesized key code + for krec.repeat > 0 { + s.PostEvent(NewEventKey(KeyRune, rune(krec.ch), + mod2mask(krec.mod))) + krec.repeat-- + } + return nil + } + key := KeyNUL // impossible on Windows + ok := false + if key, ok = vkKeys[krec.kcode]; !ok { + return nil + } + for krec.repeat > 0 { + s.PostEvent(NewEventKey(key, rune(krec.ch), + mod2mask(krec.mod))) + krec.repeat-- + } + + case mouseEvent: + var mrec mouseRecord + mrec.x = geti16(rec.data[0:]) + mrec.y = geti16(rec.data[2:]) + mrec.btns = getu32(rec.data[4:]) + mrec.mod = getu32(rec.data[8:]) + mrec.flags = getu32(rec.data[12:]) + btns := mrec2btns(mrec.btns, mrec.flags) + // we ignore double click, events are delivered normally + s.PostEvent(NewEventMouse(int(mrec.x), int(mrec.y), btns, + mod2mask(mrec.mod))) + + case resizeEvent: + var rrec resizeRecord + rrec.x = geti16(rec.data[0:]) + rrec.y = geti16(rec.data[2:]) + s.PostEvent(NewEventResize(int(rrec.x), int(rrec.y))) + + default: + } + default: + return er + } + + return nil +} + +func (s *cScreen) scanInput() { + for { + if e := s.getConsoleInput(); e != nil { + close(s.scandone) + return + } + } +} + +// Windows console can display 8 characters, in either low or high intensity +func (s *cScreen) Colors() int { + return 16 +} + +var vgaColors = map[Color]uint16{ + ColorBlack: 0, + ColorMaroon: 0x4, + ColorGreen: 0x2, + ColorNavy: 0x1, + ColorOlive: 0x6, + ColorPurple: 0x5, + ColorTeal: 0x3, + ColorSilver: 0x7, + ColorGrey: 0x8, + ColorRed: 0xc, + ColorLime: 0xa, + ColorBlue: 0x9, + ColorYellow: 0xe, + ColorFuchsia: 0xd, + ColorAqua: 0xb, + ColorWhite: 0xf, +} + +// Windows uses RGB signals +func mapColor2RGB(c Color) uint16 { + winLock.Lock() + if v, ok := winColors[c]; ok { + c = v + } else { + v = FindColor(c, winPalette) + winColors[c] = v + c = v + } + winLock.Unlock() + + if vc, ok := vgaColors[c]; ok { + return vc + } + return 0 +} + +// Map a tcell style to Windows attributes +func (s *cScreen) mapStyle(style Style) uint16 { + f, b, a := style.Decompose() + fa := s.oscreen.attrs & 0xf + ba := (s.oscreen.attrs) >> 4 & 0xf + if f != ColorDefault { + fa = mapColor2RGB(f) + } + if b != ColorDefault { + ba = mapColor2RGB(b) + } + var attr uint16 + // We simulate reverse by doing the color swap ourselves. + // Apparently windows cannot really do this except in DBCS + // views. + if a&AttrReverse != 0 { + attr = ba + attr |= (fa << 4) + } else { + attr = fa + attr |= (ba << 4) + } + if a&AttrBold != 0 { + attr |= 0x8 + } + if a&AttrDim != 0 { + attr &^= 0x8 + } + if a&AttrUnderline != 0 { + // Best effort -- doesn't seem to work though. + attr |= 0x8000 + } + // Blink is unsupported + return attr +} + +func (s *cScreen) SetCell(x, y int, style Style, ch ...rune) { + if len(ch) > 0 { + s.SetContent(x, y, ch[0], ch[1:], style) + } else { + s.SetContent(x, y, ' ', nil, style) + } +} + +func (s *cScreen) SetContent(x, y int, mainc rune, combc []rune, style Style) { + s.Lock() + if !s.fini { + s.cells.SetContent(x, y, mainc, combc, style) + } + s.Unlock() +} + +func (s *cScreen) GetContent(x, y int) (rune, []rune, Style, int) { + s.Lock() + mainc, combc, style, width := s.cells.GetContent(x, y) + s.Unlock() + return mainc, combc, style, width +} + +func (s *cScreen) writeString(x, y int, style Style, ch []uint16) { + // we assume the caller has hidden the cursor + if len(ch) == 0 { + return + } + nw := uint32(len(ch)) + procSetConsoleTextAttribute.Call( + uintptr(s.out), + uintptr(s.mapStyle(style))) + s.setCursorPos(x, y) + syscall.WriteConsole(s.out, &ch[0], nw, &nw, nil) +} + +func (s *cScreen) draw() { + // allocate a scratch line bit enough for no combining chars. + // if you have combining characters, you may pay for extra allocs. + if s.clear { + s.clearScreen(s.style) + s.clear = false + s.cells.Invalidate() + } + buf := make([]uint16, 0, s.w) + wcs := buf[:] + lstyle := Style(-1) // invalid attribute + + lx, ly := -1, -1 + ra := make([]rune, 1) + + for y := 0; y < int(s.h); y++ { + for x := 0; x < int(s.w); x++ { + mainc, combc, style, width := s.cells.GetContent(x, y) + dirty := s.cells.Dirty(x, y) + if style == StyleDefault { + style = s.style + } + + if !dirty || style != lstyle { + // write out any data queued thus far + // because we are going to skip over some + // cells, or because we need to change styles + s.writeString(lx, ly, lstyle, wcs) + wcs = buf[0:0] + lstyle = Style(-1) + if !dirty { + continue + } + } + if x > s.w-width { + mainc = ' ' + combc = nil + width = 1 + } + if len(wcs) == 0 { + lstyle = style + lx = x + ly = y + } + ra[0] = mainc + wcs = append(wcs, utf16.Encode(ra)...) + if len(combc) != 0 { + wcs = append(wcs, utf16.Encode(combc)...) + } + s.cells.SetDirty(x, y, false) + x += width - 1 + } + s.writeString(lx, ly, lstyle, wcs) + wcs = buf[0:0] + lstyle = Style(-1) + } +} + +func (s *cScreen) Show() { + s.Lock() + if !s.fini { + s.hideCursor() + s.resize() + s.draw() + s.doCursor() + } + s.Unlock() +} + +func (s *cScreen) Sync() { + s.Lock() + if !s.fini { + s.cells.Invalidate() + s.hideCursor() + s.resize() + s.draw() + s.doCursor() + } + s.Unlock() +} + +type consoleInfo struct { + size coord + pos coord + attrs uint16 + win rect + maxsz coord +} + +func (s *cScreen) getConsoleInfo(info *consoleInfo) { + procGetConsoleScreenBufferInfo.Call( + uintptr(s.out), + uintptr(unsafe.Pointer(info))) +} + +func (s *cScreen) getCursorInfo(info *cursorInfo) { + procGetConsoleCursorInfo.Call( + uintptr(s.out), + uintptr(unsafe.Pointer(info))) +} + +func (s *cScreen) setCursorInfo(info *cursorInfo) { + procSetConsoleCursorInfo.Call( + uintptr(s.out), + uintptr(unsafe.Pointer(info))) +} + +func (s *cScreen) setCursorPos(x, y int) { + procSetConsoleCursorPosition.Call( + uintptr(s.out), + coord{int16(x), int16(y)}.uintptr()) +} + +func (s *cScreen) setBufferSize(x, y int) { + procSetConsoleScreenBufferSize.Call( + uintptr(s.out), + coord{int16(x), int16(y)}.uintptr()) +} + +func (s *cScreen) Size() (int, int) { + s.Lock() + w, h := s.w, s.h + s.Unlock() + + return w, h +} + +func (s *cScreen) resize() { + info := consoleInfo{} + s.getConsoleInfo(&info) + + w := int((info.win.right - info.win.left) + 1) + h := int((info.win.bottom - info.win.top) + 1) + + if s.w == w && s.h == h { + return + } + + s.cells.Resize(w, h) + s.w = w + s.h = h + + r := rect{0, 0, int16(w - 1), int16(h - 1)} + procSetConsoleWindowInfo.Call( + uintptr(s.out), + uintptr(1), + uintptr(unsafe.Pointer(&r))) + + s.setBufferSize(w, h) + + s.PostEvent(NewEventResize(w, h)) +} + +func (s *cScreen) Clear() { + s.Fill(' ', s.style) +} + +func (s *cScreen) Fill(r rune, style Style) { + s.Lock() + if !s.fini { + s.cells.Fill(r, style) + s.clear = true + } + s.Unlock() +} + +func (s *cScreen) clearScreen(style Style) { + pos := coord{0, 0} + attr := s.mapStyle(style) + x, y := s.w, s.h + scratch := uint32(0) + count := uint32(x * y) + + procFillConsoleOutputAttribute.Call( + uintptr(s.out), + uintptr(attr), + uintptr(count), + pos.uintptr(), + uintptr(unsafe.Pointer(&scratch))) + procFillConsoleOutputCharacter.Call( + uintptr(s.out), + uintptr(' '), + uintptr(count), + pos.uintptr(), + uintptr(unsafe.Pointer(&scratch))) +} + +const ( + modeMouseEn uint32 = 0x0010 + modeResizeEn uint32 = 0x0008 + modeWrapEOL uint32 = 0x0002 + modeCooked uint32 = 0x0001 +) + +func (s *cScreen) setInMode(mode uint32) error { + rv, _, err := procSetConsoleMode.Call( + uintptr(s.in), + uintptr(mode)) + if rv == 0 { + return err + } + return nil +} + +func (s *cScreen) setOutMode(mode uint32) error { + rv, _, err := procSetConsoleMode.Call( + uintptr(s.out), + uintptr(mode)) + if rv == 0 { + return err + } + return nil +} + +func (s *cScreen) getInMode(v *uint32) { + procGetConsoleMode.Call( + uintptr(s.in), + uintptr(unsafe.Pointer(v))) +} + +func (s *cScreen) getOutMode(v *uint32) { + procGetConsoleMode.Call( + uintptr(s.out), + uintptr(unsafe.Pointer(v))) +} + +func (s *cScreen) SetStyle(style Style) { + s.Lock() + s.style = style + s.Unlock() +} + +// No fallback rune support, since we have Unicode. Yay! + +func (s *cScreen) RegisterRuneFallback(r rune, subst string) { +} + +func (s *cScreen) UnregisterRuneFallback(r rune) { +} + +func (s *cScreen) CanDisplay(r rune, checkFallbacks bool) bool { + // We presume we can display anything -- we're Unicode. + // (Sadly this not precisely true. Combinings are especially + // poorly supported under Windows.) + return true +} + +func (s *cScreen) HasMouse() bool { + return true +} + +func (s *cScreen) Resize(int, int, int, int) {} + +func (s *cScreen) HasKey(k Key) bool { + // Microsoft has codes for some keys, but they are unusual, + // so we don't include them. We include all the typical + // 101, 105 key layout keys. + valid := map[Key]bool{ + KeyBackspace: true, + KeyTab: true, + KeyEscape: true, + KeyPause: true, + KeyPrint: true, + KeyPgUp: true, + KeyPgDn: true, + KeyEnter: true, + KeyEnd: true, + KeyHome: true, + KeyLeft: true, + KeyUp: true, + KeyRight: true, + KeyDown: true, + KeyInsert: true, + KeyDelete: true, + KeyF1: true, + KeyF2: true, + KeyF3: true, + KeyF4: true, + KeyF5: true, + KeyF6: true, + KeyF7: true, + KeyF8: true, + KeyF9: true, + KeyF10: true, + KeyF11: true, + KeyF12: true, + KeyRune: true, + } + + return valid[k] +} diff --git a/vendor/github.com/gdamore/tcell/database.json b/vendor/github.com/gdamore/tcell/database.json new file mode 100644 index 00000000..2769591a --- /dev/null +++ b/vendor/github.com/gdamore/tcell/database.json @@ -0,0 +1,1351 @@ +{"name":"rxvt-unicode","cols":80,"lines":24,"colors":88,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1049h","rmcup":"\u001b[r\u001b[?1049l","cnorm":"\u001b[?12l\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","setaf":"\u001b[38;5;%p1%dm","setbg":"\u001b[48;5;%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[7~","kend":"\u001b[8~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~-A.B+C,D0EhFiG","smacs":"\u001b(0","rmacs":"\u001b(B","kRIT":"\u001b[c","kLFT":"\u001b[d","kHOM":"\u001b[7$","kEND":"\u001b[8$","_setfgbg":"\u001b[38;5;%p1%d;48;5;%p2%dm","_kscu1":"\u001b[a","_kscud1":"\u001b[b","_kccu1":"\u001b[Oa","_kccud1":"\u001b[Ob","_kccuf1":"\u001b[Oc","_kccub1":"\u001b[Od","_kchome":"\u001b[7^","_kcend":"\u001b[8^"} +{"name":"rxvt-unicode-256color","cols":80,"lines":24,"colors":256,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1049h","rmcup":"\u001b[r\u001b[?1049l","cnorm":"\u001b[?12l\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","setaf":"\u001b[38;5;%p1%dm","setbg":"\u001b[48;5;%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[7~","kend":"\u001b[8~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~-A.B+C,D0EhFiG","smacs":"\u001b(0","rmacs":"\u001b(B","kRIT":"\u001b[c","kLFT":"\u001b[d","kHOM":"\u001b[7$","kEND":"\u001b[8$","_setfgbg":"\u001b[38;5;%p1%d;48;5;%p2%dm","_kscu1":"\u001b[a","_kscud1":"\u001b[b","_kccu1":"\u001b[Oa","_kccud1":"\u001b[Ob","_kccuf1":"\u001b[Oc","_kccub1":"\u001b[Od","_kchome":"\u001b[7^","_kcend":"\u001b[8^"} +{"name":"Eterm","aliases":["Eterm-color"],"cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[23$","kf22":"\u001b[24$","kf23":"\u001b[11^","kf24":"\u001b[12^","kf25":"\u001b[13^","kf26":"\u001b[14^","kf27":"\u001b[15^","kf28":"\u001b[17^","kf29":"\u001b[18^","kf30":"\u001b[19^","kf31":"\u001b[20^","kf32":"\u001b[21^","kf33":"\u001b[23^","kf34":"\u001b[24^","kf35":"\u001b[25^","kf36":"\u001b[26^","kf37":"\u001b[28^","kf38":"\u001b[29^","kf39":"\u001b[31^","kf40":"\u001b[32^","kf41":"\u001b[33^","kf42":"\u001b[34^","kf43":"\u001b[23@","kf44":"\u001b[24@","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[7~","kend":"\u001b[8~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0","kRIT":"\u001b[c","kLFT":"\u001b[d","kHOM":"\u001b[7$","kEND":"\u001b[8$","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kscu1":"\u001b[a","_kscud1":"\u001b[b","_kccu1":"\u001b[Oa","_kccud1":"\u001b[Ob","_kccuf1":"\u001b[Oc","_kccub1":"\u001b[Od","_kchome":"\u001b[7^","_kcend":"\u001b[8^"} +{"name":"Eterm-256color","cols":80,"lines":24,"colors":256,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[%?%p1%{8}%\u003c%t3%p1%d%e%p1%{16}%\u003c%t9%p1%{8}%-%d%e38;5;%p1%d%;m","setbg":"\u001b[%?%p1%{8}%\u003c%t4%p1%d%e%p1%{16}%\u003c%t10%p1%{8}%-%d%e48;5;%p1%d%;m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[23$","kf22":"\u001b[24$","kf23":"\u001b[11^","kf24":"\u001b[12^","kf25":"\u001b[13^","kf26":"\u001b[14^","kf27":"\u001b[15^","kf28":"\u001b[17^","kf29":"\u001b[18^","kf30":"\u001b[19^","kf31":"\u001b[20^","kf32":"\u001b[21^","kf33":"\u001b[23^","kf34":"\u001b[24^","kf35":"\u001b[25^","kf36":"\u001b[26^","kf37":"\u001b[28^","kf38":"\u001b[29^","kf39":"\u001b[31^","kf40":"\u001b[32^","kf41":"\u001b[33^","kf42":"\u001b[34^","kf43":"\u001b[23@","kf44":"\u001b[24@","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[7~","kend":"\u001b[8~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0","kRIT":"\u001b[c","kLFT":"\u001b[d","kHOM":"\u001b[7$","kEND":"\u001b[8$","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t3%p1%d%e%p1%{16}%\u003c%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%\u003c%t4%p2%d%e%p2%{16}%\u003c%t10%p2%{8}%-%d%e48;5;%p2%d%;m","_kscu1":"\u001b[a","_kscud1":"\u001b[b","_kccu1":"\u001b[Oa","_kccud1":"\u001b[Ob","_kccuf1":"\u001b[Oc","_kccub1":"\u001b[Od","_kchome":"\u001b[7^","_kcend":"\u001b[8^"} +{"name":"Eterm-88color","cols":80,"lines":24,"colors":88,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[%?%p1%{8}%\u003c%t3%p1%d%e%p1%{16}%\u003c%t9%p1%{8}%-%d%e38;5;%p1%d%;m","setbg":"\u001b[%?%p1%{8}%\u003c%t4%p1%d%e%p1%{16}%\u003c%t10%p1%{8}%-%d%e48;5;%p1%d%;m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[23$","kf22":"\u001b[24$","kf23":"\u001b[11^","kf24":"\u001b[12^","kf25":"\u001b[13^","kf26":"\u001b[14^","kf27":"\u001b[15^","kf28":"\u001b[17^","kf29":"\u001b[18^","kf30":"\u001b[19^","kf31":"\u001b[20^","kf32":"\u001b[21^","kf33":"\u001b[23^","kf34":"\u001b[24^","kf35":"\u001b[25^","kf36":"\u001b[26^","kf37":"\u001b[28^","kf38":"\u001b[29^","kf39":"\u001b[31^","kf40":"\u001b[32^","kf41":"\u001b[33^","kf42":"\u001b[34^","kf43":"\u001b[23@","kf44":"\u001b[24@","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[7~","kend":"\u001b[8~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0","kRIT":"\u001b[c","kLFT":"\u001b[d","kHOM":"\u001b[7$","kEND":"\u001b[8$","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t3%p1%d%e%p1%{16}%\u003c%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%\u003c%t4%p2%d%e%p2%{16}%\u003c%t10%p2%{8}%-%d%e48;5;%p2%d%;m","_kscu1":"\u001b[a","_kscud1":"\u001b[b","_kccu1":"\u001b[Oa","_kccud1":"\u001b[Ob","_kccuf1":"\u001b[Oc","_kccub1":"\u001b[Od","_kchome":"\u001b[7^","_kcend":"\u001b[8^"} +{"name":"NCR260VT300WPP","aliases":["ncr260vt300wpp"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c20\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f$\u003c20\u003e","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c30\u003e","cub1":"\u001b[D$\u003c5\u003e","cuu1":"\u001b[A$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[31~","kf22":"\u001b[32~","kf23":"\u001b[33~","kf24":"\u001b[34~","kf25":"\u001b[35~","kf26":"\u001b[1~","kf27":"\u001b[2~","kf28":"\u001b[3~","kf29":"\u001b[4~","kf30":"\u001b[5~","kf31":"\u001b[6~","kf32":"\u001b[7~","kf33":"\u001b[8~","kf34":"\u001b[9~","kf35":"\u001b[10~","kich":"\u001b[2~","kdch":"\u001b[4~","khome":"\u001b[H","kend":"\u001b[1~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e$\u003c20\u003e","rmacs":"\u000f$\u003c20\u003e"} +{"name":"aaa","aliases":["aaa-30","ambas","ambassador"],"cols":80,"lines":30,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[H\u001b[J$\u003c156\u003e\u001b[30;0;0;30p","rmcup":"\u001b[60;0;0;30p\u001b[30;1H\u001b[K","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"aaa+unk","aliases":["aaa-unk"],"cols":80,"lines":-1,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"aaa-18","cols":80,"lines":18,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[18;0;0;18p","rmcup":"\u001b[60;0;0;18p\u001b[60;1H\u001b[K","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"aaa-18-rv","cols":80,"lines":18,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[18;0;0;18p","rmcup":"\u001b[60;0;0;18p\u001b[60;1H\u001b[K","sgr0":"\u001b[7m\u000e","smul":"\u001b[4;7m","bold":"\u001b[1;7m","blink":"\u001b[5;7m","rev":"\u001b[m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"aaa-20","cols":80,"lines":20,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[20;0;0;20p","rmcup":"\u001b[60;0;0;20p\u001b[60;1H\u001b[K","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"aaa-22","cols":80,"lines":22,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[22;0;0;22p","rmcup":"\u001b[60;0;0;22p\u001b[60;1H\u001b[K","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"aaa-24","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[24;0;0;24p","rmcup":"\u001b[60;0;0;24p\u001b[60;1H\u001b[K","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"aaa-24-rv","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[24;0;0;24p","rmcup":"\u001b[60;0;0;24p\u001b[60;1H\u001b[K","sgr0":"\u001b[7m\u000e","smul":"\u001b[4;7m","bold":"\u001b[1;7m","blink":"\u001b[5;7m","rev":"\u001b[m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"aaa-26","cols":80,"lines":26,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[H\u001b[J$\u003c156\u003e\u001b[26;0;0;26p","rmcup":"\u001b[60;0;0;26p\u001b[26;1H\u001b[K","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"aaa-28","cols":80,"lines":28,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[H\u001b[J$\u003c156\u003e\u001b[28;0;0;28p","rmcup":"\u001b[60;0;0;28p\u001b[28;1H\u001b[K","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"aaa-30-ctxt","aliases":["aaa-ctxt"],"cols":80,"lines":30,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[30;0;0;30p","rmcup":"\u001b[60;0;0;30p\u001b[60;1H\u001b[K","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"aaa-30-rv","aliases":["aaa-rv"],"cols":80,"lines":30,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[H\u001b[J$\u003c156\u003e\u001b[30;0;0;30p","rmcup":"\u001b[60;0;0;30p\u001b[30;1H\u001b[K","sgr0":"\u001b[7m\u000e","smul":"\u001b[4;7m","bold":"\u001b[1;7m","blink":"\u001b[5;7m","rev":"\u001b[m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"aaa-30-rv-ctxt","aliases":["aaa-rv-ctxt"],"cols":80,"lines":30,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[30;0;0;30p","rmcup":"\u001b[60;0;0;30p\u001b[60;1H\u001b[K","sgr0":"\u001b[7m\u000e","smul":"\u001b[4;7m","bold":"\u001b[1;7m","blink":"\u001b[5;7m","rev":"\u001b[m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"aaa-30-s","aliases":["aaa-s"],"cols":80,"lines":29,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[H\u001b[J$\u003c156\u003e\u001b[30;1;0;30p\u001b[30;1H\u001b[K","rmcup":"\u001b[60;1;0;30p\u001b[29;1H\u001b[K","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"aaa-30-s-rv","aliases":["aaa-s-rv"],"cols":80,"lines":29,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[H\u001b[J$\u003c156\u003e\u001b[30;1;0;30p\u001b[30;1H\u001b[K","rmcup":"\u001b[60;1;0;30p\u001b[29;1H\u001b[K","sgr0":"\u001b[7m\u000e","smul":"\u001b[4;7m","bold":"\u001b[1;7m","blink":"\u001b[5;7m","rev":"\u001b[m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"aaa-36","cols":80,"lines":36,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[H\u001b[J$\u003c156\u003e\u001b[36;0;0;36p","rmcup":"\u001b[60;0;0;36p\u001b[36;1H\u001b[K","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"aaa-36-rv","cols":80,"lines":36,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[H\u001b[J$\u003c156\u003e\u001b[36;0;0;36p","rmcup":"\u001b[60;0;0;36p\u001b[36;1H\u001b[K","sgr0":"\u001b[7m\u000e","smul":"\u001b[4;7m","bold":"\u001b[1;7m","blink":"\u001b[5;7m","rev":"\u001b[m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"aaa-40","cols":80,"lines":40,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[H\u001b[J$\u003c156\u003e\u001b[40;0;0;40p","rmcup":"\u001b[60;0;0;40p\u001b[40;1H\u001b[K","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"aaa-40-rv","cols":80,"lines":40,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[H\u001b[J$\u003c156\u003e\u001b[40;0;0;40p","rmcup":"\u001b[60;0;0;40p\u001b[40;1H\u001b[K","sgr0":"\u001b[7m\u000e","smul":"\u001b[4;7m","bold":"\u001b[1;7m","blink":"\u001b[5;7m","rev":"\u001b[m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"aaa-48","cols":80,"lines":48,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[H\u001b[J$\u003c156\u003e\u001b[48;0;0;48p","rmcup":"\u001b[60;0;0;48p\u001b[48;1H\u001b[K","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"aaa-48-rv","cols":80,"lines":48,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[H\u001b[J$\u003c156\u003e\u001b[48;0;0;48p","rmcup":"\u001b[60;0;0;48p\u001b[48;1H\u001b[K","sgr0":"\u001b[7m\u000e","smul":"\u001b[4;7m","bold":"\u001b[1;7m","blink":"\u001b[5;7m","rev":"\u001b[m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"aaa-60","cols":80,"lines":60,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"aaa-60-dec-rv","cols":80,"lines":59,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","sgr0":"\u001b[7m\u000e","smul":"\u001b[4;7m","bold":"\u001b[1;7m","blink":"\u001b[5;7m","rev":"\u001b[m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J","acsc":"aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}","smacs":"\u000f","rmacs":"\u000e","enacs":"\u001b(0"} +{"name":"aaa-60-rv","cols":80,"lines":60,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","sgr0":"\u001b[7m\u000e","smul":"\u001b[4;7m","bold":"\u001b[1;7m","blink":"\u001b[5;7m","rev":"\u001b[m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"aaa-60-s","cols":80,"lines":59,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"aaa-60-s-rv","cols":80,"lines":59,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","sgr0":"\u001b[7m\u000e","smul":"\u001b[4;7m","bold":"\u001b[1;7m","blink":"\u001b[5;7m","rev":"\u001b[m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"aaa-db","cols":80,"lines":30,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[H\u001b[J$\u003c156\u003e\u001b[30;0;0;30p","rmcup":"\u001b[60;0;0;30p\u001b[30;1H\u001b[K","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"aaa-s-ctxt","aliases":["aaa-30-s-ctxt"],"cols":80,"lines":29,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[30;1H\u001b[K\u001b[30;1;0;30p","rmcup":"\u001b[60;1;0;30p\u001b[59;1H\u001b[K","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"aaa-s-rv-ctxt","aliases":["aaa-30-s-rv-ct"],"cols":80,"lines":29,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[30;1H\u001b[K\u001b[30;1;0;30p","rmcup":"\u001b[60;1;0;30p\u001b[59;1H\u001b[K","sgr0":"\u001b[7m\u000e","smul":"\u001b[4;7m","bold":"\u001b[1;7m","blink":"\u001b[5;7m","rev":"\u001b[m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"abm80","cols":80,"lines":24,"clear":"\u001b\u001c","cup":"\u001b\u0011%p2%' '%+%c%p1%' '%+%c","cub1":"\u0008","cuu1":"\u001b\u000c","pad":"\u0000"} +{"name":"abm85","cols":80,"lines":24,"clear":"\u001b*","smul":"\u001bl","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"abm85e","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*","sgr0":"\u001b(\u001bk","smul":"\u001bl","rev":"\u001bj","dim":"\u001b)","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"abm85h","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*","cnorm":"\u001b.4","sgr0":"\u001b(\u001bG0","smul":"\u001bG8","rev":"\u001bG4","dim":"\u001b)","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"abm85h-old","aliases":["o85h","oabm85h"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*","sgr0":"\u001b(\u001bk","smul":"\u001bl","rev":"\u001bj","dim":"\u001b)","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"act4","aliases":["microterm"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c$\u003c12/\u003e","cup":"\u0014%p1%{24}%+%c%p2%p2%?%'/'%\u003e%t%'0'%+%;%'P'%+%c","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","kcuu1":"\u001a","kcud1":"\u000b","kcub1":"\u0008","kcuf1":"\u0018"} +{"name":"act5","aliases":["microterm5"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c$\u003c12/\u003e","cup":"\u0014%p1%{24}%+%c%p2%p2%?%'/'%\u003e%t%'0'%+%;%'P'%+%c","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","kcuu1":"\u001a","kcud1":"\u000b","kcub1":"\u0008","kcuf1":"\u0018"} +{"name":"adds980","aliases":["a980"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c$\u003c1\u003e\u000b@","sgr0":"\u000f","cup":"\u000b%p1%'@'%+%c\u001b\u0005%p2%2d","cub1":"\u0008","pad":"\u0000","kf1":"\u001b1","kf2":"\u001b2","kf3":"\u001b3","kf4":"\u001b4","kf5":"\u001b5","kf6":"\u001b6","kf7":"\u001b7","kf8":"\u001b8","kf9":"\u001b9"} +{"name":"adm11","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*","sgr0":"\u001bG0","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"adm1178","aliases":["1178"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b+","sgr0":"\u001b)","smul":"\u001bG1","bold":"\u001b(","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"","kbs":"\u0008","kcud1":"\n","kcub1":"\u0008"} +{"name":"adm12","cols":80,"lines":24,"bell":"\u0007","clear":"\u001a","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kf1":"\u00011\r","kf2":"\u00012\r","kf3":"\u00013\r","kf4":"\u00014\r","kf5":"\u00015\r","kf6":"\u00016\r","kf7":"\u00017\r","kf8":"\u00018\r","kf9":"\u00019\r","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"adm1a","aliases":["adm1"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b;$\u003c1\u003e","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000"} +{"name":"adm2","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b;","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"adm20","cols":80,"lines":24,"bell":"\u0007","clear":"\u001a","sgr0":"\u001b(","cup":"\u001b=%i%p2%{31}%+%c%p1%{31}%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kf1":"\u0001","kf2":"\u0002","kf3":"\u0017","kf4":"\u0004","kf5":"\u0005","kf6":"\u0018","kf7":"\u001a"} +{"name":"adm21","cols":80,"lines":24,"bell":"\u0007","clear":"\u001a$\u003c1/\u003e","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"adm22","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b+","sgr0":"\u001b(","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"adm31","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*","sgr0":"\u001bG0","smul":"\u001bG1","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kf1":"\u00011\r","kf2":"\u00012\r","kf3":"\u00013\r","kf4":"\u00014\r","kf5":"\u00015\r","kf6":"\u00016\r","kf7":"\u00017\r","kf8":"\u00018\r","kf9":"\u00019\r","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"adm31-old","aliases":["o31"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*","sgr0":"\u001bG0","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kf1":"\u00011\r","kf2":"\u00012\r","kf3":"\u00013\r","kf4":"\u00014\r","kf5":"\u00015\r","kf6":"\u00016\r","kf7":"\u00017\r","kf8":"\u00018\r","kf9":"\u00019\r","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"adm36","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"adm3a","cols":80,"lines":24,"bell":"\u0007","clear":"\u001a$\u003c1/\u003e","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"adm3a+","cols":80,"lines":24,"bell":"\u0007","clear":"\u001a$\u003c1/\u003e","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"adm42","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b;","sgr0":"\u001bG0","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"adm42-ns","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b;\u001bF \t","sgr0":"\u001bG0","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c$\u003c6\u003e\u001bF \t","cub1":"\u0008","cuu1":"\u000b","pad":"","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"adm5","cols":80,"lines":24,"bell":"\u0007","clear":"\u001a$\u003c1/\u003e","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"aepro","cols":80,"lines":24,"clear":"\u000c$\u003c300/\u003e","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cuu1":"\u001bA","pad":"\u0000"} +{"name":"aixterm","cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0;10m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[001q","kf2":"\u001b[002q","kf3":"\u001b[003q","kf4":"\u001b[004q","kf5":"\u001b[005q","kf6":"\u001b[006q","kf7":"\u001b[007q","kf8":"\u001b[008q","kf9":"\u001b[009q","kf10":"\u001b[010q","kf11":"\u001b[011q","kf12":"\u001b[012q","kf13":"\u001b[013q","kf14":"\u001b[014q","kf15":"\u001b[015q","kf16":"\u001b[016q","kf17":"\u001b[017q","kf18":"\u001b[018q","kf19":"\u001b[019q","kf20":"\u001b[020q","kf21":"\u001b[021q","kf22":"\u001b[022q","kf23":"\u001b[023q","kf24":"\u001b[024q","kf25":"\u001b[025q","kf26":"\u001b[026q","kf27":"\u001b[027q","kf28":"\u001b[028q","kf29":"\u001b[029q","kf30":"\u001b[030q","kf31":"\u001b[031q","kf32":"\u001b[032q","kf33":"\u001b[033q","kf34":"\u001b[034q","kf35":"\u001b[035q","kf36":"\u001b[036q","kich":"\u001b[139q","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[146q","kpp":"\u001b[150q","knp":"\u001b[154q","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[144q","acsc":"jjkkllmmnnqqttuuvvwwxx","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"aixterm-16color","cols":80,"lines":25,"colors":16,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0;10m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","setaf":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%dm","setbg":"\u001b[%?%p1%{8}%\u003c%t%p1%'('%+%e%p1%{92}%+%;%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[001q","kf2":"\u001b[002q","kf3":"\u001b[003q","kf4":"\u001b[004q","kf5":"\u001b[005q","kf6":"\u001b[006q","kf7":"\u001b[007q","kf8":"\u001b[008q","kf9":"\u001b[009q","kf10":"\u001b[010q","kf11":"\u001b[011q","kf12":"\u001b[012q","kf13":"\u001b[013q","kf14":"\u001b[014q","kf15":"\u001b[015q","kf16":"\u001b[016q","kf17":"\u001b[017q","kf18":"\u001b[018q","kf19":"\u001b[019q","kf20":"\u001b[020q","kf21":"\u001b[021q","kf22":"\u001b[022q","kf23":"\u001b[023q","kf24":"\u001b[024q","kf25":"\u001b[025q","kf26":"\u001b[026q","kf27":"\u001b[027q","kf28":"\u001b[028q","kf29":"\u001b[029q","kf30":"\u001b[030q","kf31":"\u001b[031q","kf32":"\u001b[032q","kf33":"\u001b[033q","kf34":"\u001b[034q","kf35":"\u001b[035q","kf36":"\u001b[036q","kich":"\u001b[139q","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[146q","kpp":"\u001b[150q","knp":"\u001b[154q","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[144q","acsc":"jjkkllmmnnqqttuuvvwwxx","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%d;%?%p2%{8}%\u003c%t%p2%'('%+%e%p2%{92}%+%;%dm"} +{"name":"aixterm-m","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0;10m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[001q","kf2":"\u001b[002q","kf3":"\u001b[003q","kf4":"\u001b[004q","kf5":"\u001b[005q","kf6":"\u001b[006q","kf7":"\u001b[007q","kf8":"\u001b[008q","kf9":"\u001b[009q","kf10":"\u001b[010q","kf11":"\u001b[011q","kf12":"\u001b[012q","kf13":"\u001b[013q","kf14":"\u001b[014q","kf15":"\u001b[015q","kf16":"\u001b[016q","kf17":"\u001b[017q","kf18":"\u001b[018q","kf19":"\u001b[019q","kf20":"\u001b[020q","kf21":"\u001b[021q","kf22":"\u001b[022q","kf23":"\u001b[023q","kf24":"\u001b[024q","kf25":"\u001b[025q","kf26":"\u001b[026q","kf27":"\u001b[027q","kf28":"\u001b[028q","kf29":"\u001b[029q","kf30":"\u001b[030q","kf31":"\u001b[031q","kf32":"\u001b[032q","kf33":"\u001b[033q","kf34":"\u001b[034q","kf35":"\u001b[035q","kf36":"\u001b[036q","kich":"\u001b[139q","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[146q","kpp":"\u001b[150q","knp":"\u001b[154q","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[144q","acsc":"jjkkllmmnnqqttuuvvwwxx"} +{"name":"aixterm-m-old","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[001q","kf2":"\u001b[002q","kf3":"\u001b[003q","kf4":"\u001b[004q","kf5":"\u001b[005q","kf6":"\u001b[006q","kf7":"\u001b[007q","kf8":"\u001b[008q","kf9":"\u001b[009q","kf10":"\u001b[010q","kf11":"\u001b[011q","kf12":"\u001b[012q","kf13":"\u001b[013q","kf14":"\u001b[014q","kf15":"\u001b[015q","kf16":"\u001b[016q","kf17":"\u001b[017q","kf18":"\u001b[018q","kf19":"\u001b[019q","kf20":"\u001b[020q","kf21":"\u001b[021q","kf22":"\u001b[022q","kf23":"\u001b[023q","kf24":"\u001b[024q","kf25":"\u001b[025q","kf26":"\u001b[026q","kf27":"\u001b[027q","kf28":"\u001b[028q","kf29":"\u001b[029q","kf30":"\u001b[030q","kf31":"\u001b[031q","kf32":"\u001b[032q","kf33":"\u001b[033q","kf34":"\u001b[034q","kf35":"\u001b[035q","kf36":"\u001b[036q","kich":"\u001b[139q","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[146q","kpp":"\u001b[150q","knp":"\u001b[154q","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[144q","acsc":"j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffd"} +{"name":"aj510","cols":80,"lines":24,"clear":"\u000c","smcup":"\u001b\"N","rmcup":"\u001b\"N","smul":"\u001b\"U","cup":"\u001b#%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bY","pad":"","kcuu1":"\u001bY","kcud1":"\u001bZ","kcub1":"\u001bW","kcuf1":"\u001bX"} +{"name":"alto-h19","aliases":["alto-heath","altoh19","altoheath"],"cols":80,"lines":60,"bell":"\u0007","clear":"\u001bE","cnorm":"\u001by4","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bS","kf2":"\u001bT","kf3":"\u001bU","kf4":"\u001bV","kf5":"\u001bW","kf6":"\u001bP","kf7":"\u001bQ","kf8":"\u001bR","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","acsc":"~^x`qanbkcjdmelfgg+hai.kwsutvutvozs{","smacs":"\u001bF","rmacs":"\u001bG"} +{"name":"altos2","aliases":["alt2","altos-2"],"cols":80,"lines":24,"clear":"\u001b[H\u001b[2J","sgr0":"\u001b[m","smul":"\u001b[4m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[1A","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf32":"\u0001`\r","kf33":"\u0001a\r","kf34":"\u0001b\r","kf35":"\u0001c\r","kf36":"\u0001d\r","kf37":"\u0001e\r","kf38":"\u0001f\r","kf39":"\u0001g\r","kf40":"\u0001h\r","kf41":"\u0001i\r","kf42":"\u0001j\r","kf43":"\u0001k\r","kdch":"\u0001M\r","khome":"\u001b[f","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u0001K\r","kclr":"\u0001L\r"} +{"name":"altos3","aliases":["alt3","alt5","altos-3","altos-5","altos5"],"cols":80,"lines":24,"clear":"\u001b[H\u001b[2J","sgr0":"\u001b[p","smul":"\u001b[4m","blink":"\u001b[5p","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[1A","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf32":"\u0001`\r","kf33":"\u0001a\r","kf34":"\u0001b\r","kf35":"\u0001c\r","kf36":"\u0001d\r","kf37":"\u0001e\r","kf38":"\u0001f\r","kf39":"\u0001g\r","kf40":"\u0001h\r","kf41":"\u0001i\r","kf42":"\u0001j\r","kf43":"\u0001k\r","kdch":"\u0001M\r","khome":"\u001b[f","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u0001K\r","kclr":"\u0001L\r"} +{"name":"altos4","aliases":["alt4","altos-4"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b+$\u003c20\u003e","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003","rev":"\u001b`6\u001b)","dim":"\u001b`7\u001b)","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"0wa_h[jukslrmqnxqzttuyv]wpxv","smacs":"\u001bH\u0002","rmacs":"\u001bH\u0003","kHOM":"\u001b{"} +{"name":"altos7","aliases":["alt7"],"cols":80,"lines":24,"clear":"\u001b+\u001e","sgr0":"\u001bG0","smul":"\u001bG8","bold":"\u001bGt","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf32":"\u0001`\r","kf33":"\u0001a\r","kf34":"\u0001b\r","kf35":"\u0001c\r","kf36":"\u0001d\r","kf37":"\u0001e\r","kf38":"\u0001f\r","kf39":"\u0001g\r","kf40":"\u0001h\r","kf41":"\u0001i\r","kf42":"\u0001j\r","kf43":"\u0001k\r","kdch":"\u0001M\r","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u0001K\r","kclr":"\u0001L\r","acsc":"j5k3l2m1n8q:t4u9v=w0x6"} +{"name":"altos7pc","aliases":["alt7pc"],"cols":80,"lines":24,"clear":"\u001b+\u001e","sgr0":"\u001bG0","smul":"\u001bG8","bold":"\u001bGt","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf32":"\u0001`\r","kf33":"\u0001a\r","kf34":"\u0001b\r","kf35":"\u0001c\r","kf36":"\u0001d\r","kf37":"\u0001e\r","kf38":"\u0001f\r","kf39":"\u0001g\r","kf40":"\u0001h\r","kf41":"\u0001i\r","kf42":"\u0001j\r","kf43":"\u0001k\r","kdch":"\u0001M\r","khome":"\u001e","kend":"\u001bT","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u0001K\r","kclr":"\u0001L\r","acsc":"j5k3l2m1n8q:t4u9v=w0x6"} +{"name":"amiga","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[ p","civis":"\u001b[0 p","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[7;2m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[0~","kf2":"\u001b[1~","kf3":"\u001b[2~","kf4":"\u001b[3~","kf5":"\u001b[4~","kf6":"\u001b[5~","kf7":"\u001b[6~","kf8":"\u001b[7~","kf9":"\u001b[8~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","smacs":"\u000e","rmacs":"\u000f"} +{"name":"amiga-8bit","cols":80,"lines":24,"bell":"\u0007","clear":"\ufffdH\ufffdJ","smcup":"\ufffd?7l","rmcup":"\ufffd?7h","cnorm":"\ufffd p","civis":"\ufffd0 p","sgr0":"\ufffd0m","smul":"\ufffd4m","bold":"\ufffd1m","blink":"\ufffd7;2m","rev":"\ufffd7m","dim":"\ufffd2m","cup":"\ufffd%i%p1%d;%p2%dH","cub1":"\ufffdD","cuu1":"\ufffdA","pad":"\u0000","kbs":"\u0008","kf1":"\ufffd0~","kf2":"\ufffd1~","kf3":"\ufffd2~","kf4":"\ufffd3~","kf5":"\ufffd4~","kf6":"\ufffd5~","kf7":"\ufffd6~","kf8":"\ufffd7~","kf9":"\ufffd8~","kdch":"","khome":"\ufffd A","kend":"\ufffd @","kpp":"\ufffdT","knp":"\ufffdS","kcuu1":"\ufffdA","kcud1":"\ufffdB","kcub1":"\ufffdD","kcuf1":"\ufffdC","smacs":"\u000e","rmacs":"\u000f"} +{"name":"amiga-h","cols":80,"lines":24,"bell":"\u0007","clear":"\ufffdH\ufffdJ","smcup":"\ufffd?7l","rmcup":"\ufffd?7h","cnorm":"\ufffd p","civis":"\ufffd0 p","sgr0":"\ufffd0m","smul":"\ufffd4m","bold":"\ufffd1m","blink":"\ufffd7;2m","rev":"\ufffd7m","dim":"\ufffd2m","cup":"\ufffd%i%p1%d;%p2%dH","cub1":"\ufffdD","cuu1":"\ufffdA","pad":"\u0000","kbs":"\u0008","kf1":"\ufffd0~","kf2":"\ufffd1~","kf3":"\ufffd2~","kf4":"\ufffd3~","kf5":"\ufffd4~","kf6":"\ufffd5~","kf7":"\ufffd6~","kf8":"\ufffd7~","kf9":"\ufffd8~","kdch":"","kcuu1":"\ufffdA","kcud1":"\ufffdB","kcub1":"\ufffdD","kcuf1":"\ufffdC","smacs":"\u000e","rmacs":"\u000f"} +{"name":"amiga-vnc","cols":80,"lines":24,"colors":16,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?7h","rmcup":"\u001b[?7h\u001b[r\u001b[J","cnorm":"\u001b[p\u001b[\u003e?6l","civis":"\u001b[0p","sgr0":"\u001b[0m\u000f\u001b[30;85;\u003e15m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[7;2m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[?1h","rmkx":"\u001b[?1l","setaf":"\u001b[%?%p1%{8}%\u003e%t%'2'%p1%+%d%e3%p1%d%;m","setbg":"\u001b[%?%p1%{8}%\u003e%t%'F'%p1%+%d%e4%p1%d%;m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[0~","kf2":"\u001b[1~","kf3":"\u001b[2~","kf4":"\u001b[3~","kf5":"\u001b[4~","kf6":"\u001b[5~","kf7":"\u001b[6~","kf8":"\u001b[7~","kf9":"\u001b[8~","kdch":"","khome":"\u001b[44~","khlp":"\u001b[?~","kpp":"\u001b[41~","knp":"\u001b[42~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\ufffdZ","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","_setfgbg":"\u001b[%?%p1%{8}%\u003e%t%'2'%p1%+%d%e3%p1%d%;;%?%p2%{8}%\u003e%t%'F'%p2%+%d%e4%p2%d%;m"} +{"name":"ampex175","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b+","smcup":"\u001bN","rmcup":"\u001bF","smul":"\u001bl","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"ampex175-b","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b+","smcup":"\u001bN","rmcup":"\u001bF","smul":"\u001bl","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u001f","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"ampex210","aliases":["a210"],"cols":80,"lines":24,"clear":"\u001b*","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kf1":"\u00011\r","kf2":"\u00012\r","kf3":"\u00013\r","kf4":"\u00014\r","kf5":"\u00015\r","kf6":"\u00016\r","kf7":"\u00017\r","kf8":"\u00018\r","kf9":"\u00019\r","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"ampex219","aliases":["amp219","ampex-219"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J$\u003c50\u003e","cnorm":"\u001b[?3l","sgr0":"\u001b[m$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m","dim":"\u001b[1m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kf1":"\u001b[7~","kf2":"\u001b[8~","kf3":"\u001b[9~","kf4":"\u001b[10~","kf5":"\u001b[11~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"ampex219w","aliases":["amp219w","ampex-219w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J$\u003c50\u003e","cnorm":"\u001b[?3l","sgr0":"\u001b[m$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m","dim":"\u001b[1m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kf1":"\u001b[7~","kf2":"\u001b[8~","kf3":"\u001b[9~","kf4":"\u001b[10~","kf5":"\u001b[11~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"ampex232","aliases":["ampex-232"],"cols":80,"lines":24,"clear":"\u001b+","cnorm":"\u001b.4","civis":"\u001b.0","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001A\r","kf2":"\u0001B\r","kf3":"\u0001C\r","kf4":"\u0001D\r","kf5":"\u0001E\r","kf6":"\u0001F\r","kf7":"\u0001G\r","kf8":"\u0001H\r","kf9":"\u0001I\r","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"ampex232w","cols":132,"lines":24,"clear":"\u001b+","cnorm":"\u001b.4","civis":"\u001b.0","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001A\r","kf2":"\u0001B\r","kf3":"\u0001C\r","kf4":"\u0001D\r","kf5":"\u0001E\r","kf6":"\u0001F\r","kf7":"\u0001G\r","kf8":"\u0001H\r","kf9":"\u0001I\r","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"ampex80","aliases":["a80","d80","dialogue","dialogue80"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*$\u003c75\u003e","smul":"\u001bl","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000"} +{"name":"annarbor4080","aliases":["aa4080"],"cols":80,"lines":40,"bell":"\u0007","clear":"\u000c$\u003c2\u003e","cup":"\u000f%p2%{10}%/%{16}%*%p2%{10}%m%+%c%p1%?%p1%{19}%\u003e%t%{12}%+%;%'@'%+%c","cub1":"\u0008","cuu1":"\u000e","pad":"\u0000","kbs":"\u001e","khome":"\u000b","kcuu1":"\u000e","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u001f"} +{"name":"ansi","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kich":"\u001b[L","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"ansi-color-2-emx","cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[0;37;44m\u001b[H\u001b[J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0;37;44m","smul":"\u001b[1;36;44m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[1;37;46m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\ufffd;","kf2":"\ufffd\u003c","kf3":"\ufffd=","kf4":"\ufffd\u003e","kf5":"\ufffd?","kf6":"\ufffd@","kf7":"\ufffdA","kf8":"\ufffdB","kf9":"\ufffdC","kf10":"\ufffdD","kf11":"\ufffd\ufffd","kf12":"\ufffd\ufffd","kf13":"\ufffdT","kf14":"\ufffdU","kf15":"\ufffdV","kf16":"\ufffdW","kf17":"\ufffdX","kf18":"\ufffdY","kf19":"\ufffdZ","kf20":"\ufffd[","kf21":"\ufffd\\","kf22":"\ufffd]","kf23":"\ufffd\ufffd","kf24":"\ufffd\ufffd","kf25":"\ufffd^","kf26":"\ufffd_","kf27":"\ufffd`","kf28":"\ufffda","kf29":"\ufffdb","kf30":"\ufffdc","kf31":"\ufffdd","kf32":"\ufffde","kf33":"\ufffdf","kf34":"\ufffdg","kf35":"\ufffd\ufffd","kf36":"\ufffd\ufffd","kf37":"\ufffdh","kf38":"\ufffdi","kf39":"\ufffdj","kf40":"\ufffdk","kf41":"\ufffdl","kf42":"\ufffdm","kf43":"\ufffdn","kf44":"\ufffdo","kf45":"\ufffdp","kf46":"\ufffdq","kf47":"\ufffd\ufffd","kf48":"\ufffd\ufffd","kich":"\ufffdR","kdch":"\ufffdS","khome":"\ufffdG","kend":"\ufffdO","kpp":"\ufffdI","knp":"\ufffdQ","kcuu1":"\ufffdH","kcud1":"\ufffdP","kcub1":"\ufffdK","kcuf1":"\ufffdM","kcbt":"\ufffd\u000f","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"ansi-color-3-emx","cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[0;37;40m\u001b[H\u001b[J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0;10m","smul":"\u001b[0;36;40m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[1;37;46m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\ufffd;","kf2":"\ufffd\u003c","kf3":"\ufffd=","kf4":"\ufffd\u003e","kf5":"\ufffd?","kf6":"\ufffd@","kf7":"\ufffdA","kf8":"\ufffdB","kf9":"\ufffdC","kf10":"\ufffdD","kf11":"\ufffd\ufffd","kf12":"\ufffd\ufffd","kf13":"\ufffdT","kf14":"\ufffdU","kf15":"\ufffdV","kf16":"\ufffdW","kf17":"\ufffdX","kf18":"\ufffdY","kf19":"\ufffdZ","kf20":"\ufffd[","kf21":"\ufffd\\","kf22":"\ufffd]","kf23":"\ufffd\ufffd","kf24":"\ufffd\ufffd","kf25":"\ufffd^","kf26":"\ufffd_","kf27":"\ufffd`","kf28":"\ufffda","kf29":"\ufffdb","kf30":"\ufffdc","kf31":"\ufffdd","kf32":"\ufffde","kf33":"\ufffdf","kf34":"\ufffdg","kf35":"\ufffd\ufffd","kf36":"\ufffd\ufffd","kf37":"\ufffdh","kf38":"\ufffdi","kf39":"\ufffdj","kf40":"\ufffdk","kf41":"\ufffdl","kf42":"\ufffdm","kf43":"\ufffdn","kf44":"\ufffdo","kf45":"\ufffdp","kf46":"\ufffdq","kf47":"\ufffd\ufffd","kf48":"\ufffd\ufffd","kich":"\ufffdR","kdch":"\ufffdS","khome":"\ufffdG","kend":"\ufffdO","kpp":"\ufffdI","knp":"\ufffdQ","kcuu1":"\ufffdH","kcud1":"\ufffdP","kcub1":"\ufffdK","kcuf1":"\ufffdM","kcbt":"\ufffd\u000f","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"ansi-emx","cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[1;33;44m\u001b[H\u001b[J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u001b[1;33;44m","smul":"\u001b[1;31;44m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[5;37;41m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\ufffd;","kf2":"\ufffd\u003c","kf3":"\ufffd=","kf4":"\ufffd\u003e","kf5":"\ufffd?","kf6":"\ufffd@","kf7":"\ufffdA","kf8":"\ufffdB","kf9":"\ufffdC","kf10":"\ufffdD","kf11":"\ufffd\ufffd","kf12":"\ufffd\ufffd","kf13":"\ufffdT","kf14":"\ufffdU","kf15":"\ufffdV","kf16":"\ufffdW","kf17":"\ufffdX","kf18":"\ufffdY","kf19":"\ufffdZ","kf20":"\ufffd[","kf21":"\ufffd\\","kf22":"\ufffd]","kf23":"\ufffd\ufffd","kf24":"\ufffd\ufffd","kf25":"\ufffd^","kf26":"\ufffd_","kf27":"\ufffd`","kf28":"\ufffda","kf29":"\ufffdb","kf30":"\ufffdc","kf31":"\ufffdd","kf32":"\ufffde","kf33":"\ufffdf","kf34":"\ufffdg","kf35":"\ufffd\ufffd","kf36":"\ufffd\ufffd","kf37":"\ufffdh","kf38":"\ufffdi","kf39":"\ufffdj","kf40":"\ufffdk","kf41":"\ufffdl","kf42":"\ufffdm","kf43":"\ufffdn","kf44":"\ufffdo","kf45":"\ufffdp","kf46":"\ufffdq","kf47":"\ufffd\ufffd","kf48":"\ufffd\ufffd","kich":"\ufffdR","kdch":"\ufffdS","khome":"\ufffdG","kend":"\ufffdO","kpp":"\ufffdI","knp":"\ufffdQ","kcuu1":"\ufffdH","kcud1":"\ufffdP","kcub1":"\ufffdK","kcuf1":"\ufffdM","kcbt":"\ufffd\u000f","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"ansi-generic","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"ansi-m","aliases":["ansi-mono"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kich":"\u001b[L","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[12m","rmacs":"\u001b[10m"} +{"name":"ansi-mini","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","cup":"\u001b[%i%p1%d;%p2%dH","pad":"\u0000"} +{"name":"ansi-mtabs","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000"} +{"name":"ansi-nt","aliases":["psx_ansi"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[2J","sgr0":"\u001b[0m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kcuu1":"\u001b[A","kcud1":"\u001b[V","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"ansi.sys","cols":80,"lines":25,"colors":8,"clear":"\u001b[2J","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"ansi.sys-old","cols":80,"lines":25,"colors":8,"clear":"\u001b[2J","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"ansi.sysk","aliases":["ansisysk"],"cols":80,"lines":25,"colors":8,"clear":"\u001b[2J","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[;71;30p\u001b[;72;11p\u001b[;73;27;21p\u001b[;77;12p\u001b[;80;10p\u001b[;81;27;4p\u001b[;82;27;27;105p\u001b[;83;127p","rmkx":"\u001b[;71;0;71p\u001b[;72;0;72p\u001b[;73;0;73p\u001b[;77;0;77p\u001b[;80;0;80p\u001b[;81;0;81p\u001b[;82;0;82p\u001b[;83;0;83p","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"ansi77","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[;H\u001b[2J","smul":"\u001b[4m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOR","kf4":"\u001bOS","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"apollo","cols":88,"lines":53,"clear":"\u000c","smcup":"\u001bW","rmcup":"\u001bX","smul":"\u001bU","cup":"\u001bM%p1%' '%+%c%p2%d)","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000"} +{"name":"apollo_15P","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"apollo_19L","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"apollo_color","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"apple-80","cols":80,"lines":24,"clear":"\u000c$\u003c10*/\u003e","cup":"\u001e%p2%' '%+%c%p1%' '%+%c","cub1":"\u0008","cuu1":"\u001f","pad":"\u0000"} +{"name":"apple-ae","cols":80,"lines":24,"bell":"\u0007$\u003c500/\u003e","clear":"\u000c","sgr0":"\u000e","rev":"\u000f","cup":"\u001e%p2%' '%+%c%p1%' '%+%c","cub1":"\u0008","cuu1":"\u001f","pad":"\u0000","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u0015","kclr":"\u0018"} +{"name":"apple-soroc","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*$\u003c300\u003e","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"apple-uterm","cols":80,"lines":24,"clear":"\u000c","cup":"\u001e%p2%' '%+%c%p1%' '%+%c","cuu1":"\u001f","pad":"\u0000"} +{"name":"apple-uterm-vb","cols":80,"lines":24,"clear":"\u000c","cup":"\u001e%p2%' '%+%c%p1%' '%+%c","cuu1":"\u001f","pad":"\u0000"} +{"name":"apple-videx","cols":80,"lines":24,"clear":"\u000c$\u003c300/\u003e","sgr0":"\u001a2","cup":"\u001e%p2%' '%+%c%p1%' '%+%c","cub1":"\u0008","cuu1":"\u001f","pad":"\u0000","khome":"\u0019","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u0015"} +{"name":"apple-videx2","cols":80,"lines":24,"bell":"\u0007$\u003c100/\u003e","clear":"\u000c$\u003c16*/\u003e","cup":"\u001e%p2%' '%+%c%p1%' '%+%c","cub1":"\u0008","cuu1":"\u001f","pad":"\u0000","kbs":"\u0008","khome":"\u0019","kcuu1":"\u001f","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u001c"} +{"name":"apple-videx3","aliases":["vapple"],"cols":80,"lines":24,"clear":"\u001bv","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cuu1":"\u001bA","pad":"\u0000","kf1":"\u001bQ","kf2":"\u001bR","kf3":"\u001b ","kf4":"\u001b!","kf5":"\u001b\"","kf6":"\u001b#","kf7":"\u001b$","kf8":"\u001b%%","kf9":"\u001b\u0026","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"apple-vm80","aliases":["ap-vm80"],"cols":80,"lines":24,"clear":"\u000c$\u003c300/\u003e","cup":"\u001e%p1%' '%+%c%p2%' '%+%c$\u003c100/\u003e","cuu1":"\u001f","pad":"\u0000"} +{"name":"apple2e-p","cols":80,"lines":24,"bell":"\u0007","clear":"\u000c$\u003c100/\u003e","sgr0":"\u000e","rev":"\u000f","cup":"\u001e%p2%' '%+%c%p1%' '%+%c","cub1":"\u0008","cuu1":"\u001f","pad":"\u0000","kbs":"\u0008","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u0015"} +{"name":"apple80p","cols":80,"lines":24,"clear":"\u0019\u000c","cup":"\u001e%p2%' '%+%c%p1%' '%+%c","cuu1":"\u001f","pad":"\u0000","kcub1":"\u0008"} +{"name":"appleII","cols":80,"lines":24,"clear":"\u000c","cnorm":"\u0014C2","sgr0":"\u000e","cup":"\u001e%p2%' '%+%c%p1%' '%+%c","cub1":"\u0008","cuu1":"\u001f","pad":"\u0000","kcud1":"\n","kcuf1":"\u0015"} +{"name":"appleIIgs","aliases":["appleIIc","appleIIe"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","cup":"\u001e%p2%' '%+%c%p1%' '%+%c","cub1":"\u0008","cuu1":"\u001f","pad":"\u0000","kbs":"\u0008","kdch":"","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u0015","kclr":"\u0018"} +{"name":"arm100","aliases":["arm100-am"],"cols":80,"lines":30,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[P","kf2":"\u001b[Q","kf3":"\u001b[R","kf4":"\u001b[S","kf5":"\u001b[t","kf6":"\u001b[u","kf7":"\u001b[v","kf8":"\u001b[l","kf9":"\u001b[w","kf10":"\u001b[x","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"arm100-w","aliases":["arm100-wam"],"cols":132,"lines":50,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[P","kf2":"\u001b[Q","kf3":"\u001b[R","kf4":"\u001b[S","kf5":"\u001b[t","kf6":"\u001b[u","kf7":"\u001b[v","kf8":"\u001b[l","kf9":"\u001b[w","kf10":"\u001b[x","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"atari","cols":80,"lines":25,"clear":"\u001bH\u001bJ","sgr0":"\u001bq","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u001bD","cuu1":"\u001bA","pad":"\u0000","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"aterm","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[23$","kf22":"\u001b[24$","kf23":"\u001b[11^","kf24":"\u001b[12^","kf25":"\u001b[13^","kf26":"\u001b[14^","kf27":"\u001b[15^","kf28":"\u001b[17^","kf29":"\u001b[18^","kf30":"\u001b[19^","kf31":"\u001b[20^","kf32":"\u001b[21^","kf33":"\u001b[23^","kf34":"\u001b[24^","kf35":"\u001b[25^","kf36":"\u001b[26^","kf37":"\u001b[28^","kf38":"\u001b[29^","kf39":"\u001b[31^","kf40":"\u001b[32^","kf41":"\u001b[33^","kf42":"\u001b[34^","kf43":"\u001b[23@","kf44":"\u001b[24@","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[7~","kend":"\u001b[8~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","kRIT":"\u001b[c","kLFT":"\u001b[d","kHOM":"\u001b[7$","kEND":"\u001b[8$","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kscu1":"\u001b[a","_kscud1":"\u001b[b","_kccu1":"\u001b[Oa","_kccud1":"\u001b[Ob","_kccuf1":"\u001b[Oc","_kccub1":"\u001b[Od","_kchome":"\u001b[7^","_kcend":"\u001b[8^"} +{"name":"att2300","aliases":["sv80"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[1r","kf2":"\u001b[2r","kf3":"\u001b[3r","kf4":"\u001b[4r","kf5":"\u001b[5r","kf6":"\u001b[6r","kf7":"\u001b[7r","kf8":"\u001b[8r","kf9":"\u001b[9r","kf10":"\u001b[10r","kf11":"\u001b[11r","kf12":"\u001b[12r","kf13":"\u001b[13r","kf14":"\u001b[14r","kf15":"\u001b[15r","kf16":"\u001b[16r","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"att2350","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[1r","kf2":"\u001b[2r","kf3":"\u001b[3r","kf4":"\u001b[4r","kf5":"\u001b[5r","kf6":"\u001b[6r","kf7":"\u001b[7r","kf8":"\u001b[8r","kf9":"\u001b[9r","kf10":"\u001b[10r","kf11":"\u001b[11r","kf12":"\u001b[12r","kf13":"\u001b[13r","kf14":"\u001b[14r","kf15":"\u001b[15r","kf16":"\u001b[16r","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"att4410","aliases":["att5410","tty5410"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[2;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOT","kf6":"\u001bOU","kf7":"\u001bOV","kf8":"\u001bOW","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u001b[2J","acsc":"++,,--..00``aaffgghhjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"att4410v1-w","aliases":["att5410v1-w","tty5410v1-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[2;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOT","kf6":"\u001bOU","kf7":"\u001bOV","kf8":"\u001bOW","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u001b[2J","acsc":"++,,--..00``aaffgghhjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"att4415","aliases":["att5420","tty5420"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[x\u001b[J","cnorm":"\u001b[11;0j","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[2;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[19;1j\u001b[21;4j\u001bent","rmkx":"\u001b[19;0j\u001b[21;1j\ufffd","cup":"\u001b[%i%p1%d;%p2%dx","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kich":"\u001b[4h","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001bz","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[2J","acsc":"++,,--..00``aaffgghhjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"att4415-nl","aliases":["att5420-nl","tty5420-nl"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[x\u001b[J","cnorm":"\u001b[11;0j","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[2;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[19;1j\u001b[21;4j\u001bent","rmkx":"\u001b[19;0j\u001b[21;1j\ufffd","cup":"\u001b[%i%p1%d;%p2%dx","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kich":"\u001b[4h","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001bz","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[2J","acsc":"++,,--..00``aaffgghhjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"att4415-rv","aliases":["att5420-rv","tty5420-rv"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[x\u001b[J","cnorm":"\u001b[11;0j","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[2;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[19;1j\u001b[21;4j\u001bent","rmkx":"\u001b[19;0j\u001b[21;1j\ufffd","cup":"\u001b[%i%p1%d;%p2%dx","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kich":"\u001b[4h","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001bz","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[2J","acsc":"++,,--..00``aaffgghhjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"att4415-rv-nl","aliases":["att5420-rv-nl","tty5420-rv-nl"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[x\u001b[J","cnorm":"\u001b[11;0j","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[2;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[19;1j\u001b[21;4j\u001bent","rmkx":"\u001b[19;0j\u001b[21;1j\ufffd","cup":"\u001b[%i%p1%d;%p2%dx","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kich":"\u001b[4h","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001bz","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[2J","acsc":"++,,--..00``aaffgghhjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"att4415-w","aliases":["att5420-w","tty5420-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[x\u001b[J","cnorm":"\u001b[11;0j","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[2;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[19;1j\u001b[21;4j\u001bent","rmkx":"\u001b[19;0j\u001b[21;1j\ufffd","cup":"\u001b[%i%p1%d;%p2%dx","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kich":"\u001b[4h","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001bz","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[2J","acsc":"++,,--..00``aaffgghhjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"att4415-w-nl","aliases":["att5420-w-nl","tty5420-w-nl"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[x\u001b[J","cnorm":"\u001b[11;0j","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[2;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[19;1j\u001b[21;4j\u001bent","rmkx":"\u001b[19;0j\u001b[21;1j\ufffd","cup":"\u001b[%i%p1%d;%p2%dx","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kich":"\u001b[4h","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001bz","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[2J","acsc":"++,,--..00``aaffgghhjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"att4415-w-rv","aliases":["att5420-w-rv","tty5420-w-rv"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[x\u001b[J","cnorm":"\u001b[11;0j","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[2;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[19;1j\u001b[21;4j\u001bent","rmkx":"\u001b[19;0j\u001b[21;1j\ufffd","cup":"\u001b[%i%p1%d;%p2%dx","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kich":"\u001b[4h","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001bz","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[2J","acsc":"++,,--..00``aaffgghhjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"att4415-w-rv-n","aliases":["att5420-w-rv-n","tty5420-w-rv-n"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[x\u001b[J","cnorm":"\u001b[11;0j","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[2;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[19;1j\u001b[21;4j\u001bent","rmkx":"\u001b[19;0j\u001b[21;1j\ufffd","cup":"\u001b[%i%p1%d;%p2%dx","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kich":"\u001b[4h","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001bz","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[2J","acsc":"++,,--..00``aaffgghhjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"att4418","aliases":["att5418"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001b[h","kf2":"\u001b[i","kf3":"\u001b[j","kf6":"\u001b[k","kf7":"\u001b[l","kf8":"\u001b[f","kf9":"\u001b[w","kf10":"\u001b[m","kf11":"\u001b[n","kf12":"\u001b[o","kf13":"\u001b[H","kf14":"\u001b[I","kf15":"\u001b[J","kf18":"\u001b[K","kf19":"\u001b[L","kf20":"\u001b[E","kf21":"\u001b[_","kf22":"\u001b[M","kf23":"\u001b[N","kf24":"\u001b[O","khome":"\u001bc","kcuu1":"\u001bS","kcud1":"\u001bU","kcub1":"\u001b@","kcuf1":"\u001bA","kclr":"\u001b[%%","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"att4418-w","aliases":["att5418-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001b[h","kf2":"\u001b[i","kf3":"\u001b[j","kf6":"\u001b[k","kf7":"\u001b[l","kf8":"\u001b[f","kf9":"\u001b[w","kf10":"\u001b[m","kf11":"\u001b[n","kf12":"\u001b[o","kf13":"\u001b[H","kf14":"\u001b[I","kf15":"\u001b[J","kf18":"\u001b[K","kf19":"\u001b[L","kf20":"\u001b[E","kf21":"\u001b[_","kf22":"\u001b[M","kf23":"\u001b[N","kf24":"\u001b[O","khome":"\u001bc","kcuu1":"\u001bS","kcud1":"\u001bU","kcub1":"\u001b@","kcuf1":"\u001bA","kclr":"\u001b[%%","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"att4420","aliases":["tty4420"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","smul":"\u001b\\","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u001bD","cuu1":"\u001bA","pad":"\u0000","kf3":"\u001b@","kich":"\u001b^","kdch":"\u001bP","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u0008","kcuf1":"\u001bC","kcbt":"\u001bO","kclr":"\u001bJ"} +{"name":"att4424","aliases":["tty4424"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J","sgr0":"\u001bX\u001b~\u001bZ\u001b4\u001b(B","smul":"\u001b\\","bold":"\u001b3","blink":"\u001b3","rev":"\u001b}","dim":"\u001bW","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u001bJ","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B"} +{"name":"att4424-1","aliases":["tty4424-1"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J","sgr0":"\u001bX\u001b~\u001bZ\u001b4\u001b(B","smul":"\u001b\\","bold":"\u001b3","blink":"\u001b3","rev":"\u001b}","dim":"\u001bW","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B"} +{"name":"att4424m","aliases":["tty4424m"],"cols":80,"lines":23,"bell":"\u0007","clear":"\u001b[2;H\u001b[J","sgr0":"\u001b[m","smul":"\u001b[4m","cup":"\u001b[%i%p1%2d;%p2%2dH\u001b[B","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"att4426","aliases":["tty4426"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J\u001b[1U\u001b[H\u001b[2J\u001b[1V","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOT","kf6":"\u001bOU","kf7":"\u001bOV","kf8":"\u001bOW","khome":"\u001b[H","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001bO","kclr":"\u001b[2J","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B"} +{"name":"att500","aliases":["att513"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[11;0|","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[2;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[19;1|\u001b[21;4|\u001bent","rmkx":"\u001b[19;0|\u001b[21;1|\ufffd","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kich":"\u001bNj","kdch":"\u001bNf","khome":"\u001b[H","kend":"\u001b0","khlp":"\u001bOm","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kext":"\u001bOk","kclr":"\u001b[J","kprt":"\u001bOz","kcan":"\u001bOw","acsc":"+g,h-f.e`bhrisjjkkllmmnnqqttuuvvwwxx{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)1","kRIT":"\u001bNL","kLFT":"\u001bNK","kHOM":"\u001bNM","kEND":"\u001bNN"} +{"name":"att505","aliases":["att5430","gs5430","pt505"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[H","cnorm":"\u001b[\u003el","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[01s","kf2":"\u001b[02s","kf3":"\u001b[03s","kf4":"\u001b[04s","kf5":"\u001b[05s","kf6":"\u001b[06s","kf18":"\u001b[18s","kf19":"\u001b[19s","kf20":"\u001b[20s","kf21":"\u001b[21s","kf22":"\u001b[22s","kf23":"\u001b[23s","kf24":"\u001b[24s","kf26":"\u001b[26s","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b[11m","rmacs":"\u001b[10m"} +{"name":"att505-24","aliases":["gs5430-24","pt505-24"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[H","cnorm":"\u001b[\u003el","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[01s","kf2":"\u001b[02s","kf3":"\u001b[03s","kf4":"\u001b[04s","kf5":"\u001b[05s","kf6":"\u001b[06s","kf18":"\u001b[18s","kf19":"\u001b[19s","kf20":"\u001b[20s","kf21":"\u001b[21s","kf22":"\u001b[22s","kf23":"\u001b[23s","kf24":"\u001b[24s","kf26":"\u001b[26s","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b[11m","rmacs":"\u001b[10m"} +{"name":"att510a","aliases":["bct510a"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[11;3|","civis":"\u001b[11;0|","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[2;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[19;1|","rmkx":"\u001b[19;0|","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOm","kf2":"\u001bOV","kf3":"\u001bOu","kf4":"\u001bNj","kf5":"\u001bNe","kf6":"\u001bNf","kf7":"\u001bNh","kf8":"\u001b[H","kf9":"\u001bOc","kf10":"\u001bOd","kf11":"\u001bOe","kf12":"\u001bOf","kf13":"\u001bOg","kf14":"\u001bOh","kf15":"\u001bOi","kf16":"\u001bOj","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"+g,h-f.e`bhrisjjkkllmmnnqqttuuvvwwxx{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)1","kRIT":"\u001b[v","kLFT":"\u001b[u"} +{"name":"att510d","aliases":["bct510d"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[11;3|","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[2;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[19;1|","rmkx":"\u001b[19;0|","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOm","kf2":"\u001bOV","kf3":"\u001bOu","kf4":"\u001bNj","kf5":"\u001bNe","kf6":"\u001bNf","kf7":"\u001bNh","kf8":"\u001b[H","kf9":"\u001bOc","kf10":"\u001bOd","kf11":"\u001bOe","kf12":"\u001bOf","kf13":"\u001bOg","kf14":"\u001bOh","kf15":"\u001bOi","kf16":"\u001bOj","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"+g,h-f.e`bhrisjjkkllmmnnqqttuuvvwwxx{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)1","kRIT":"\u001b[v","kLFT":"\u001b[u"} +{"name":"att5410-w","aliases":["4410-w","5410-w","att4410-w","tty5410-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[2;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOT","kf6":"\u001bOU","kf7":"\u001bOV","kf8":"\u001bOW","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u001b[2J","acsc":"++,,--..00``aaffgghhjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"att5410v1","aliases":["att4410v1","tty5410v1"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[2;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOT","kf6":"\u001bOU","kf7":"\u001bOV","kf8":"\u001bOW","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u001b[2J","acsc":"++,,--..00``aaffgghhjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"att5420_2","cols":80,"lines":24,"clear":"\u001bH\u001bJ","cnorm":"\u001b[11;0j","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[19;1j","rmkx":"\u001b[19;0j","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kich":"\u001b[4h","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001bz","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[2J","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"att5420_2-w","cols":132,"lines":24,"clear":"\u001bH\u001bJ","cnorm":"\u001b[11;0j","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[19;1j","rmkx":"\u001b[19;0j","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kich":"\u001b[4h","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001bz","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[2J","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"att5425","aliases":["att4425","tty5425"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[12;0j","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[2;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[21;1j\u001b[25;4j\u001bent\u001b~","rmkx":"\u001b[21;0j\u001b[25;1j\ufffd","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kich":"\u001b[4h","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001bz","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"att5425-nl","aliases":["att4425-nl","tty5425-nl"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[12;0j","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[2;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[21;1j\u001b[25;4j\u001bent","rmkx":"\u001b[21;0j\u001b[25;1j\ufffd","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kich":"\u001b[4h","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001bz","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"att5425-w","aliases":["att4425-w","tty5425-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[12;0j","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[2;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[21;1j\u001b[25;4j\u001bent\u001b~","rmkx":"\u001b[21;0j\u001b[25;1j\ufffd","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kich":"\u001b[4h","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001bz","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"att5620","aliases":["5620","dmd","tty5620","ttydmd"],"cols":88,"lines":70,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[2m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u001b[2J"} +{"name":"att5620-1","aliases":["dmd1","tty5620-1"],"cols":88,"lines":70,"bell":"\u0007","clear":"\u001b[H\u001b[J","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u001b[2J"} +{"name":"att5620-24","aliases":["dmd-24","tty5620-24"],"cols":88,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[2m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u001b[2J"} +{"name":"att5620-34","aliases":["dmd-34","tty5620-34"],"cols":88,"lines":34,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[2m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u001b[2J"} +{"name":"att5620-s","aliases":["layer","tty5620-s","vitty"],"cols":80,"lines":72,"bell":"\u0007","clear":"\u000c","cup":"\u001bY%p2%' '%+%c%p1%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u001b[2J"} +{"name":"att605","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kf9":"\u001bNo","kf10":"\u001bNp","kf11":"\u001bNq","kf12":"\u001bNr","kf13":"\u001bNs","kf14":"\u001bNt","kf15":"\u001bOC","kf16":"\u001bOD","kf17":"\u001bOE","kf18":"\u001bOF","kf19":"\u001bOG","kf20":"\u001bOH","kf21":"\u001bOI","kf22":"\u001bOJ","kf23":"\u001bNO","kf24":"\u001bNP","kf25":"\u001bNQ","kf26":"\u001bNR","kf27":"\u001bNS","kf28":"\u001bNT","kf29":"\u001bOP","kf30":"\u001bOQ","kf31":"\u001bOR","kf32":"\u001bOS","kf33":"\u001bOw","kf34":"\u001bOx","kf35":"\u001bOy","kf36":"\u001bOm","kf37":"\u001bOt","kf38":"\u001bOu","kf39":"\u001bOv","kf40":"\u001bOl","kf41":"\u001bOq","kf42":"\u001bOr","kf43":"\u001bOs","kf44":"\u001bOp","kf45":"\u001bOn","kf46":"\u001bOM","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[24;1H","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[2J","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b)0\u000e","rmacs":"\u000f","kRIT":"\u001b[ @","kLFT":"\u001b[ A"} +{"name":"att605-pc","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","kf10":"\u001b[V","kf11":"\u001bNq","kf12":"\u001bNr","kf13":"\u001bNs","kf14":"\u001bNt","kf15":"\u001bOC","kf16":"\u001bOD","kf17":"\u001bOE","kf18":"\u001bOF","kf19":"\u001bOG","kf20":"\u001bOH","kf21":"\u001bOI","kf22":"\u001bOJ","kf23":"\u001bNO","kf24":"\u001bNP","kf25":"\u001bNQ","kf26":"\u001bNR","kf27":"\u001bNS","kf28":"\u001bNT","kf29":"\u001bOP","kf30":"\u001bOQ","kf31":"\u001bOR","kf32":"\u001bOS","kf33":"\u001bOw","kf34":"\u001bOx","kf35":"\u001bOy","kf36":"\u001bOm","kf37":"\u001bOt","kf38":"\u001bOu","kf39":"\u001bOv","kf40":"\u001bOl","kf41":"\u001bOq","kf42":"\u001bOr","kf43":"\u001bOs","kf44":"\u001bOp","kf45":"\u001bOn","kf46":"\u001bOM","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[2J","acsc":"j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffd","smacs":"\u001b)0\u000e","rmacs":"\u000f","kRIT":"\u001b[ @","kLFT":"\u001b[ A"} +{"name":"att605-w","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kf9":"\u001bNo","kf10":"\u001bNp","kf11":"\u001bNq","kf12":"\u001bNr","kf13":"\u001bNs","kf14":"\u001bNt","kf15":"\u001bOC","kf16":"\u001bOD","kf17":"\u001bOE","kf18":"\u001bOF","kf19":"\u001bOG","kf20":"\u001bOH","kf21":"\u001bOI","kf22":"\u001bOJ","kf23":"\u001bNO","kf24":"\u001bNP","kf25":"\u001bNQ","kf26":"\u001bNR","kf27":"\u001bNS","kf28":"\u001bNT","kf29":"\u001bOP","kf30":"\u001bOQ","kf31":"\u001bOR","kf32":"\u001bOS","kf33":"\u001bOw","kf34":"\u001bOx","kf35":"\u001bOy","kf36":"\u001bOm","kf37":"\u001bOt","kf38":"\u001bOu","kf39":"\u001bOv","kf40":"\u001bOl","kf41":"\u001bOq","kf42":"\u001bOr","kf43":"\u001bOs","kf44":"\u001bOp","kf45":"\u001bOn","kf46":"\u001bOM","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[24;1H","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[2J","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b)0\u000e","rmacs":"\u000f","kRIT":"\u001b[ @","kLFT":"\u001b[ A"} +{"name":"att610","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h\u001b[?12l","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kf9":"\u001bNo","kf10":"\u001bNp","kf11":"\u001bNq","kf12":"\u001bNr","kf13":"\u001bNs","kf14":"\u001bNt","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[2J","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","kRIT":"\u001b[ A","kLFT":"\u001b[ @"} +{"name":"att610-103k","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h\u001b[?12l","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kich":"\u001bNj","kdch":"\u001bNf","khome":"\u001b[H","kend":"\u001b0","khlp":"\u001bOm","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kext":"\u001bOk","kclr":"\u001b[2J","kprt":"\u001bOz","kcan":"\u001bOw","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","kRIT":"\u001b[ A","kLFT":"\u001b[ @","kEND":"\u001bNN"} +{"name":"att610-103k-w","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h\u001b[?12l","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kich":"\u001bNj","kdch":"\u001bNf","khome":"\u001b[H","kend":"\u001b0","khlp":"\u001bOm","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kext":"\u001bOk","kclr":"\u001b[2J","kprt":"\u001bOz","kcan":"\u001bOw","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","kRIT":"\u001b[ A","kLFT":"\u001b[ @","kEND":"\u001bNN"} +{"name":"att610-w","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h\u001b[?12l","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kf9":"\u001bNo","kf10":"\u001bNp","kf11":"\u001bNq","kf12":"\u001bNr","kf13":"\u001bNs","kf14":"\u001bNt","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[2J","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","kRIT":"\u001b[ A","kLFT":"\u001b[ @"} +{"name":"att615","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h\u001b[?12l","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kf9":"\u001bNo","kf10":"\u001bNp","kf11":"\u001bNq","kf12":"\u001bNr","kf13":"\u001bNs","kf14":"\u001bNt","kf15":"\u001bOC","kf16":"\u001bOD","kf17":"\u001bOE","kf18":"\u001bOF","kf19":"\u001bOG","kf20":"\u001bOH","kf21":"\u001bOI","kf22":"\u001bOJ","kf23":"\u001bNO","kf24":"\u001bNP","kf25":"\u001bNQ","kf26":"\u001bNR","kf27":"\u001bNS","kf28":"\u001bNT","kf29":"\u001bOP","kf30":"\u001bOQ","kf31":"\u001bOR","kf32":"\u001bOS","kf33":"\u001bOw","kf34":"\u001bOx","kf35":"\u001bOy","kf36":"\u001bOm","kf37":"\u001bOt","kf38":"\u001bOu","kf39":"\u001bOv","kf40":"\u001bOl","kf41":"\u001bOq","kf42":"\u001bOr","kf43":"\u001bOs","kf44":"\u001bOp","kf45":"\u001bOn","kf46":"\u001bOM","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[2J","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","kRIT":"\u001b[ @","kLFT":"\u001b[ A"} +{"name":"att615-103k","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h\u001b[?12l","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kich":"\u001bNj","kdch":"\u001bNf","khome":"\u001b[H","kend":"\u001b0","khlp":"\u001bOm","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kext":"\u001bOk","kclr":"\u001b[2J","kprt":"\u001bOz","kcan":"\u001bOw","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","kRIT":"\u001b[ @","kLFT":"\u001b[ A","kEND":"\u001bNN"} +{"name":"att615-103k-w","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h\u001b[?12l","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kich":"\u001bNj","kdch":"\u001bNf","khome":"\u001b[H","kend":"\u001b0","khlp":"\u001bOm","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kext":"\u001bOk","kclr":"\u001b[2J","kprt":"\u001bOz","kcan":"\u001bOw","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","kRIT":"\u001b[ @","kLFT":"\u001b[ A","kEND":"\u001bNN"} +{"name":"att615-w","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h\u001b[?12l","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kf9":"\u001bNo","kf10":"\u001bNp","kf11":"\u001bNq","kf12":"\u001bNr","kf13":"\u001bNs","kf14":"\u001bNt","kf15":"\u001bOC","kf16":"\u001bOD","kf17":"\u001bOE","kf18":"\u001bOF","kf19":"\u001bOG","kf20":"\u001bOH","kf21":"\u001bOI","kf22":"\u001bOJ","kf23":"\u001bNO","kf24":"\u001bNP","kf25":"\u001bNQ","kf26":"\u001bNR","kf27":"\u001bNS","kf28":"\u001bNT","kf29":"\u001bOP","kf30":"\u001bOQ","kf31":"\u001bOR","kf32":"\u001bOS","kf33":"\u001bOw","kf34":"\u001bOx","kf35":"\u001bOy","kf36":"\u001bOm","kf37":"\u001bOt","kf38":"\u001bOu","kf39":"\u001bOv","kf40":"\u001bOl","kf41":"\u001bOq","kf42":"\u001bOr","kf43":"\u001bOs","kf44":"\u001bOp","kf45":"\u001bOn","kf46":"\u001bOM","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[2J","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","kRIT":"\u001b[ @","kLFT":"\u001b[ A"} +{"name":"att620","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h\u001b[?12l","civis":"\u001b[?25l","sgr0":"\u001b[m\u001b(B\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kf9":"\u001bNo","kf10":"\u001bNp","kf11":"\u001bNq","kf12":"\u001bNr","kf13":"\u001bNs","kf14":"\u001bNt","kf15":"\u001bOC","kf16":"\u001bOD","kf17":"\u001bOE","kf18":"\u001bOF","kf19":"\u001bOG","kf20":"\u001bOH","kf21":"\u001bOI","kf22":"\u001bOJ","kf23":"\u001bNO","kf24":"\u001bNP","kf25":"\u001bNQ","kf26":"\u001bNR","kf27":"\u001bNS","kf28":"\u001bNT","kf29":"\u001bOP","kf30":"\u001bOQ","kf31":"\u001bOR","kf32":"\u001bOS","kf33":"\u001bOw","kf34":"\u001bOx","kf35":"\u001bOy","kf36":"\u001bOm","kf37":"\u001bOt","kf38":"\u001bOu","kf39":"\u001bOv","kf40":"\u001bOl","kf41":"\u001bOq","kf42":"\u001bOr","kf43":"\u001bOs","kf44":"\u001bOp","kf45":"\u001bOn","kf46":"\u001bOM","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[2J","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b)0\u000e","rmacs":"\u001b(B\u000f","kRIT":"\u001b[ @","kLFT":"\u001b[ A"} +{"name":"att620-103k","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h\u001b[?12l","civis":"\u001b[?25l","sgr0":"\u001b[m\u001b(B\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kich":"\u001bNj","kdch":"\u001bNf","khome":"\u001b[H","kend":"\u001b0","khlp":"\u001bOm","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kext":"\u001bOk","kclr":"\u001b[2J","kprt":"\u001bOz","kcan":"\u001bOw","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b)0\u000e","rmacs":"\u001b(B\u000f","kRIT":"\u001b[ @","kLFT":"\u001b[ A","kEND":"\u001bNN"} +{"name":"att620-103k-w","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h\u001b[?12l","civis":"\u001b[?25l","sgr0":"\u001b[m\u001b(B\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kich":"\u001bNj","kdch":"\u001bNf","khome":"\u001b[H","kend":"\u001b0","khlp":"\u001bOm","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kext":"\u001bOk","kclr":"\u001b[2J","kprt":"\u001bOz","kcan":"\u001bOw","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b)0\u000e","rmacs":"\u001b(B\u000f","kRIT":"\u001b[ @","kLFT":"\u001b[ A","kEND":"\u001bNN"} +{"name":"att620-w","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h\u001b[?12l","civis":"\u001b[?25l","sgr0":"\u001b[m\u001b(B\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kf9":"\u001bNo","kf10":"\u001bNp","kf11":"\u001bNq","kf12":"\u001bNr","kf13":"\u001bNs","kf14":"\u001bNt","kf15":"\u001bOC","kf16":"\u001bOD","kf17":"\u001bOE","kf18":"\u001bOF","kf19":"\u001bOG","kf20":"\u001bOH","kf21":"\u001bOI","kf22":"\u001bOJ","kf23":"\u001bNO","kf24":"\u001bNP","kf25":"\u001bNQ","kf26":"\u001bNR","kf27":"\u001bNS","kf28":"\u001bNT","kf29":"\u001bOP","kf30":"\u001bOQ","kf31":"\u001bOR","kf32":"\u001bOS","kf33":"\u001bOw","kf34":"\u001bOx","kf35":"\u001bOy","kf36":"\u001bOm","kf37":"\u001bOt","kf38":"\u001bOu","kf39":"\u001bOv","kf40":"\u001bOl","kf41":"\u001bOq","kf42":"\u001bOr","kf43":"\u001bOs","kf44":"\u001bOp","kf45":"\u001bOn","kf46":"\u001bOM","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[2J","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b)0\u000e","rmacs":"\u001b(B\u000f","kRIT":"\u001b[ @","kLFT":"\u001b[ A"} +{"name":"att630","cols":80,"lines":60,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m","smul":"\u001b[4m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf9":"\u001bNo","kf10":"\u001bNp","kf11":"\u001bNq","kf12":"\u001bNr","kf13":"\u001bNs","kf14":"\u001bNt","kf15":"\u001bNu","kf16":"\u001bNv","kf17":"\u001bNw","kf18":"\u001bNx","kf19":"\u001bNy","kf20":"\u001bNz","kf21":"\u001bN{","kf22":"\u001bN|","kf23":"\u001bN}","kf24":"\u001bN~","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[2J"} +{"name":"att630-24","aliases":["5630-24","5630DMD-24","630MTG-24"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m","smul":"\u001b[4m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf9":"\u001bNo","kf10":"\u001bNp","kf11":"\u001bNq","kf12":"\u001bNr","kf13":"\u001bNs","kf14":"\u001bNt","kf15":"\u001bNu","kf16":"\u001bNv","kf17":"\u001bNw","kf18":"\u001bNx","kf19":"\u001bNy","kf20":"\u001bNz","kf21":"\u001bN{","kf22":"\u001bN|","kf23":"\u001bN}","kf24":"\u001bN~","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[2J"} +{"name":"att6386","aliases":["386at","at386"],"cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[2J\u001b[H","cnorm":"\u001b[=1C","civis":"\u001b[=C","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOT","kf6":"\u001bOU","kf7":"\u001bOV","kf8":"\u001bOW","kf9":"\u001bOX","kf10":"\u001bOY","kf11":"\u001bOZ","kf12":"\u001bOA","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[Y","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001d","acsc":"``a1fxgqh0jYk?lZm@nEooppqDrrsstCu4vAwBx3yyzz{{||}}~~","smacs":"\u001b[12m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"att700","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h\u001b[?12l","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kf9":"\u001bNo","kf10":"\u001bNp","kf11":"\u001bNq","kf12":"\u001bNr","kf13":"\u001bNs","kf14":"\u001bNt","kf15":"\u001bOC","kf16":"\u001bOD","kf17":"\u001bOE","kf18":"\u001bOF","kf19":"\u001bOG","kf20":"\u001bOH","kf21":"\u001bOI","kf22":"\u001bOJ","kf23":"\u001bNO","kf24":"\u001bNP","kf25":"\u001bNQ","kf26":"\u001bNR","kf27":"\u001bNS","kf28":"\u001bNT","kf29":"\u001bOq","kf30":"\u001bOr","kf31":"\u001bOs","kf32":"\u001bOt","kf33":"\u001bOu","kf34":"\u001bOv","kf35":"\u001bOw","kf36":"\u001bOx","kf37":"\u001bOy","kf38":"\u001bOu","kf39":"\u001bOv","kf40":"\u001bOl","kf41":"\u001bOq","kf42":"\u001bOr","kf43":"\u001bOs","kf44":"\u001bOp","kf45":"\u001bOn","kf46":"\u001bOM","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[24;1H","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[2J","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","kRIT":"\u001b[ @","kLFT":"\u001b[ A"} +{"name":"att730","cols":80,"lines":60,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h\u001b[?12l","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kf9":"\u001bNo","kf10":"\u001bNp","kf11":"\u001bNq","kf12":"\u001bNr","kf13":"\u001bNs","kf14":"\u001bNt","kf15":"\u001bNu","kf16":"\u001bNv","kf17":"\u001bNw","kf18":"\u001bNx","kf19":"\u001bNy","kf20":"\u001bNz","kf21":"\u001bN{","kf22":"\u001bN|","kf23":"\u001bN}","kf24":"\u001bN~","kf25":"\u001bOC","kf26":"\u001bOD","kf27":"\u001bOE","kf28":"\u001bOF","kf29":"\u001bOG","kf30":"\u001bOH","kf31":"\u001bOI","kf32":"\u001bOJ","kf33":"\u001bNO","kf34":"\u001bNP","kf35":"\u001bNQ","kf36":"\u001bNR","kf37":"\u001bNS","kf38":"\u001bNT","kf39":"\u001bOU","kf40":"\u001bOV","kf41":"\u001bOW","kf42":"\u001bOX","kf43":"\u001bOY","kf44":"\u001bOZ","kf45":"\u001bO[","kf46":"\u001bO ","kf47":"\u001bO]","kf48":"\u001bO^","kich":"\u001b[@","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[2J","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","kRIT":"\u001b[ A","kLFT":"\u001b[ @"} +{"name":"att730-24","aliases":["730MTG-24"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h\u001b[?12l","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kf9":"\u001bNo","kf10":"\u001bNp","kf11":"\u001bNq","kf12":"\u001bNr","kf13":"\u001bNs","kf14":"\u001bNt","kf15":"\u001bNu","kf16":"\u001bNv","kf17":"\u001bNw","kf18":"\u001bNx","kf19":"\u001bNy","kf20":"\u001bNz","kf21":"\u001bN{","kf22":"\u001bN|","kf23":"\u001bN}","kf24":"\u001bN~","kf25":"\u001bOC","kf26":"\u001bOD","kf27":"\u001bOE","kf28":"\u001bOF","kf29":"\u001bOG","kf30":"\u001bOH","kf31":"\u001bOI","kf32":"\u001bOJ","kf33":"\u001bNO","kf34":"\u001bNP","kf35":"\u001bNQ","kf36":"\u001bNR","kf37":"\u001bNS","kf38":"\u001bNT","kf39":"\u001bOU","kf40":"\u001bOV","kf41":"\u001bOW","kf42":"\u001bOX","kf43":"\u001bOY","kf44":"\u001bOZ","kf45":"\u001bO[","kf46":"\u001bO ","kf47":"\u001bO]","kf48":"\u001bO^","kich":"\u001b[@","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[2J","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","kRIT":"\u001b[ A","kLFT":"\u001b[ @"} +{"name":"att730-41","aliases":["730MTG-41"],"cols":80,"lines":41,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h\u001b[?12l","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kf9":"\u001bNo","kf10":"\u001bNp","kf11":"\u001bNq","kf12":"\u001bNr","kf13":"\u001bNs","kf14":"\u001bNt","kf15":"\u001bNu","kf16":"\u001bNv","kf17":"\u001bNw","kf18":"\u001bNx","kf19":"\u001bNy","kf20":"\u001bNz","kf21":"\u001bN{","kf22":"\u001bN|","kf23":"\u001bN}","kf24":"\u001bN~","kf25":"\u001bOC","kf26":"\u001bOD","kf27":"\u001bOE","kf28":"\u001bOF","kf29":"\u001bOG","kf30":"\u001bOH","kf31":"\u001bOI","kf32":"\u001bOJ","kf33":"\u001bNO","kf34":"\u001bNP","kf35":"\u001bNQ","kf36":"\u001bNR","kf37":"\u001bNS","kf38":"\u001bNT","kf39":"\u001bOU","kf40":"\u001bOV","kf41":"\u001bOW","kf42":"\u001bOX","kf43":"\u001bOY","kf44":"\u001bOZ","kf45":"\u001bO[","kf46":"\u001bO ","kf47":"\u001bO]","kf48":"\u001bO^","kich":"\u001b[@","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[2J","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","kRIT":"\u001b[ A","kLFT":"\u001b[ @"} +{"name":"att7300","aliases":["3b1","pc7300","s4","unixpc"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[H","cnorm":"\u001b[=0C","civis":"\u001b[=1C","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[9m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kich":"\u001bNj","kdch":"\u001bNf","khome":"\u001b[H","kend":"\u001b0","khlp":"\u001bOm","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kext":"\u001bOk","kclr":"\u001b[J","kprt":"\u001bOz","kcan":"\u001bOw","kRIT":"\u001bNL","kLFT":"\u001bNK","kHOM":"\u001bNM","kEND":"\u001bNN"} +{"name":"att730r","aliases":["730MTGr"],"cols":80,"lines":60,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h\u001b[?12l","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kf9":"\u001bNo","kf10":"\u001bNp","kf11":"\u001bNq","kf12":"\u001bNr","kf13":"\u001bNs","kf14":"\u001bNt","kf15":"\u001bNu","kf16":"\u001bNv","kf17":"\u001bNw","kf18":"\u001bNx","kf19":"\u001bNy","kf20":"\u001bNz","kf21":"\u001bN{","kf22":"\u001bN|","kf23":"\u001bN}","kf24":"\u001bN~","kf25":"\u001bOC","kf26":"\u001bOD","kf27":"\u001bOE","kf28":"\u001bOF","kf29":"\u001bOG","kf30":"\u001bOH","kf31":"\u001bOI","kf32":"\u001bOJ","kf33":"\u001bNO","kf34":"\u001bNP","kf35":"\u001bNQ","kf36":"\u001bNR","kf37":"\u001bNS","kf38":"\u001bNT","kf39":"\u001bOU","kf40":"\u001bOV","kf41":"\u001bOW","kf42":"\u001bOX","kf43":"\u001bOY","kf44":"\u001bOZ","kf45":"\u001bO[","kf46":"\u001bO ","kf47":"\u001bO]","kf48":"\u001bO^","kich":"\u001b[@","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[2J","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","kRIT":"\u001b[ A","kLFT":"\u001b[ @"} +{"name":"att730r-24","aliases":["730MTGr-24"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h\u001b[?12l","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kf9":"\u001bNo","kf10":"\u001bNp","kf11":"\u001bNq","kf12":"\u001bNr","kf13":"\u001bNs","kf14":"\u001bNt","kf15":"\u001bNu","kf16":"\u001bNv","kf17":"\u001bNw","kf18":"\u001bNx","kf19":"\u001bNy","kf20":"\u001bNz","kf21":"\u001bN{","kf22":"\u001bN|","kf23":"\u001bN}","kf24":"\u001bN~","kf25":"\u001bOC","kf26":"\u001bOD","kf27":"\u001bOE","kf28":"\u001bOF","kf29":"\u001bOG","kf30":"\u001bOH","kf31":"\u001bOI","kf32":"\u001bOJ","kf33":"\u001bNO","kf34":"\u001bNP","kf35":"\u001bNQ","kf36":"\u001bNR","kf37":"\u001bNS","kf38":"\u001bNT","kf39":"\u001bOU","kf40":"\u001bOV","kf41":"\u001bOW","kf42":"\u001bOX","kf43":"\u001bOY","kf44":"\u001bOZ","kf45":"\u001bO[","kf46":"\u001bO ","kf47":"\u001bO]","kf48":"\u001bO^","kich":"\u001b[@","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[2J","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","kRIT":"\u001b[ A","kLFT":"\u001b[ @"} +{"name":"att730r-41","aliases":["730MTG-41r"],"cols":80,"lines":41,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h\u001b[?12l","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kf9":"\u001bNo","kf10":"\u001bNp","kf11":"\u001bNq","kf12":"\u001bNr","kf13":"\u001bNs","kf14":"\u001bNt","kf15":"\u001bNu","kf16":"\u001bNv","kf17":"\u001bNw","kf18":"\u001bNx","kf19":"\u001bNy","kf20":"\u001bNz","kf21":"\u001bN{","kf22":"\u001bN|","kf23":"\u001bN}","kf24":"\u001bN~","kf25":"\u001bOC","kf26":"\u001bOD","kf27":"\u001bOE","kf28":"\u001bOF","kf29":"\u001bOG","kf30":"\u001bOH","kf31":"\u001bOI","kf32":"\u001bOJ","kf33":"\u001bNO","kf34":"\u001bNP","kf35":"\u001bNQ","kf36":"\u001bNR","kf37":"\u001bNS","kf38":"\u001bNT","kf39":"\u001bOU","kf40":"\u001bOV","kf41":"\u001bOW","kf42":"\u001bOX","kf43":"\u001bOY","kf44":"\u001bOZ","kf45":"\u001bO[","kf46":"\u001bO ","kf47":"\u001bO]","kf48":"\u001bO^","kich":"\u001b[@","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[2J","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","kRIT":"\u001b[ A","kLFT":"\u001b[ @"} +{"name":"avatar","aliases":["avatar1"],"cols":80,"lines":25,"cnorm":"\u0016'\u0001","civis":"\u0016'\u0002","sgr0":"\u0016\u0001\u0007","smul":"\u0016\u0001\u0001","bold":"\u0016\u0001\u0010","blink":"\u0016\u0002","rev":"\u0016\u0001p","cup":"\u0016\u0008%p1%c%p2%c","cub1":"\u0016\u0005","cuu1":"\u0016\u0003","pad":"\u0000","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd"} +{"name":"avatar0","cols":80,"lines":25,"sgr0":"\u0016\u0001\u0007","smul":"\u0016\u0001\u0001","bold":"\u0016\u0001\u0010","blink":"\u0016\u0002","rev":"\u0016\u0001p","cup":"\u0016\u0008%p1%c%p2%c","cub1":"\u0016\u0005","cuu1":"\u0016\u0003","pad":"\u0000","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd"} +{"name":"avatar0+","cols":80,"lines":25,"sgr0":"\u0016\u0001\u0007","smul":"\u0016\u0001\u0001","bold":"\u0016\u0001\u0010","blink":"\u0016\u0002","rev":"\u0016\u0001p","cup":"\u0016\u0008%p1%c%p2%c","cub1":"\u0016\u0005","cuu1":"\u0016\u0003","pad":"\u0000","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd"} +{"name":"avt","aliases":["avt-s","concept-avt"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c38\u003e","smcup":"\u001b[2;25w\u001b2\r","rmcup":"\u001b[2w\u001b2\r\n","cnorm":"\u001b[=119l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[1!{","smkx":"\u001b[1!z\u001b[0;3u","rmkx":"\u001b[!z\u001b[0;2u","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kich":"\u001b\u0001\r","kdch":"\u001b\u0002\r","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","smacs":"\u000f$\u003c1\u003e","rmacs":"\u000e$\u003c1\u003e"} +{"name":"avt-ns","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c38\u003e","smcup":"\u001b[=4l\u001b[1;24w\u001b2\r","rmcup":"\u001b[w\u001b2\r\n","cnorm":"\u001b[=119l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[1!{","smkx":"\u001b[1!z\u001b[0;3u","rmkx":"\u001b[!z\u001b[0;2u","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kich":"\u001b\u0001\r","kdch":"\u001b\u0002\r","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","smacs":"\u000f$\u003c1\u003e","rmacs":"\u000e$\u003c1\u003e"} +{"name":"avt-rv","aliases":["avt-rv-s"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c38\u003e","smcup":"\u001b[2;25w\u001b2\r","rmcup":"\u001b[2w\u001b2\r\n","cnorm":"\u001b[=119l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[1!{","smkx":"\u001b[1!z\u001b[0;3u","rmkx":"\u001b[!z\u001b[0;2u","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kich":"\u001b\u0001\r","kdch":"\u001b\u0002\r","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","smacs":"\u000f$\u003c1\u003e","rmacs":"\u000e$\u003c1\u003e"} +{"name":"avt-rv-ns","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c38\u003e","smcup":"\u001b[=4l\u001b[1;24w\u001b2\r","rmcup":"\u001b[w\u001b2\r\n","cnorm":"\u001b[=119l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[1!{","smkx":"\u001b[1!z\u001b[0;3u","rmkx":"\u001b[!z\u001b[0;2u","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kich":"\u001b\u0001\r","kdch":"\u001b\u0002\r","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","smacs":"\u000f$\u003c1\u003e","rmacs":"\u000e$\u003c1\u003e"} +{"name":"avt-w","aliases":["avt-w-s"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c38\u003e","smcup":"\u001b[H\u001b[1;24;1;132w","rmcup":"\u001b[2w\u001b2\r\n","cnorm":"\u001b[=119l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[1!{","smkx":"\u001b[1!z\u001b[0;3u","rmkx":"\u001b[!z\u001b[0;2u","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kich":"\u001b\u0001\r","kdch":"\u001b\u0002\r","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","smacs":"\u000f$\u003c1\u003e","rmacs":"\u000e$\u003c1\u003e"} +{"name":"avt-w-ns","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c38\u003e","smcup":"\u001b[H\u001b[1;24;1;132w","rmcup":"\u001b[w\u001b2\r\n","cnorm":"\u001b[=119l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[1!{","smkx":"\u001b[1!z\u001b[0;3u","rmkx":"\u001b[!z\u001b[0;2u","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kich":"\u001b\u0001\r","kdch":"\u001b\u0002\r","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","smacs":"\u000f$\u003c1\u003e","rmacs":"\u000e$\u003c1\u003e"} +{"name":"avt-w-rv","aliases":["avt-w-rv-s"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c38\u003e","smcup":"\u001b[H\u001b[1;24;1;132w","rmcup":"\u001b[2w\u001b2\r\n","cnorm":"\u001b[=119l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[1!{","smkx":"\u001b[1!z\u001b[0;3u","rmkx":"\u001b[!z\u001b[0;2u","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kich":"\u001b\u0001\r","kdch":"\u001b\u0002\r","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","smacs":"\u000f$\u003c1\u003e","rmacs":"\u000e$\u003c1\u003e"} +{"name":"avt-w-rv-ns","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c38\u003e","smcup":"\u001b[H\u001b[1;24;1;132w","rmcup":"\u001b[w\u001b2\r\n","cnorm":"\u001b[=119l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[1!{","smkx":"\u001b[1!z\u001b[0;3u","rmkx":"\u001b[!z\u001b[0;2u","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kich":"\u001b\u0001\r","kdch":"\u001b\u0002\r","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","smacs":"\u000f$\u003c1\u003e","rmacs":"\u000e$\u003c1\u003e"} +{"name":"aws","cols":80,"lines":28,"clear":"\u000c","smul":"\u001bAUN","cup":"\u001bC%p2%c%p1%c","cuu1":"\u0001","pad":"\u0000","kbs":"\u0008","kcuu1":"\u0001","kcud1":"\u000b","kcub1":"\u000e","kcuf1":"\u0012","smacs":"\u001bAAN","rmacs":"\u001bAAF"} +{"name":"awsc","cols":80,"lines":24,"clear":"\u000c","smul":"\u001bAC","cup":"\u001bC%p2%c%p1%c","cuu1":"\u0001","pad":"\u0000","kbs":"\u0008","kcuu1":"\u0001","kcud1":"\u000b","kcub1":"\u000e","kcuf1":"\u0012","smacs":"\u001bAAN","rmacs":"\u001bAAF"} +{"name":"bantam","aliases":["pe550","pe6100"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bK$\u003c20\u003e","cup":"\u001bX%p1%' '%+%c\u001bY%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000"} +{"name":"basis","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*$\u003c300/\u003e","sgr0":"\u001b)","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"beacon","cols":80,"lines":32,"bell":"\u001bSTART\r\u001b37\r\u001bEND\r$\u003c1\u003e","clear":"\u001bZ$\u003c10\u003e","smcup":"\u001bSTART\r\u001b2,0\r\u001b12\r\u001bEND\r$\u003c10\u003e","sgr0":"\u001bSTART\r\u001b78\r\u001b70,0\r\u001bEND\r$\u003c20\u003e","smul":"\u001bSTART\r\u001b60,1\r\u001bEND\r","blink":"\u001bSTART\r\u001b61,1\r\u001bEND\r","rev":"\u001bSTART\r\u001b59,1\r\u001bEND\r","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c$\u003c20\u003e","cub1":"\u0008","cuu1":"\u001bU","pad":"\u0000"} +{"name":"beehive","aliases":["bee"],"cols":80,"lines":24,"clear":"\u001bE","sgr0":"\u001bd@","smul":"\u001bd`","cup":"\u001bF%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001b\u003e","kclr":"\u001bE"} +{"name":"beterm","cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?4h","rmkx":"\u001b[?4l","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[16~","kf7":"\u001b[17~","kf8":"\u001b[18~","kf9":"\u001b[19~","kf10":"\u001b[20~","kf11":"\u001b[21~","kf12":"\u001b[22~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"bg1.25","cols":85,"lines":64,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c150\u003e","sgr0":"\u001b[m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"%i\u001b[%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001bP","kf2":"\u001bQ","kf3":"\u001bR","kf4":"\u001bS","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"bg1.25nv","cols":85,"lines":64,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c150\u003e","sgr0":"\u001b[m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"%i\u001b[%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001bP","kf2":"\u001bQ","kf3":"\u001bR","kf4":"\u001bS","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"bg1.25rv","cols":85,"lines":64,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c150\u003e","sgr0":"\u001b[m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"%i\u001b[%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001bP","kf2":"\u001bQ","kf3":"\u001bR","kf4":"\u001bS","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"bg2.0","aliases":["bg3.10"],"cols":85,"lines":64,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c150\u003e","sgr0":"\u001b[m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"%i\u001b[%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"bg2.0rv","aliases":["bg3.10rv"],"cols":85,"lines":64,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c150\u003e","sgr0":"\u001b[m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"%i\u001b[%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"bitgraph","aliases":["bg2.0nv","bg3.10nv"],"cols":85,"lines":64,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c150\u003e","sgr0":"\u001b[m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"%i\u001b[%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"blit","aliases":["jerq"],"cols":87,"lines":72,"bell":"\u0007","clear":"\u000c","cup":"\u001bY%p2%' '%+%c%p1%' '%+%c","cub1":"\u001bD","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bx","kf2":"\u001by","kf3":"\u001bz","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"bobcat","aliases":["sbobcat"],"cols":128,"lines":47,"clear":"\u001bH\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p1%dy%p2%dC$\u003c6/\u003e","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","khome":"\u001bh","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"bq300","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?7l\u001b[?1l\u001b(B","rmcup":"\u001b[?7h","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","enacs":"\u001b(B\u001b)0"} +{"name":"bq300-8","cols":80,"lines":24,"bell":"\u0007","clear":"\ufffdH\ufffdJ","smcup":"\ufffd?7l\ufffd?1l\u001b(B","rmcup":"\ufffd?7h","cnorm":"\ufffd?25h","civis":"\ufffd?25l","sgr0":"\ufffd0m\u001b(B","smul":"\ufffd4m","bold":"\ufffd1m","blink":"\ufffd5m","rev":"\ufffd7m","rmkx":"\ufffd?1l\u001b\u003e","cup":"\ufffd%i%p1%d;%p2%dH","pad":"\u0000","kbs":"\u0008","kf1":"\ufffdP","kf2":"\ufffdQ","kf3":"\ufffdR","kf4":"\ufffdS","kf6":"\ufffd17~","kf7":"\ufffd18~","kf8":"\ufffd19~","kf9":"\ufffd20~","kf10":"\ufffd21~","kf11":"\ufffd23~","kf12":"\ufffd24~","kf13":"\ufffd25~","kf14":"\ufffd26~","kf15":"\ufffd28~","kf16":"\ufffd29~","kf17":"\ufffd31~","kf18":"\ufffd32~","kf19":"\ufffd33~","kf20":"\ufffd34~","kich":"\ufffd2~","kdch":"\ufffd3~","khlp":"\ufffd28~","kpp":"\ufffd5~","knp":"\ufffd6~","kcuu1":"\ufffdA","kcud1":"\ufffdB","kcub1":"\ufffdD","kcuf1":"\ufffdC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"bq300-8-pc","aliases":["Q306-8-pc"],"cols":80,"lines":24,"bell":"\u0007","clear":"\ufffdH\ufffdJ","smcup":"\ufffd?7l\ufffd?1l\u001b(B","rmcup":"\ufffd?7h","cnorm":"\ufffd?25h","civis":"\ufffd?25l","sgr0":"\ufffd0m\u001b(B","smul":"\ufffd4m","bold":"\ufffd1m","blink":"\ufffd5m","rev":"\ufffd7m","rmkx":"\ufffd?1l\u001b\u003e","cup":"\ufffd%i%p1%d;%p2%dH","pad":"\u0000","kbs":"\u0008","kf1":"\ufffd17~","kf2":"\ufffd18~","kf3":"\ufffd19~","kf4":"\ufffd20~","kf5":"\ufffd21~","kf6":"\ufffd23~","kf7":"\ufffd24~","kf8":"\ufffd25~","kf9":"\ufffd26~","kf10":"\ufffd28~","kf11":"\ufffd29~","kf12":"\ufffd31~","kich":"\ufffd2~","kdch":"\ufffd3~","khome":"\ufffd1~","kend":"\ufffd4~","kpp":"\ufffd5~","knp":"\ufffd6~","kcuu1":"\ufffdA","kcud1":"\ufffdB","kcub1":"\ufffdD","kcuf1":"\ufffdC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"bq300-8-pc-rv","cols":80,"lines":24,"bell":"\u0007","clear":"\ufffdH\ufffdJ","smcup":"\ufffd?7l\ufffd?1l\u001b(B","rmcup":"\ufffd?7h","cnorm":"\ufffd?25h","civis":"\ufffd?25l","sgr0":"\ufffd0m\u001b(B","smul":"\ufffd4m","bold":"\ufffd1m","blink":"\ufffd5m","rev":"\ufffd7m","rmkx":"\ufffd?1l\u001b\u003e","cup":"\ufffd%i%p1%d;%p2%dH","pad":"\u0000","kbs":"\u0008","kf1":"\ufffd17~","kf2":"\ufffd18~","kf3":"\ufffd19~","kf4":"\ufffd20~","kf5":"\ufffd21~","kf6":"\ufffd23~","kf7":"\ufffd24~","kf8":"\ufffd25~","kf9":"\ufffd26~","kf10":"\ufffd28~","kf11":"\ufffd29~","kf12":"\ufffd31~","kich":"\ufffd2~","kdch":"\ufffd3~","khome":"\ufffd1~","kend":"\ufffd4~","kpp":"\ufffd5~","knp":"\ufffd6~","kcuu1":"\ufffdA","kcud1":"\ufffdB","kcub1":"\ufffdD","kcuf1":"\ufffdC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"bq300-8-pc-w","cols":132,"lines":24,"bell":"\u0007","clear":"\ufffdH\ufffdJ","smcup":"\ufffd?7l\ufffd?1l\u001b(B","rmcup":"\ufffd?7h","cnorm":"\ufffd?25h","civis":"\ufffd?25l","sgr0":"\ufffd0m\u001b(B","smul":"\ufffd4m","bold":"\ufffd1m","blink":"\ufffd5m","rev":"\ufffd7m","rmkx":"\ufffd?1l\u001b\u003e","cup":"\ufffd%i%p1%d;%p2%dH","pad":"\u0000","kbs":"\u0008","kf1":"\ufffd17~","kf2":"\ufffd18~","kf3":"\ufffd19~","kf4":"\ufffd20~","kf5":"\ufffd21~","kf6":"\ufffd23~","kf7":"\ufffd24~","kf8":"\ufffd25~","kf9":"\ufffd26~","kf10":"\ufffd28~","kf11":"\ufffd29~","kf12":"\ufffd31~","kich":"\ufffd2~","kdch":"\ufffd3~","khome":"\ufffd1~","kend":"\ufffd4~","kpp":"\ufffd5~","knp":"\ufffd6~","kcuu1":"\ufffdA","kcud1":"\ufffdB","kcub1":"\ufffdD","kcuf1":"\ufffdC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"bq300-8-pc-w-rv","cols":132,"lines":24,"bell":"\u0007","clear":"\ufffdH\ufffdJ","smcup":"\ufffd?7l\ufffd?1l\u001b(B","rmcup":"\ufffd?7h","cnorm":"\ufffd?25h","civis":"\ufffd?25l","sgr0":"\ufffd0m\u001b(B","smul":"\ufffd4m","bold":"\ufffd1m","blink":"\ufffd5m","rev":"\ufffd7m","rmkx":"\ufffd?1l\u001b\u003e","cup":"\ufffd%i%p1%d;%p2%dH","pad":"\u0000","kbs":"\u0008","kf1":"\ufffd17~","kf2":"\ufffd18~","kf3":"\ufffd19~","kf4":"\ufffd20~","kf5":"\ufffd21~","kf6":"\ufffd23~","kf7":"\ufffd24~","kf8":"\ufffd25~","kf9":"\ufffd26~","kf10":"\ufffd28~","kf11":"\ufffd29~","kf12":"\ufffd31~","kich":"\ufffd2~","kdch":"\ufffd3~","khome":"\ufffd1~","kend":"\ufffd4~","kpp":"\ufffd5~","knp":"\ufffd6~","kcuu1":"\ufffdA","kcud1":"\ufffdB","kcub1":"\ufffdD","kcuf1":"\ufffdC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"bq300-8rv","cols":80,"lines":24,"bell":"\u0007","clear":"\ufffdH\ufffdJ","smcup":"\ufffd?7l\ufffd?1l\u001b(B","rmcup":"\ufffd?7h","cnorm":"\ufffd?25h","civis":"\ufffd?25l","sgr0":"\ufffd0m\u001b(B","smul":"\ufffd4m","bold":"\ufffd1m","blink":"\ufffd5m","rev":"\ufffd7m","rmkx":"\ufffd?1l\u001b\u003e","cup":"\ufffd%i%p1%d;%p2%dH","pad":"\u0000","kbs":"\u0008","kf1":"\ufffdP","kf2":"\ufffdQ","kf3":"\ufffdR","kf4":"\ufffdS","kf6":"\ufffd17~","kf7":"\ufffd18~","kf8":"\ufffd19~","kf9":"\ufffd20~","kf10":"\ufffd21~","kf11":"\ufffd23~","kf12":"\ufffd24~","kf13":"\ufffd25~","kf14":"\ufffd26~","kf15":"\ufffd28~","kf16":"\ufffd29~","kf17":"\ufffd31~","kf18":"\ufffd32~","kf19":"\ufffd33~","kf20":"\ufffd34~","kich":"\ufffd2~","kdch":"\ufffd3~","khlp":"\ufffd28~","kpp":"\ufffd5~","knp":"\ufffd6~","kcuu1":"\ufffdA","kcud1":"\ufffdB","kcub1":"\ufffdD","kcuf1":"\ufffdC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"bq300-8w","cols":132,"lines":24,"bell":"\u0007","clear":"\ufffdH\ufffdJ","smcup":"\ufffd?7l\ufffd?1l\u001b(B","rmcup":"\ufffd?7h","cnorm":"\ufffd?25h","civis":"\ufffd?25l","sgr0":"\ufffd0m\u001b(B","smul":"\ufffd4m","bold":"\ufffd1m","blink":"\ufffd5m","rev":"\ufffd7m","rmkx":"\ufffd?1l\u001b\u003e","cup":"\ufffd%i%p1%d;%p2%dH","pad":"\u0000","kbs":"\u0008","kf1":"\ufffdP","kf2":"\ufffdQ","kf3":"\ufffdR","kf4":"\ufffdS","kf6":"\ufffd17~","kf7":"\ufffd18~","kf8":"\ufffd19~","kf9":"\ufffd20~","kf10":"\ufffd21~","kf11":"\ufffd23~","kf12":"\ufffd24~","kf13":"\ufffd25~","kf14":"\ufffd26~","kf15":"\ufffd28~","kf16":"\ufffd29~","kf17":"\ufffd31~","kf18":"\ufffd32~","kf19":"\ufffd33~","kf20":"\ufffd34~","kich":"\ufffd2~","kdch":"\ufffd3~","khlp":"\ufffd28~","kpp":"\ufffd5~","knp":"\ufffd6~","kcuu1":"\ufffdA","kcud1":"\ufffdB","kcub1":"\ufffdD","kcuf1":"\ufffdC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"bq300-pc","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?7l\u001b[?1l\u001b(B","rmcup":"\u001b[?7h","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[17~","kf2":"\u001b[18~","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kf9":"\u001b[26~","kf10":"\u001b[28~","kf11":"\u001b[29~","kf12":"\u001b[31~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","enacs":"\u001b(B\u001b)0"} +{"name":"bq300-pc-rv","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?7l\u001b[?1l\u001b(B","rmcup":"\u001b[?7h","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[17~","kf2":"\u001b[18~","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kf9":"\u001b[26~","kf10":"\u001b[28~","kf11":"\u001b[29~","kf12":"\u001b[31~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","enacs":"\u001b(B\u001b)0"} +{"name":"bq300-pc-w","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?7l\u001b[?1l\u001b(B","rmcup":"\u001b[?7h","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[17~","kf2":"\u001b[18~","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kf9":"\u001b[26~","kf10":"\u001b[28~","kf11":"\u001b[29~","kf12":"\u001b[31~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","enacs":"\u001b(B\u001b)0"} +{"name":"bq300-pc-w-rv","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?7l\u001b[?1l\u001b(B","rmcup":"\u001b[?7h","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[17~","kf2":"\u001b[18~","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kf9":"\u001b[26~","kf10":"\u001b[28~","kf11":"\u001b[29~","kf12":"\u001b[31~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","enacs":"\u001b(B\u001b)0"} +{"name":"bq300-rv","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?7l\u001b[?1l\u001b(B","rmcup":"\u001b[?7h","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","enacs":"\u001b(B\u001b)0"} +{"name":"bq300-w","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?7l\u001b[?1l\u001b(B","rmcup":"\u001b[?7h","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","enacs":"\u001b(B\u001b)0"} +{"name":"bq300-w-8rv","cols":132,"lines":24,"bell":"\u0007","clear":"\ufffdH\ufffdJ","smcup":"\ufffd?7l\ufffd?1l\u001b(B","rmcup":"\ufffd?7h","cnorm":"\ufffd?25h","civis":"\ufffd?25l","sgr0":"\ufffd0m\u001b(B","smul":"\ufffd4m","bold":"\ufffd1m","blink":"\ufffd5m","rev":"\ufffd7m","rmkx":"\ufffd?1l\u001b\u003e","cup":"\ufffd%i%p1%d;%p2%dH","pad":"\u0000","kbs":"\u0008","kf1":"\ufffdP","kf2":"\ufffdQ","kf3":"\ufffdR","kf4":"\ufffdS","kf6":"\ufffd17~","kf7":"\ufffd18~","kf8":"\ufffd19~","kf9":"\ufffd20~","kf10":"\ufffd21~","kf11":"\ufffd23~","kf12":"\ufffd24~","kf13":"\ufffd25~","kf14":"\ufffd26~","kf15":"\ufffd28~","kf16":"\ufffd29~","kf17":"\ufffd31~","kf18":"\ufffd32~","kf19":"\ufffd33~","kf20":"\ufffd34~","kich":"\ufffd2~","kdch":"\ufffd3~","khlp":"\ufffd28~","kpp":"\ufffd5~","knp":"\ufffd6~","kcuu1":"\ufffdA","kcud1":"\ufffdB","kcub1":"\ufffdD","kcuf1":"\ufffdC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"bq300-w-rv","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?7l\u001b[?1l\u001b(B","rmcup":"\u001b[?7h","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","enacs":"\u001b(B\u001b)0"} +{"name":"bsdos-pc","cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001bc","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kich":"\u001b[L","khome":"\u001b[H","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"bsdos-pc-m","aliases":["bsdos-pc-mono"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001bc","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kich":"\u001b[L","khome":"\u001b[H","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m"} +{"name":"bsdos-pc-nobold","cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001bc","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kich":"\u001b[L","khome":"\u001b[H","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"bsdos-ppc","cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001bc","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kich":"\u001b[L","khome":"\u001b[H","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"bsdos-sparc","cols":80,"lines":34,"bell":"\u0007","clear":"\u000c","sgr0":"\u001b[m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[224z","kf2":"\u001b[225z","kf3":"\u001b[226z","kf4":"\u001b[227z","kf5":"\u001b[228z","kf6":"\u001b[229z","kf7":"\u001b[230z","kf8":"\u001b[231z","kf9":"\u001b[232z","kf10":"\u001b[233z","kf11":"\u001b[234z","kf12":"\u001b[235z","kdch":"","khome":"\u001b[214z","kend":"\u001b[220z","kpp":"\u001b[216z","knp":"\u001b[222z","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"c100","aliases":["c100-4p","c104","concept","concept100"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b?\u001b\u0005$\u003c2*\u003e","smcup":"\u001bU\u001bv 8p\u001bp\r\u001b\u0015$\u003c16\u003e","rmcup":"\u001bv $\u003c6\u003e\u001bp\r\n","sgr0":"\u001bN@","smul":"\u001bG","blink":"\u001bC","rev":"\u001bD","dim":"\u001bE","smkx":"\u001bX","rmkx":"\u001bx","cup":"\u001ba%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001b;","pad":"\u0000","kbs":"\u0008","kf1":"\u001b5","kf2":"\u001b6","kf3":"\u001b7","kf4":"\u001b8","kf5":"\u001b9","kf6":"\u001b:a","kf7":"\u001b:b","kf8":"\u001b:c","kich":"\u001b\u0010","kdch":"\u001b\u0011","khome":"\u001b?","kpp":"\u001b.","knp":"\u001b-","kcuu1":"\u001b;","kcud1":"\u001b\u003c","kcub1":"\u001b\u003e","kcuf1":"\u001b=","kcbt":"\u001b'"} +{"name":"c100-rv","aliases":["c100-rv-4p","concept100-rv"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b?\u001b\u0005$\u003c2*\u003e","smcup":"\u001bU\u001bv 8p\u001bp\r\u001b\u0015$\u003c16\u003e","rmcup":"\u001bv $\u003c6\u003e\u001bp\r\n","sgr0":"\u001bN@","smul":"\u001bG","blink":"\u001bC","rev":"\u001bD","dim":"\u001bE","smkx":"\u001bX","rmkx":"\u001bx","cup":"\u001ba%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001b;","pad":"\u0000","kbs":"\u0008","kf1":"\u001b5","kf2":"\u001b6","kf3":"\u001b7","kf4":"\u001b8","kf5":"\u001b9","kf6":"\u001b:a","kf7":"\u001b:b","kf8":"\u001b:c","kich":"\u001b\u0010","kdch":"\u001b\u0011","khome":"\u001b?","kpp":"\u001b.","knp":"\u001b-","kcuu1":"\u001b;","kcud1":"\u001b\u003c","kcub1":"\u001b\u003e","kcuf1":"\u001b=","kcbt":"\u001b'"} +{"name":"c108","aliases":["c108-8p","concept108","concept108-8p"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b?\u001b\u0005$\u003c2*\u003e","smcup":"\u001bU\u001bv 8p\u001bp\r\u001b\u0015","rmcup":"\u001bv \u0001p\u001bp\r\n","cnorm":"\u001bw","sgr0":"\u001bN@","smul":"\u001bG","blink":"\u001bC","rev":"\u001bD","dim":"\u001bE","smkx":"\u001bX","rmkx":"\u001bx","cup":"\u001ba%p1%?%p1%'_'%\u003e%t\u0001%'`'%-%;%' '%+%c%p2%?%p2%'_'%\u003e%t\u0001%'`'%-%;%' '%+%c","cub1":"\u0008","cuu1":"\u001b;","pad":"\u0000","kbs":"\u0008","kf1":"\u001b5","kf2":"\u001b6","kf3":"\u001b7","kf4":"\u001b8","kf5":"\u001b9","kf6":"\u001b:a","kf7":"\u001b:b","kf8":"\u001b:c","kich":"\u001b\u0010","kdch":"\u001b\u0011","khome":"\u001b?","kpp":"\u001b.","knp":"\u001b-","kcuu1":"\u001b;","kcud1":"\u001b\u003c","kcub1":"\u001b\u003e","kcuf1":"\u001b=","kcbt":"\u001b'","acsc":"jEkTl\\mMqLxU","smacs":"\u001bj!","rmacs":"\u001bj "} +{"name":"c108-4p","aliases":["concept108-4p"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b?\u001b\u0005$\u003c2*\u003e","smcup":"\u001bU\u001bv 8p\u001bp\r\u001b\u0015","rmcup":"\u001bv \u0001 p\u001bp\r\n","cnorm":"\u001bw","sgr0":"\u001bN@","smul":"\u001bG","blink":"\u001bC","rev":"\u001bD","dim":"\u001bE","smkx":"\u001bX","rmkx":"\u001bx","cup":"\u001ba%p1%?%p1%'_'%\u003e%t\u0001%'`'%-%;%' '%+%c%p2%?%p2%'_'%\u003e%t\u0001%'`'%-%;%' '%+%c","cub1":"\u0008","cuu1":"\u001b;","pad":"\u0000","kbs":"\u0008","kf1":"\u001b5","kf2":"\u001b6","kf3":"\u001b7","kf4":"\u001b8","kf5":"\u001b9","kf6":"\u001b:a","kf7":"\u001b:b","kf8":"\u001b:c","kich":"\u001b\u0010","kdch":"\u001b\u0011","khome":"\u001b?","kpp":"\u001b.","knp":"\u001b-","kcuu1":"\u001b;","kcud1":"\u001b\u003c","kcub1":"\u001b\u003e","kcuf1":"\u001b=","kcbt":"\u001b'","acsc":"jEkTl\\mMqLxU","smacs":"\u001bj!","rmacs":"\u001bj "} +{"name":"c108-rv","aliases":["c108-rv-8p"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b?\u001b\u0005$\u003c2*\u003e","smcup":"\u001bU\u001bv 8p\u001bp\r","rmcup":"\u001bv \u0002 p\u001bp\r\n","cnorm":"\u001bw","sgr0":"\u001bN@","smul":"\u001bG","blink":"\u001bC","rev":"\u001bD","dim":"\u001bE","smkx":"\u001bX","rmkx":"\u001bx","cup":"\u001ba%p1%?%p1%'_'%\u003e%t\u0001%'`'%-%;%' '%+%c%p2%?%p2%'_'%\u003e%t\u0001%'`'%-%;%' '%+%c","cub1":"\u0008","cuu1":"\u001b;","pad":"\u0000","kbs":"\u0008","kf1":"\u001b5","kf2":"\u001b6","kf3":"\u001b7","kf4":"\u001b8","kf5":"\u001b9","kf6":"\u001b:a","kf7":"\u001b:b","kf8":"\u001b:c","kich":"\u001b\u0010","kdch":"\u001b\u0011","khome":"\u001b?","kpp":"\u001b.","knp":"\u001b-","kcuu1":"\u001b;","kcud1":"\u001b\u003c","kcub1":"\u001b\u003e","kcuf1":"\u001b=","kcbt":"\u001b'","acsc":"jEkTl\\mMqLxU","smacs":"\u001bj!","rmacs":"\u001bj "} +{"name":"c108-rv-4p","aliases":["concept108rv4p"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b?\u001b\u0005$\u003c2*\u003e","smcup":"\u001bU\u001bv 8p\u001bp\r\u001b\u0015","rmcup":"\u001bv \u0001 p\u001bp\r\n","cnorm":"\u001bw","sgr0":"\u001bN@","smul":"\u001bG","blink":"\u001bC","rev":"\u001bD","dim":"\u001bE","smkx":"\u001bX","rmkx":"\u001bx","cup":"\u001ba%p1%?%p1%'_'%\u003e%t\u0001%'`'%-%;%' '%+%c%p2%?%p2%'_'%\u003e%t\u0001%'`'%-%;%' '%+%c","cub1":"\u0008","cuu1":"\u001b;","pad":"\u0000","kbs":"\u0008","kf1":"\u001b5","kf2":"\u001b6","kf3":"\u001b7","kf4":"\u001b8","kf5":"\u001b9","kf6":"\u001b:a","kf7":"\u001b:b","kf8":"\u001b:c","kich":"\u001b\u0010","kdch":"\u001b\u0011","khome":"\u001b?","kpp":"\u001b.","knp":"\u001b-","kcuu1":"\u001b;","kcud1":"\u001b\u003c","kcub1":"\u001b\u003e","kcuf1":"\u001b=","kcbt":"\u001b'","acsc":"jEkTl\\mMqLxU","smacs":"\u001bj!","rmacs":"\u001bj "} +{"name":"c108-w","aliases":["c108-w-8p","concept108-w-8","concept108-w8p"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b?\u001b\u0005$\u003c2*\u003e","smcup":"\u001bU\u001bv 8\u0001D\u001bp\r","rmcup":"\u001bv \u00010\u0001D\u001bp\r\n","cnorm":"\u001bw","sgr0":"\u001bN@","smul":"\u001bG","blink":"\u001bC","rev":"\u001bD","dim":"\u001bE","smkx":"\u001bX","rmkx":"\u001bx","cup":"\u001ba%p1%?%p1%'_'%\u003e%t\u0001%'`'%-%;%' '%+%c%p2%?%p2%'_'%\u003e%t\u0001%'`'%-%;%' '%+%c","cub1":"\u0008","cuu1":"\u001b;","pad":"\u0000","kbs":"\u0008","kf1":"\u001b5","kf2":"\u001b6","kf3":"\u001b7","kf4":"\u001b8","kf5":"\u001b9","kf6":"\u001b:a","kf7":"\u001b:b","kf8":"\u001b:c","kich":"\u001b\u0010","kdch":"\u001b\u0011","khome":"\u001b?","kpp":"\u001b.","knp":"\u001b-","kcuu1":"\u001b;","kcud1":"\u001b\u003c","kcub1":"\u001b\u003e","kcuf1":"\u001b=","kcbt":"\u001b'","acsc":"jEkTl\\mMqLxU","smacs":"\u001bj!","rmacs":"\u001bj "} +{"name":"ca22851","cols":80,"lines":24,"bell":"\u0007","clear":"\u000c$\u003c8\u003e","cup":"\u0002%i%p1%c%p2%c","cub1":"\u0015","cuu1":"\u0016","pad":"\u0000","khome":"\u001e","kcuu1":"\u0016","kcud1":"\u0017","kcub1":"\u0015"} +{"name":"cbblit","aliases":["fixterm"],"cols":88,"lines":72,"bell":"\u0007","clear":"\u000c","smul":"\u001bU\"","cup":"\u001bY%p2%' '%+%c%p1%' '%+%c","cub1":"\u001bD","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bx","kf2":"\u001by","kf3":"\u001bz","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"cbunix","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bL","smul":"\u001ba\u0001","cup":"\u001bG%p2%c%p1%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","khome":"\u001bE","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"cci","aliases":["cci1","z8001","zen8001"],"cols":80,"lines":24,"clear":"\u001bH\u001bJ","cnorm":"\u001bP","sgr0":"\u001bM ","smul":"\u001bM0","blink":"\u001bM\"","rev":"\u001bM$","dim":"\u001bM!","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"cdc456","cols":80,"lines":24,"bell":"\u0007","clear":"\u0019\u0018","cup":"\u001b1%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000"} +{"name":"cdc721","cols":80,"lines":24,"clear":"\u000c","cup":"\u0002%p2%' '%+%c%p1%' '%+%c","cuu1":"\u0017","pad":"\u0000","khome":"\u0019","kcuu1":"\u0017","kcud1":"\n","kcub1":"\u0008","kcuf1":"\t"} +{"name":"cdc721-esc","cols":80,"lines":30,"bell":"\u0007","clear":"\u000c","sgr0":"\u000f\u0015\u001d\u001eE\u001e\u0012\\","smul":"\u001c","blink":"\u000e","rev":"\u001eD","dim":"\u001c","smkx":"\u001e\u0012k","rmkx":"\u001e\u0012l","cup":"\u0002%p2%' '%+%c%p1%' '%+%c","cub1":"\u0008","cuu1":"\u0017","pad":"\u0000","kbs":"\u0008","kf1":"\u001er","kf2":"\u001es","kf3":"\u001et","kf4":"\u001eu","kf5":"\u001ev","kf6":"\u001ew","kf7":"\u001ex","kf8":"\u001ey","kf9":"\u001ez","khome":"\u0019","kcuu1":"\u0017","kcud1":"\u001a","kcub1":"\u0008","kcuf1":"\u0018"} +{"name":"cdc721ll","cols":132,"lines":24,"clear":"\u000c","cup":"\u0002%p2%' '%+%c%p1%' '%+%c","cuu1":"\u0017","pad":"\u0000","khome":"\u0019","kcuu1":"\u0017","kcud1":"\n","kcub1":"\u0008","kcuf1":"\t"} +{"name":"cdc752","cols":80,"lines":24,"bell":"\u0007","clear":"\u0018\u001b1 ","cup":"\u001b1%p2%' '%+%c%p1%' '%+%c","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000"} +{"name":"cdc756","cols":80,"lines":24,"bell":"\u0007","clear":"\u0019\u0018","cup":"\u001b1%p2%' '%+%c%p1%' '%+%c","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","kbs":"\u0008","kf1":"\u001bB","kf2":"\u001bC","kf3":"\u001bD","kf4":"\u001bE","kf5":"\u001bF","kf6":"\u001bG","kf7":"\u001bH","kf8":"\u001ba","kf9":"\u001bb","kich":"\u001bK","kdch":"\u001bI","khome":"\u0019","kcuu1":"\u001a","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u0015"} +{"name":"cg7900","aliases":["chromatics"],"cols":80,"lines":40,"bell":"\u0007","clear":"\u000c","smcup":"\u0001P0\u0001O1\u0001R1\u0001C4,\u0001c0,\u000c\u0001M0,42,WARNING DOUBLE ENTER ESCAPE and \u0015\u0001C1,\u0001c2,\u0001W0,0,79,39,","rmcup":"\u0001W0,40,85,48,\u000c\u0001W0,0,85,48,\u0001M0,40,","cup":"\u0001M%p2%d,%p1%d,","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000"} +{"name":"cit101","aliases":["citc"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J","cnorm":"\u001b[V\u001b8","sgr0":"\u001b[m","smul":"\u001b[4m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"cit101e","cols":80,"lines":24,"clear":"\u001b[H\u001b[J","smul":"\u001b[4m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%2d;%p2%2dH","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOm","kf6":"\u001bOl","kf7":"\u001bOM","kf8":"\u001bOn","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","smacs":"\u000e","rmacs":"\u000f"} +{"name":"cit101e-132","cols":132,"lines":24,"clear":"\u001b[H\u001b[J","smul":"\u001b[4m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%2d;%p2%2dH","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOm","kf6":"\u001bOl","kf7":"\u001bOM","kf8":"\u001bOn","kcuu1":"\u001b[A","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u001b[C","smacs":"\u000e","rmacs":"\u000f"} +{"name":"cit101e-n","cols":80,"lines":24,"clear":"\u001b[H\u001b[J","smul":"\u001b[4m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%2d;%p2%2dH","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOm","kf6":"\u001bOl","kf7":"\u001bOM","kf8":"\u001bOn","kcuu1":"\u001b[A","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u001b[C","smacs":"\u000e","rmacs":"\u000f"} +{"name":"cit101e-n132","cols":132,"lines":24,"clear":"\u001b[H\u001b[J","smul":"\u001b[4m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%2d;%p2%2dH","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOm","kf6":"\u001bOl","kf7":"\u001bOM","kf8":"\u001bOn","kcuu1":"\u001b[A","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u001b[C","smacs":"\u000e","rmacs":"\u000f"} +{"name":"cit101e-rv","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[\u003e5g\u001b[?7h\u001b[?5h","cnorm":"\u001b[0;3;4v","civis":"\u001b[1v","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"cit500","cols":80,"lines":64,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOQ","kf2":"\u001bOR","kf3":"\u001bOS","kf4":"\u001bOU","kf5":"\u001bOV","kf6":"\u001bOW","kf7":"\u001bOX","kf8":"\u001bOY","kf9":"\u001bOZ","kich":"\u001b[4h","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","smacs":"\u000e","rmacs":"\u000f"} +{"name":"cit80","aliases":["cit-80"],"cols":80,"lines":24,"clear":"\u001b[H\u001bJ","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%2d;%p2%2dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"coco3","aliases":["os9LII"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c$\u003c5*/\u003e","cnorm":"\u0005!","civis":"\u0005 ","sgr0":"\u001f!\u001b:\ufffd","smul":"\u001f\"","bold":"\u001b:\u0001","blink":"\u001f\"","rev":"\u001f ","cup":"\u0002%p2%' '%+%c%p1%' '%+%c$\u003c2/\u003e","cub1":"\u0008","cuu1":"\t","pad":"\u0000","kcuu1":"\u000c","kcud1":"\n","kcub1":"\u0008","kcuf1":"\t"} +{"name":"color_xterm","aliases":["cx","cx100"],"cols":80,"lines":65,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1;41s\u001b[?1;41h\u001b=","rmcup":"\u001b\u003e\u001b[?41;1r","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kich":"\u001b[2~","khome":"\u001b[7~","kend":"\u001b[8~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"commodore","aliases":["b-128"],"cols":80,"lines":24,"clear":"\u001b\u0006$\u003c10/\u003e","cup":"\u001b\u000b%p1%2d,%p2%2d,$\u003c20/\u003e","cuu1":"\u0010","pad":"\u0000","khome":"\u001b\u0005","kcuu1":"\u0010","kcud1":"\n","kcub1":"\u0002","kcuf1":"\u0006"} +{"name":"cons25","aliases":["ansi80x25","ansis"],"cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[=0C","sgr0":"\u001b[m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[30;1m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","kf10":"\u001b[V","kf11":"\u001b[W","kf12":"\u001b[X","kf13":"\u001b[Y","kf14":"\u001b[Z","kf15":"\u001b[a","kf16":"\u001b[b","kf17":"\u001b[c","kf18":"\u001b[d","kf19":"\u001b[e","kf20":"\u001b[f","kf21":"\u001b[g","kf22":"\u001b[h","kf23":"\u001b[i","kf24":"\u001b[j","kf25":"\u001b[k","kf26":"\u001b[l","kf27":"\u001b[m","kf28":"\u001b[n","kf29":"\u001b[o","kf30":"\u001b[p","kf31":"\u001b[q","kf32":"\u001b[r","kf33":"\u001b[s","kf34":"\u001b[t","kf35":"\u001b[u","kf36":"\u001b[v","kf37":"\u001b[w","kf38":"\u001b[x","kf39":"\u001b[y","kf40":"\u001b[z","kf41":"\u001b[@","kf42":"\u001b[[","kf43":"\u001b[\\","kf44":"\u001b[]","kf45":"\u001b[^","kf46":"\u001b[_","kf47":"\u001b[`","kf48":"\u001b[{","kich":"\u001b[L","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdi\u0015j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd~\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"cons25-m","aliases":["ansi80x25-mono","ansis-mono"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[=0C","sgr0":"\u001b[m","smul":"\u001b[4m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","kf10":"\u001b[V","kf11":"\u001b[W","kf12":"\u001b[X","kf13":"\u001b[Y","kf14":"\u001b[Z","kf15":"\u001b[a","kf16":"\u001b[b","kf17":"\u001b[c","kf18":"\u001b[d","kf19":"\u001b[e","kf20":"\u001b[f","kf21":"\u001b[g","kf22":"\u001b[h","kf23":"\u001b[i","kf24":"\u001b[j","kf25":"\u001b[k","kf26":"\u001b[l","kf27":"\u001b[m","kf28":"\u001b[n","kf29":"\u001b[o","kf30":"\u001b[p","kf31":"\u001b[q","kf32":"\u001b[r","kf33":"\u001b[s","kf34":"\u001b[t","kf35":"\u001b[u","kf36":"\u001b[v","kf37":"\u001b[w","kf38":"\u001b[x","kf39":"\u001b[y","kf40":"\u001b[z","kf41":"\u001b[@","kf42":"\u001b[[","kf43":"\u001b[\\","kf44":"\u001b[]","kf45":"\u001b[^","kf46":"\u001b[_","kf47":"\u001b[`","kf48":"\u001b[{","kich":"\u001b[L","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdi\u0015j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd~\ufffd"} +{"name":"cons25l1","aliases":["cons25-iso8859"],"cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[=0C","sgr0":"\u001b[m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[30;1m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","kf10":"\u001b[V","kf11":"\u001b[W","kf12":"\u001b[X","kf13":"\u001b[Y","kf14":"\u001b[Z","kf15":"\u001b[a","kf16":"\u001b[b","kf17":"\u001b[c","kf18":"\u001b[d","kf19":"\u001b[e","kf20":"\u001b[f","kf21":"\u001b[g","kf22":"\u001b[h","kf23":"\u001b[i","kf24":"\u001b[j","kf25":"\u001b[k","kf26":"\u001b[l","kf27":"\u001b[m","kf28":"\u001b[n","kf29":"\u001b[o","kf30":"\u001b[p","kf31":"\u001b[q","kf32":"\u001b[r","kf33":"\u001b[s","kf34":"\u001b[t","kf35":"\u001b[u","kf36":"\u001b[v","kf37":"\u001b[w","kf38":"\u001b[x","kf39":"\u001b[y","kf40":"\u001b[z","kf41":"\u001b[@","kf42":"\u001b[[","kf43":"\u001b[\\","kf44":"\u001b[]","kf45":"\u001b[^","kf46":"\u001b[_","kf47":"\u001b[`","kf48":"\u001b[{","kich":"\u001b[L","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"+\ufffd,\ufffd-\u0018.\u0019`\ufffda\ufffdf\ufffdg\ufffdi\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo\ufffdp\ufffdq\ufffdr\ufffds\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd~\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"cons25l1-m","aliases":["cons25-iso-m"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[=0C","sgr0":"\u001b[m","smul":"\u001b[4m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","kf10":"\u001b[V","kf11":"\u001b[W","kf12":"\u001b[X","kf13":"\u001b[Y","kf14":"\u001b[Z","kf15":"\u001b[a","kf16":"\u001b[b","kf17":"\u001b[c","kf18":"\u001b[d","kf19":"\u001b[e","kf20":"\u001b[f","kf21":"\u001b[g","kf22":"\u001b[h","kf23":"\u001b[i","kf24":"\u001b[j","kf25":"\u001b[k","kf26":"\u001b[l","kf27":"\u001b[m","kf28":"\u001b[n","kf29":"\u001b[o","kf30":"\u001b[p","kf31":"\u001b[q","kf32":"\u001b[r","kf33":"\u001b[s","kf34":"\u001b[t","kf35":"\u001b[u","kf36":"\u001b[v","kf37":"\u001b[w","kf38":"\u001b[x","kf39":"\u001b[y","kf40":"\u001b[z","kf41":"\u001b[@","kf42":"\u001b[[","kf43":"\u001b[\\","kf44":"\u001b[]","kf45":"\u001b[^","kf46":"\u001b[_","kf47":"\u001b[`","kf48":"\u001b[{","kich":"\u001b[L","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"+\ufffd,\ufffd-\u0018.\u0019`\ufffda\ufffdf\ufffdg\ufffdi\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo\ufffdp\ufffdq\ufffdr\ufffds\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd~\ufffd"} +{"name":"cons25r","aliases":["cons25-koi8-r","ibmpc3r","pc3r"],"cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[=0C","sgr0":"\u001b[m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[30;1m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","kf10":"\u001b[V","kf11":"\u001b[W","kf12":"\u001b[X","kf13":"\u001b[Y","kf14":"\u001b[Z","kf15":"\u001b[a","kf16":"\u001b[b","kf17":"\u001b[c","kf18":"\u001b[d","kf19":"\u001b[e","kf20":"\u001b[f","kf21":"\u001b[g","kf22":"\u001b[h","kf23":"\u001b[i","kf24":"\u001b[j","kf25":"\u001b[k","kf26":"\u001b[l","kf27":"\u001b[m","kf28":"\u001b[n","kf29":"\u001b[o","kf30":"\u001b[p","kf31":"\u001b[q","kf32":"\u001b[r","kf33":"\u001b[s","kf34":"\u001b[t","kf35":"\u001b[u","kf36":"\u001b[v","kf37":"\u001b[w","kf38":"\u001b[x","kf39":"\u001b[y","kf40":"\u001b[z","kf41":"\u001b[@","kf42":"\u001b[[","kf43":"\u001b[\\","kf44":"\u001b[]","kf45":"\u001b[^","kf46":"\u001b[_","kf47":"\u001b[`","kf48":"\u001b[{","kich":"\u001b[L","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdh\ufffdi\u0015j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd~\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"cons25r-m","aliases":["cons25-koi8r-m","ibmpc3r-mono","pc3r-m"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[=0C","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[30;1m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","kf10":"\u001b[V","kf11":"\u001b[W","kf12":"\u001b[X","kf13":"\u001b[Y","kf14":"\u001b[Z","kf15":"\u001b[a","kf16":"\u001b[b","kf17":"\u001b[c","kf18":"\u001b[d","kf19":"\u001b[e","kf20":"\u001b[f","kf21":"\u001b[g","kf22":"\u001b[h","kf23":"\u001b[i","kf24":"\u001b[j","kf25":"\u001b[k","kf26":"\u001b[l","kf27":"\u001b[m","kf28":"\u001b[n","kf29":"\u001b[o","kf30":"\u001b[p","kf31":"\u001b[q","kf32":"\u001b[r","kf33":"\u001b[s","kf34":"\u001b[t","kf35":"\u001b[u","kf36":"\u001b[v","kf37":"\u001b[w","kf38":"\u001b[x","kf39":"\u001b[y","kf40":"\u001b[z","kf41":"\u001b[@","kf42":"\u001b[[","kf43":"\u001b[\\","kf44":"\u001b[]","kf45":"\u001b[^","kf46":"\u001b[_","kf47":"\u001b[`","kf48":"\u001b[{","kich":"\u001b[L","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdh\ufffdi\u0015j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd~\ufffd"} +{"name":"cons25w","aliases":["ansi80x25-raw","ansiw"],"cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[=0C","sgr0":"\u001b[m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[30;1m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","kf10":"\u001b[V","kf11":"\u001b[W","kf12":"\u001b[X","kf13":"\u001b[Y","kf14":"\u001b[Z","kf15":"\u001b[a","kf16":"\u001b[b","kf17":"\u001b[c","kf18":"\u001b[d","kf19":"\u001b[e","kf20":"\u001b[f","kf21":"\u001b[g","kf22":"\u001b[h","kf23":"\u001b[i","kf24":"\u001b[j","kf25":"\u001b[k","kf26":"\u001b[l","kf27":"\u001b[m","kf28":"\u001b[n","kf29":"\u001b[o","kf30":"\u001b[p","kf31":"\u001b[q","kf32":"\u001b[r","kf33":"\u001b[s","kf34":"\u001b[t","kf35":"\u001b[u","kf36":"\u001b[v","kf37":"\u001b[w","kf38":"\u001b[x","kf39":"\u001b[y","kf40":"\u001b[z","kf41":"\u001b[@","kf42":"\u001b[[","kf43":"\u001b[\\","kf44":"\u001b[]","kf45":"\u001b[^","kf46":"\u001b[_","kf47":"\u001b[`","kf48":"\u001b[{","kich":"\u001b[L","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"cons30","aliases":["ansi80x30"],"cols":80,"lines":30,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[=0C","sgr0":"\u001b[m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[30;1m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","kf10":"\u001b[V","kf11":"\u001b[W","kf12":"\u001b[X","kf13":"\u001b[Y","kf14":"\u001b[Z","kf15":"\u001b[a","kf16":"\u001b[b","kf17":"\u001b[c","kf18":"\u001b[d","kf19":"\u001b[e","kf20":"\u001b[f","kf21":"\u001b[g","kf22":"\u001b[h","kf23":"\u001b[i","kf24":"\u001b[j","kf25":"\u001b[k","kf26":"\u001b[l","kf27":"\u001b[m","kf28":"\u001b[n","kf29":"\u001b[o","kf30":"\u001b[p","kf31":"\u001b[q","kf32":"\u001b[r","kf33":"\u001b[s","kf34":"\u001b[t","kf35":"\u001b[u","kf36":"\u001b[v","kf37":"\u001b[w","kf38":"\u001b[x","kf39":"\u001b[y","kf40":"\u001b[z","kf41":"\u001b[@","kf42":"\u001b[[","kf43":"\u001b[\\","kf44":"\u001b[]","kf45":"\u001b[^","kf46":"\u001b[_","kf47":"\u001b[`","kf48":"\u001b[{","kich":"\u001b[L","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdi\u0015j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd~\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"cons30-m","aliases":["ansi80x30-mono"],"cols":80,"lines":30,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[=0C","sgr0":"\u001b[m","smul":"\u001b[4m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","kf10":"\u001b[V","kf11":"\u001b[W","kf12":"\u001b[X","kf13":"\u001b[Y","kf14":"\u001b[Z","kf15":"\u001b[a","kf16":"\u001b[b","kf17":"\u001b[c","kf18":"\u001b[d","kf19":"\u001b[e","kf20":"\u001b[f","kf21":"\u001b[g","kf22":"\u001b[h","kf23":"\u001b[i","kf24":"\u001b[j","kf25":"\u001b[k","kf26":"\u001b[l","kf27":"\u001b[m","kf28":"\u001b[n","kf29":"\u001b[o","kf30":"\u001b[p","kf31":"\u001b[q","kf32":"\u001b[r","kf33":"\u001b[s","kf34":"\u001b[t","kf35":"\u001b[u","kf36":"\u001b[v","kf37":"\u001b[w","kf38":"\u001b[x","kf39":"\u001b[y","kf40":"\u001b[z","kf41":"\u001b[@","kf42":"\u001b[[","kf43":"\u001b[\\","kf44":"\u001b[]","kf45":"\u001b[^","kf46":"\u001b[_","kf47":"\u001b[`","kf48":"\u001b[{","kich":"\u001b[L","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdi\u0015j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd~\ufffd"} +{"name":"cons43","aliases":["ansi80x43"],"cols":80,"lines":43,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[=0C","sgr0":"\u001b[m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[30;1m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","kf10":"\u001b[V","kf11":"\u001b[W","kf12":"\u001b[X","kf13":"\u001b[Y","kf14":"\u001b[Z","kf15":"\u001b[a","kf16":"\u001b[b","kf17":"\u001b[c","kf18":"\u001b[d","kf19":"\u001b[e","kf20":"\u001b[f","kf21":"\u001b[g","kf22":"\u001b[h","kf23":"\u001b[i","kf24":"\u001b[j","kf25":"\u001b[k","kf26":"\u001b[l","kf27":"\u001b[m","kf28":"\u001b[n","kf29":"\u001b[o","kf30":"\u001b[p","kf31":"\u001b[q","kf32":"\u001b[r","kf33":"\u001b[s","kf34":"\u001b[t","kf35":"\u001b[u","kf36":"\u001b[v","kf37":"\u001b[w","kf38":"\u001b[x","kf39":"\u001b[y","kf40":"\u001b[z","kf41":"\u001b[@","kf42":"\u001b[[","kf43":"\u001b[\\","kf44":"\u001b[]","kf45":"\u001b[^","kf46":"\u001b[_","kf47":"\u001b[`","kf48":"\u001b[{","kich":"\u001b[L","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdi\u0015j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd~\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"cons43-m","aliases":["ansi80x43-mono"],"cols":80,"lines":43,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[=0C","sgr0":"\u001b[m","smul":"\u001b[4m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","kf10":"\u001b[V","kf11":"\u001b[W","kf12":"\u001b[X","kf13":"\u001b[Y","kf14":"\u001b[Z","kf15":"\u001b[a","kf16":"\u001b[b","kf17":"\u001b[c","kf18":"\u001b[d","kf19":"\u001b[e","kf20":"\u001b[f","kf21":"\u001b[g","kf22":"\u001b[h","kf23":"\u001b[i","kf24":"\u001b[j","kf25":"\u001b[k","kf26":"\u001b[l","kf27":"\u001b[m","kf28":"\u001b[n","kf29":"\u001b[o","kf30":"\u001b[p","kf31":"\u001b[q","kf32":"\u001b[r","kf33":"\u001b[s","kf34":"\u001b[t","kf35":"\u001b[u","kf36":"\u001b[v","kf37":"\u001b[w","kf38":"\u001b[x","kf39":"\u001b[y","kf40":"\u001b[z","kf41":"\u001b[@","kf42":"\u001b[[","kf43":"\u001b[\\","kf44":"\u001b[]","kf45":"\u001b[^","kf46":"\u001b[_","kf47":"\u001b[`","kf48":"\u001b[{","kich":"\u001b[L","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdi\u0015j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd~\ufffd"} +{"name":"cons50","aliases":["ansi80x50","ansil"],"cols":80,"lines":50,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[=0C","sgr0":"\u001b[m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[30;1m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","kf10":"\u001b[V","kf11":"\u001b[W","kf12":"\u001b[X","kf13":"\u001b[Y","kf14":"\u001b[Z","kf15":"\u001b[a","kf16":"\u001b[b","kf17":"\u001b[c","kf18":"\u001b[d","kf19":"\u001b[e","kf20":"\u001b[f","kf21":"\u001b[g","kf22":"\u001b[h","kf23":"\u001b[i","kf24":"\u001b[j","kf25":"\u001b[k","kf26":"\u001b[l","kf27":"\u001b[m","kf28":"\u001b[n","kf29":"\u001b[o","kf30":"\u001b[p","kf31":"\u001b[q","kf32":"\u001b[r","kf33":"\u001b[s","kf34":"\u001b[t","kf35":"\u001b[u","kf36":"\u001b[v","kf37":"\u001b[w","kf38":"\u001b[x","kf39":"\u001b[y","kf40":"\u001b[z","kf41":"\u001b[@","kf42":"\u001b[[","kf43":"\u001b[\\","kf44":"\u001b[]","kf45":"\u001b[^","kf46":"\u001b[_","kf47":"\u001b[`","kf48":"\u001b[{","kich":"\u001b[L","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdi\u0015j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd~\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"cons50-m","aliases":["ansi80x50-mono","ansil-mono"],"cols":80,"lines":50,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[=0C","sgr0":"\u001b[m","smul":"\u001b[4m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","kf10":"\u001b[V","kf11":"\u001b[W","kf12":"\u001b[X","kf13":"\u001b[Y","kf14":"\u001b[Z","kf15":"\u001b[a","kf16":"\u001b[b","kf17":"\u001b[c","kf18":"\u001b[d","kf19":"\u001b[e","kf20":"\u001b[f","kf21":"\u001b[g","kf22":"\u001b[h","kf23":"\u001b[i","kf24":"\u001b[j","kf25":"\u001b[k","kf26":"\u001b[l","kf27":"\u001b[m","kf28":"\u001b[n","kf29":"\u001b[o","kf30":"\u001b[p","kf31":"\u001b[q","kf32":"\u001b[r","kf33":"\u001b[s","kf34":"\u001b[t","kf35":"\u001b[u","kf36":"\u001b[v","kf37":"\u001b[w","kf38":"\u001b[x","kf39":"\u001b[y","kf40":"\u001b[z","kf41":"\u001b[@","kf42":"\u001b[[","kf43":"\u001b[\\","kf44":"\u001b[]","kf45":"\u001b[^","kf46":"\u001b[_","kf47":"\u001b[`","kf48":"\u001b[{","kich":"\u001b[L","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdi\u0015j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd~\ufffd"} +{"name":"cons50l1","aliases":["cons50-iso8859"],"cols":80,"lines":50,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[=0C","sgr0":"\u001b[m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[30;1m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","kf10":"\u001b[V","kf11":"\u001b[W","kf12":"\u001b[X","kf13":"\u001b[Y","kf14":"\u001b[Z","kf15":"\u001b[a","kf16":"\u001b[b","kf17":"\u001b[c","kf18":"\u001b[d","kf19":"\u001b[e","kf20":"\u001b[f","kf21":"\u001b[g","kf22":"\u001b[h","kf23":"\u001b[i","kf24":"\u001b[j","kf25":"\u001b[k","kf26":"\u001b[l","kf27":"\u001b[m","kf28":"\u001b[n","kf29":"\u001b[o","kf30":"\u001b[p","kf31":"\u001b[q","kf32":"\u001b[r","kf33":"\u001b[s","kf34":"\u001b[t","kf35":"\u001b[u","kf36":"\u001b[v","kf37":"\u001b[w","kf38":"\u001b[x","kf39":"\u001b[y","kf40":"\u001b[z","kf41":"\u001b[@","kf42":"\u001b[[","kf43":"\u001b[\\","kf44":"\u001b[]","kf45":"\u001b[^","kf46":"\u001b[_","kf47":"\u001b[`","kf48":"\u001b[{","kich":"\u001b[L","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"+\ufffd,\ufffd-\u0018.\u0019`\ufffda\ufffdf\ufffdg\ufffdi\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo\ufffdp\ufffdq\ufffdr\ufffds\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd~\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"cons50l1-m","aliases":["cons50-iso-m"],"cols":80,"lines":50,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[=0C","sgr0":"\u001b[m","smul":"\u001b[4m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","kf10":"\u001b[V","kf11":"\u001b[W","kf12":"\u001b[X","kf13":"\u001b[Y","kf14":"\u001b[Z","kf15":"\u001b[a","kf16":"\u001b[b","kf17":"\u001b[c","kf18":"\u001b[d","kf19":"\u001b[e","kf20":"\u001b[f","kf21":"\u001b[g","kf22":"\u001b[h","kf23":"\u001b[i","kf24":"\u001b[j","kf25":"\u001b[k","kf26":"\u001b[l","kf27":"\u001b[m","kf28":"\u001b[n","kf29":"\u001b[o","kf30":"\u001b[p","kf31":"\u001b[q","kf32":"\u001b[r","kf33":"\u001b[s","kf34":"\u001b[t","kf35":"\u001b[u","kf36":"\u001b[v","kf37":"\u001b[w","kf38":"\u001b[x","kf39":"\u001b[y","kf40":"\u001b[z","kf41":"\u001b[@","kf42":"\u001b[[","kf43":"\u001b[\\","kf44":"\u001b[]","kf45":"\u001b[^","kf46":"\u001b[_","kf47":"\u001b[`","kf48":"\u001b[{","kich":"\u001b[L","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"+\ufffd,\ufffd-\u0018.\u0019`\ufffda\ufffdf\ufffdg\ufffdi\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo\ufffdp\ufffdq\ufffdr\ufffds\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd~\ufffd"} +{"name":"cons50r","aliases":["cons50-koi8r"],"cols":80,"lines":50,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[=0C","sgr0":"\u001b[m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[30;1m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","kf10":"\u001b[V","kf11":"\u001b[W","kf12":"\u001b[X","kf13":"\u001b[Y","kf14":"\u001b[Z","kf15":"\u001b[a","kf16":"\u001b[b","kf17":"\u001b[c","kf18":"\u001b[d","kf19":"\u001b[e","kf20":"\u001b[f","kf21":"\u001b[g","kf22":"\u001b[h","kf23":"\u001b[i","kf24":"\u001b[j","kf25":"\u001b[k","kf26":"\u001b[l","kf27":"\u001b[m","kf28":"\u001b[n","kf29":"\u001b[o","kf30":"\u001b[p","kf31":"\u001b[q","kf32":"\u001b[r","kf33":"\u001b[s","kf34":"\u001b[t","kf35":"\u001b[u","kf36":"\u001b[v","kf37":"\u001b[w","kf38":"\u001b[x","kf39":"\u001b[y","kf40":"\u001b[z","kf41":"\u001b[@","kf42":"\u001b[[","kf43":"\u001b[\\","kf44":"\u001b[]","kf45":"\u001b[^","kf46":"\u001b[_","kf47":"\u001b[`","kf48":"\u001b[{","kich":"\u001b[L","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdh\ufffdi\u0015j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd~\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"cons50r-m","aliases":["cons50-koi8r-m"],"cols":80,"lines":50,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[=0C","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[30;1m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","kf10":"\u001b[V","kf11":"\u001b[W","kf12":"\u001b[X","kf13":"\u001b[Y","kf14":"\u001b[Z","kf15":"\u001b[a","kf16":"\u001b[b","kf17":"\u001b[c","kf18":"\u001b[d","kf19":"\u001b[e","kf20":"\u001b[f","kf21":"\u001b[g","kf22":"\u001b[h","kf23":"\u001b[i","kf24":"\u001b[j","kf25":"\u001b[k","kf26":"\u001b[l","kf27":"\u001b[m","kf28":"\u001b[n","kf29":"\u001b[o","kf30":"\u001b[p","kf31":"\u001b[q","kf32":"\u001b[r","kf33":"\u001b[s","kf34":"\u001b[t","kf35":"\u001b[u","kf36":"\u001b[v","kf37":"\u001b[w","kf38":"\u001b[x","kf39":"\u001b[y","kf40":"\u001b[z","kf41":"\u001b[@","kf42":"\u001b[[","kf43":"\u001b[\\","kf44":"\u001b[]","kf45":"\u001b[^","kf46":"\u001b[_","kf47":"\u001b[`","kf48":"\u001b[{","kich":"\u001b[L","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdh\ufffdi\u0015j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd~\ufffd"} +{"name":"cons60","aliases":["ansi80x60"],"cols":80,"lines":60,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[=0C","sgr0":"\u001b[m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[30;1m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","kf10":"\u001b[V","kf11":"\u001b[W","kf12":"\u001b[X","kf13":"\u001b[Y","kf14":"\u001b[Z","kf15":"\u001b[a","kf16":"\u001b[b","kf17":"\u001b[c","kf18":"\u001b[d","kf19":"\u001b[e","kf20":"\u001b[f","kf21":"\u001b[g","kf22":"\u001b[h","kf23":"\u001b[i","kf24":"\u001b[j","kf25":"\u001b[k","kf26":"\u001b[l","kf27":"\u001b[m","kf28":"\u001b[n","kf29":"\u001b[o","kf30":"\u001b[p","kf31":"\u001b[q","kf32":"\u001b[r","kf33":"\u001b[s","kf34":"\u001b[t","kf35":"\u001b[u","kf36":"\u001b[v","kf37":"\u001b[w","kf38":"\u001b[x","kf39":"\u001b[y","kf40":"\u001b[z","kf41":"\u001b[@","kf42":"\u001b[[","kf43":"\u001b[\\","kf44":"\u001b[]","kf45":"\u001b[^","kf46":"\u001b[_","kf47":"\u001b[`","kf48":"\u001b[{","kich":"\u001b[L","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdi\u0015j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd~\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"cons60-m","aliases":["ansi80x60-mono"],"cols":80,"lines":60,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[=0C","sgr0":"\u001b[m","smul":"\u001b[4m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","kf10":"\u001b[V","kf11":"\u001b[W","kf12":"\u001b[X","kf13":"\u001b[Y","kf14":"\u001b[Z","kf15":"\u001b[a","kf16":"\u001b[b","kf17":"\u001b[c","kf18":"\u001b[d","kf19":"\u001b[e","kf20":"\u001b[f","kf21":"\u001b[g","kf22":"\u001b[h","kf23":"\u001b[i","kf24":"\u001b[j","kf25":"\u001b[k","kf26":"\u001b[l","kf27":"\u001b[m","kf28":"\u001b[n","kf29":"\u001b[o","kf30":"\u001b[p","kf31":"\u001b[q","kf32":"\u001b[r","kf33":"\u001b[s","kf34":"\u001b[t","kf35":"\u001b[u","kf36":"\u001b[v","kf37":"\u001b[w","kf38":"\u001b[x","kf39":"\u001b[y","kf40":"\u001b[z","kf41":"\u001b[@","kf42":"\u001b[[","kf43":"\u001b[\\","kf44":"\u001b[]","kf45":"\u001b[^","kf46":"\u001b[_","kf47":"\u001b[`","kf48":"\u001b[{","kich":"\u001b[L","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdi\u0015j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd~\ufffd"} +{"name":"cons60l1","aliases":["cons60-iso"],"cols":80,"lines":60,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[=0C","sgr0":"\u001b[m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[30;1m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","kf10":"\u001b[V","kf11":"\u001b[W","kf12":"\u001b[X","kf13":"\u001b[Y","kf14":"\u001b[Z","kf15":"\u001b[a","kf16":"\u001b[b","kf17":"\u001b[c","kf18":"\u001b[d","kf19":"\u001b[e","kf20":"\u001b[f","kf21":"\u001b[g","kf22":"\u001b[h","kf23":"\u001b[i","kf24":"\u001b[j","kf25":"\u001b[k","kf26":"\u001b[l","kf27":"\u001b[m","kf28":"\u001b[n","kf29":"\u001b[o","kf30":"\u001b[p","kf31":"\u001b[q","kf32":"\u001b[r","kf33":"\u001b[s","kf34":"\u001b[t","kf35":"\u001b[u","kf36":"\u001b[v","kf37":"\u001b[w","kf38":"\u001b[x","kf39":"\u001b[y","kf40":"\u001b[z","kf41":"\u001b[@","kf42":"\u001b[[","kf43":"\u001b[\\","kf44":"\u001b[]","kf45":"\u001b[^","kf46":"\u001b[_","kf47":"\u001b[`","kf48":"\u001b[{","kich":"\u001b[L","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"+\ufffd,\ufffd-\u0018.\u0019`\ufffda\ufffdf\ufffdg\ufffdi\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo\ufffdp\ufffdq\ufffdr\ufffds\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd~\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"cons60l1-m","aliases":["cons60-iso-m"],"cols":80,"lines":60,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[=0C","sgr0":"\u001b[m","smul":"\u001b[4m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","kf10":"\u001b[V","kf11":"\u001b[W","kf12":"\u001b[X","kf13":"\u001b[Y","kf14":"\u001b[Z","kf15":"\u001b[a","kf16":"\u001b[b","kf17":"\u001b[c","kf18":"\u001b[d","kf19":"\u001b[e","kf20":"\u001b[f","kf21":"\u001b[g","kf22":"\u001b[h","kf23":"\u001b[i","kf24":"\u001b[j","kf25":"\u001b[k","kf26":"\u001b[l","kf27":"\u001b[m","kf28":"\u001b[n","kf29":"\u001b[o","kf30":"\u001b[p","kf31":"\u001b[q","kf32":"\u001b[r","kf33":"\u001b[s","kf34":"\u001b[t","kf35":"\u001b[u","kf36":"\u001b[v","kf37":"\u001b[w","kf38":"\u001b[x","kf39":"\u001b[y","kf40":"\u001b[z","kf41":"\u001b[@","kf42":"\u001b[[","kf43":"\u001b[\\","kf44":"\u001b[]","kf45":"\u001b[^","kf46":"\u001b[_","kf47":"\u001b[`","kf48":"\u001b[{","kich":"\u001b[L","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"+\ufffd,\ufffd-\u0018.\u0019`\ufffda\ufffdf\ufffdg\ufffdi\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo\ufffdp\ufffdq\ufffdr\ufffds\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd~\ufffd"} +{"name":"cons60r","aliases":["cons60-koi8r"],"cols":80,"lines":60,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[=0C","sgr0":"\u001b[m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[30;1m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","kf10":"\u001b[V","kf11":"\u001b[W","kf12":"\u001b[X","kf13":"\u001b[Y","kf14":"\u001b[Z","kf15":"\u001b[a","kf16":"\u001b[b","kf17":"\u001b[c","kf18":"\u001b[d","kf19":"\u001b[e","kf20":"\u001b[f","kf21":"\u001b[g","kf22":"\u001b[h","kf23":"\u001b[i","kf24":"\u001b[j","kf25":"\u001b[k","kf26":"\u001b[l","kf27":"\u001b[m","kf28":"\u001b[n","kf29":"\u001b[o","kf30":"\u001b[p","kf31":"\u001b[q","kf32":"\u001b[r","kf33":"\u001b[s","kf34":"\u001b[t","kf35":"\u001b[u","kf36":"\u001b[v","kf37":"\u001b[w","kf38":"\u001b[x","kf39":"\u001b[y","kf40":"\u001b[z","kf41":"\u001b[@","kf42":"\u001b[[","kf43":"\u001b[\\","kf44":"\u001b[]","kf45":"\u001b[^","kf46":"\u001b[_","kf47":"\u001b[`","kf48":"\u001b[{","kich":"\u001b[L","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdh\ufffdi\u0015j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd~\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"cons60r-m","aliases":["cons60-koi8r-m"],"cols":80,"lines":60,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[=0C","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[30;1m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","kf10":"\u001b[V","kf11":"\u001b[W","kf12":"\u001b[X","kf13":"\u001b[Y","kf14":"\u001b[Z","kf15":"\u001b[a","kf16":"\u001b[b","kf17":"\u001b[c","kf18":"\u001b[d","kf19":"\u001b[e","kf20":"\u001b[f","kf21":"\u001b[g","kf22":"\u001b[h","kf23":"\u001b[i","kf24":"\u001b[j","kf25":"\u001b[k","kf26":"\u001b[l","kf27":"\u001b[m","kf28":"\u001b[n","kf29":"\u001b[o","kf30":"\u001b[p","kf31":"\u001b[q","kf32":"\u001b[r","kf33":"\u001b[s","kf34":"\u001b[t","kf35":"\u001b[u","kf36":"\u001b[v","kf37":"\u001b[w","kf38":"\u001b[x","kf39":"\u001b[y","kf40":"\u001b[z","kf41":"\u001b[@","kf42":"\u001b[[","kf43":"\u001b[\\","kf44":"\u001b[]","kf45":"\u001b[^","kf46":"\u001b[_","kf47":"\u001b[`","kf48":"\u001b[{","kich":"\u001b[L","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdh\ufffdi\u0015j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd~\ufffd"} +{"name":"contel300","aliases":["c300","contel320"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bK","sgr0":"\u001b!\ufffd","cup":"\u001bX%p1%' '%+%c\u001bY%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bRA","kf2":"\u001bRB","kf3":"\u001bRC","kf4":"\u001bRD","kf5":"\u001bRE","kf6":"\u001bRF","kf7":"\u001bRG","kf8":"\u001bRH","kf9":"\u001bRI"} +{"name":"contel301","aliases":["c301","c321","contel321"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bK","sgr0":"\u001b!\ufffd","cup":"\u001bX%p1%' '%+%c\u001bY%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bRA","kf2":"\u001bRB","kf3":"\u001bRC","kf4":"\u001bRD","kf5":"\u001bRE","kf6":"\u001bRF","kf7":"\u001bRG","kf8":"\u001bRH","kf9":"\u001bRI"} +{"name":"cops10","aliases":["cops","cops-10"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u0018$\u003c30/\u003e","cup":"\u0010%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","khome":"\u0019","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"crt","aliases":["crt-vt220"],"cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0$\u003c2\u003e","rmacs":"\u001b(B$\u003c4\u003e","enacs":"\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"cs10","aliases":["colorscan"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m","smul":"\u001b[4m","cup":"\u001b[%i%p1%02d;%p2%02dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"cs10-w","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m","smul":"\u001b[4m","cup":"\u001b[%i%p1%02d;%p2%03dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"ct8500","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b\u0005","sgr0":"\u001b ","smul":"\u001b!","cup":"\u001b|%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bR","pad":"\u0000"} +{"name":"ctrm","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","sgr0":"\u001b\u0026d@%{0}%PA%{0}%PB%{0}%PH","smul":"\u001b\u0026dD","bold":"%?%gH%{0}%=%t\u001b\u0026dH%{1}%PH%;","blink":"\u001b\u0026dA%{1}%PA","rev":"%?%gB%{0}%=%t\u001b\u0026dB%{1}%PB%;","smkx":"\u001b\u0026jB","rmkx":"\u001b\u0026jA","cup":"\u001b\u0026a%p2%dc%p1%dY","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp\r","kf2":"\u001bq\r","kf3":"\u001br\r","kf4":"\u001bs\r","kf5":"\u001bt\r","kf6":"\u001bu\r","kf7":"\u001bv\r","kf8":"\u001bw\r","khome":"\u001bp\r","kcuu1":"\u001bt\r","kcud1":"\u001bw\r","kcub1":"\u001bu\r","kcuf1":"\u001bv\r"} +{"name":"cyb110","aliases":["mdl110"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u0018$\u003c70\u003e","cup":"\u0010%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000"} +{"name":"cyb83","aliases":["xl83"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c$\u003c62\u003e","cup":"\u0017%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000e","pad":"\u0000","kcuu1":"\u000e","kcud1":"\n","kcub1":"\u0008","kcuf1":"\t"} +{"name":"cygwin","cols":-1,"lines":-1,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[[A","kf2":"\u001b[[B","kf3":"\u001b[[C","kf4":"\u001b[[D","kf5":"\u001b[[E","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"cygwinB19","cols":80,"lines":25,"colors":8,"clear":"\u001b[2J","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001b[[A","kf2":"\u001b[[B","kf3":"\u001b[[C","kf4":"\u001b[[D","kf5":"\u001b[[E","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"cygwinDBG","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[[A","kf2":"\u001b[[B","kf3":"\u001b[[C","kf4":"\u001b[[D","kf5":"\u001b[[E","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"d132","aliases":["datagraphix"],"cols":80,"lines":30,"bell":"\u0007","clear":"\u000c","cnorm":"\u001bm\u001bn","cup":"\u001b8%i%p1%3d%p2%3d","cub1":"\u0008","cuu1":"\u001bK","pad":"\u0000","kbs":"\u0008","kcud1":"\n","kcub1":"\u0008"} +{"name":"d200","aliases":["d200-dg"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","sgr0":"\u000f\u0015\u001d\u001eE","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u000e","rev":"\u001eD","dim":"\u001c","cup":"\u0010%p2%c%p1%c","cub1":"\u0019","cuu1":"\u0017","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u0008","kcuu1":"\u0017","kcud1":"\u001a","kcub1":"\u0019","kcuf1":"\u0018","kclr":"\u000c","kRIT":"\u001e\u0018","kLFT":"\u001e\u0019","kHOM":"\u001e\u0008"} +{"name":"d210","aliases":["d214"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[4;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001b[001z","kf2":"\u001b[002z","kf3":"\u001b[003z","kf4":"\u001b[004z","kf5":"\u001b[005z","kf6":"\u001b[006z","kf7":"\u001b[007z","kf8":"\u001b[008z","kf9":"\u001b[009z","kf10":"\u001b[010z","kf11":"\u001b[011z","kf12":"\u001b[012z","kf13":"\u001b[013z","kf14":"\u001b[014z","kf15":"\u001b[000z","kf16":"\u001b[101z","kf17":"\u001b[102z","kf18":"\u001b[103z","kf19":"\u001b[104z","kf20":"\u001b[105z","kf21":"\u001b[106z","kf22":"\u001b[107z","kf23":"\u001b[108z","kf24":"\u001b[109z","kf25":"\u001b[110z","kf26":"\u001b[111z","kf27":"\u001b[112z","kf28":"\u001b[113z","kf29":"\u001b[114z","kf30":"\u001b[100z","kf31":"\u001b[201z","kf32":"\u001b[202z","kf33":"\u001b[203z","kf34":"\u001b[204z","kf35":"\u001b[205z","kf36":"\u001b[206z","kf37":"\u001b[207z","kf38":"\u001b[208z","kf39":"\u001b[209z","kf40":"\u001b[210z","kf41":"\u001b[211z","kf42":"\u001b[212z","kf43":"\u001b[213z","kf44":"\u001b[214z","kf45":"\u001b[200z","kf46":"\u001b[301z","kf47":"\u001b[302z","kf48":"\u001b[303z","kf49":"\u001b[304z","kf50":"\u001b[305z","kf51":"\u001b[306z","kf52":"\u001b[307z","kf53":"\u001b[308z","kf54":"\u001b[309z","kf55":"\u001b[310z","kf56":"\u001b[311z","kf57":"\u001b[312z","kf58":"\u001b[313z","kf59":"\u001b[314z","kf60":"\u001b[300z","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u001b[2J","kprt":"\u001b[i"} +{"name":"d210-dg","aliases":["d214-dg"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","sgr0":"\u000f\u0015\u001d\u001eE","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u000e","rev":"\u001eD","dim":"\u001c","cup":"\u0010%p2%c%p1%c","cub1":"\u0019","cuu1":"\u0017","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u0008","kcuu1":"\u0017","kcud1":"\u001a","kcub1":"\u0019","kcuf1":"\u0018","kclr":"\u000c","kRIT":"\u001e\u0018","kLFT":"\u001e\u0019","kHOM":"\u001e\u0008"} +{"name":"d211","aliases":["d215"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[4;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\ufffd001z","kf2":"\ufffd002z","kf3":"\ufffd003z","kf4":"\ufffd004z","kf5":"\ufffd005z","kf6":"\ufffd006z","kf7":"\ufffd007z","kf8":"\ufffd008z","kf9":"\ufffd009z","kf10":"\ufffd010z","kf11":"\ufffd011z","kf12":"\ufffd012z","kf13":"\ufffd013z","kf14":"\ufffd014z","kf15":"\ufffd000z","kf16":"\ufffd101z","kf17":"\ufffd102z","kf18":"\ufffd103z","kf19":"\ufffd104z","kf20":"\ufffd105z","kf21":"\ufffd106z","kf22":"\ufffd107z","kf23":"\ufffd108z","kf24":"\ufffd109z","kf25":"\ufffd110z","kf26":"\ufffd111z","kf27":"\ufffd112z","kf28":"\ufffd113z","kf29":"\ufffd114z","kf30":"\ufffd100z","kf31":"\ufffd201z","kf32":"\ufffd202z","kf33":"\ufffd203z","kf34":"\ufffd204z","kf35":"\ufffd205z","kf36":"\ufffd206z","kf37":"\ufffd207z","kf38":"\ufffd208z","kf39":"\ufffd209z","kf40":"\ufffd210z","kf41":"\ufffd211z","kf42":"\ufffd212z","kf43":"\ufffd213z","kf44":"\ufffd214z","kf45":"\ufffd200z","kf46":"\ufffd301z","kf47":"\ufffd302z","kf48":"\ufffd303z","kf49":"\ufffd304z","kf50":"\ufffd305z","kf51":"\ufffd306z","kf52":"\ufffd307z","kf53":"\ufffd308z","kf54":"\ufffd309z","kf55":"\ufffd310z","kf56":"\ufffd311z","kf57":"\ufffd312z","kf58":"\ufffd313z","kf59":"\ufffd314z","kf60":"\ufffd300z","khome":"\ufffdH","kcuu1":"\ufffdA","kcud1":"\ufffdB","kcub1":"\ufffdD","kcuf1":"\ufffdC","kclr":"\ufffd2J","kprt":"\ufffdi"} +{"name":"d211-7b","aliases":["d215-7b"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[4;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001b[001z","kf2":"\u001b[002z","kf3":"\u001b[003z","kf4":"\u001b[004z","kf5":"\u001b[005z","kf6":"\u001b[006z","kf7":"\u001b[007z","kf8":"\u001b[008z","kf9":"\u001b[009z","kf10":"\u001b[010z","kf11":"\u001b[011z","kf12":"\u001b[012z","kf13":"\u001b[013z","kf14":"\u001b[014z","kf15":"\u001b[000z","kf16":"\u001b[101z","kf17":"\u001b[102z","kf18":"\u001b[103z","kf19":"\u001b[104z","kf20":"\u001b[105z","kf21":"\u001b[106z","kf22":"\u001b[107z","kf23":"\u001b[108z","kf24":"\u001b[109z","kf25":"\u001b[110z","kf26":"\u001b[111z","kf27":"\u001b[112z","kf28":"\u001b[113z","kf29":"\u001b[114z","kf30":"\u001b[100z","kf31":"\u001b[201z","kf32":"\u001b[202z","kf33":"\u001b[203z","kf34":"\u001b[204z","kf35":"\u001b[205z","kf36":"\u001b[206z","kf37":"\u001b[207z","kf38":"\u001b[208z","kf39":"\u001b[209z","kf40":"\u001b[210z","kf41":"\u001b[211z","kf42":"\u001b[212z","kf43":"\u001b[213z","kf44":"\u001b[214z","kf45":"\u001b[200z","kf46":"\u001b[301z","kf47":"\u001b[302z","kf48":"\u001b[303z","kf49":"\u001b[304z","kf50":"\u001b[305z","kf51":"\u001b[306z","kf52":"\u001b[307z","kf53":"\u001b[308z","kf54":"\u001b[309z","kf55":"\u001b[310z","kf56":"\u001b[311z","kf57":"\u001b[312z","kf58":"\u001b[313z","kf59":"\u001b[314z","kf60":"\u001b[300z","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u001b[2J","kprt":"\u001b[i"} +{"name":"d211-dg","aliases":["d215-dg"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","sgr0":"\u000f\u0015\u001d\u001eE","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u000e","rev":"\u001eD","dim":"\u001c","cup":"\u0010%p2%c%p1%c","cub1":"\u0019","cuu1":"\u0017","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u0008","kcuu1":"\u0017","kcud1":"\u001a","kcub1":"\u0019","kcuf1":"\u0018","kclr":"\u000c","kRIT":"\u001e\u0018","kLFT":"\u001e\u0019","kHOM":"\u001e\u0008"} +{"name":"d216-dg","aliases":["d216+dg","d216e+dg","d216e-dg","d217-dg"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","sgr0":"\u000f\u0015\u001d\u001eE","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u000e","rev":"\u001eD","dim":"\u001c","cup":"\u0010%p2%c%p1%c","cub1":"\u0019","cuu1":"\u0017","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u0008","kcuu1":"\u0017","kcud1":"\u001a","kcub1":"\u0019","kcuf1":"\u0018","kclr":"\u000c","kRIT":"\u001e\u0018","kLFT":"\u001e\u0019","kHOM":"\u001e\u0008"} +{"name":"d216-unix","aliases":["d216+","d216e+","d216e-unix"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001ePH","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","cup":"\u0010%p2%c%p1%c","cub1":"\u001ePD","cuu1":"\u001ePA","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d216-unix-25","aliases":["d216+25"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001ePH","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","cup":"\u0010%p2%c%p1%c","cub1":"\u001ePD","cuu1":"\u001ePA","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d217-unix","cols":80,"lines":24,"bell":"\u0007","clear":"\u001ePH","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","cup":"\u0010%p2%c%p1%c","cub1":"\u001ePD","cuu1":"\u001ePA","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d217-unix-25","cols":80,"lines":25,"bell":"\u0007","clear":"\u001ePH","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","cup":"\u0010%p2%c%p1%c","cub1":"\u001ePD","cuu1":"\u001ePA","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d220","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[2J","cnorm":"\u001b[3;2v","civis":"\u001b[3;0v","sgr0":"\u001b[m\u001b)4\u000f","smul":"\u001b[4m","bold":"\u001b[4;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","setaf":"\u001b[3%p1%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m","setbg":"\u001b[4%p1%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\ufffd001z","kf2":"\ufffd002z","kf3":"\ufffd003z","kf4":"\ufffd004z","kf5":"\ufffd005z","kf6":"\ufffd006z","kf7":"\ufffd007z","kf8":"\ufffd008z","kf9":"\ufffd009z","kf10":"\ufffd010z","kf11":"\ufffd011z","kf12":"\ufffd012z","kf13":"\ufffd013z","kf14":"\ufffd014z","kf15":"\ufffd000z","kf16":"\ufffd101z","kf17":"\ufffd102z","kf18":"\ufffd103z","kf19":"\ufffd104z","kf20":"\ufffd105z","kf21":"\ufffd106z","kf22":"\ufffd107z","kf23":"\ufffd108z","kf24":"\ufffd109z","kf25":"\ufffd110z","kf26":"\ufffd111z","kf27":"\ufffd112z","kf28":"\ufffd113z","kf29":"\ufffd114z","kf30":"\ufffd100z","kf31":"\ufffd201z","kf32":"\ufffd202z","kf33":"\ufffd203z","kf34":"\ufffd204z","kf35":"\ufffd205z","kf36":"\ufffd206z","kf37":"\ufffd207z","kf38":"\ufffd208z","kf39":"\ufffd209z","kf40":"\ufffd210z","kf41":"\ufffd211z","kf42":"\ufffd212z","kf43":"\ufffd213z","kf44":"\ufffd214z","kf45":"\ufffd200z","kf46":"\ufffd301z","kf47":"\ufffd302z","kf48":"\ufffd303z","kf49":"\ufffd304z","kf50":"\ufffd305z","kf51":"\ufffd306z","kf52":"\ufffd307z","kf53":"\ufffd308z","kf54":"\ufffd309z","kf55":"\ufffd310z","kf56":"\ufffd311z","kf57":"\ufffd312z","kf58":"\ufffd313z","kf59":"\ufffd314z","kf60":"\ufffd300z","khome":"\ufffdH","kcuu1":"\ufffdA","kcud1":"\ufffdB","kcub1":"\ufffdD","kcuf1":"\ufffdC","kclr":"\ufffd2J","kprt":"\ufffdi","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001b)6\u000e","rmacs":"\u001b)4\u000f","_setfgbg":"\u001b[3%p1%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;;4%p2%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m"} +{"name":"d220-7b","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[2J","cnorm":"\u001b[3;2v","civis":"\u001b[3;0v","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[4;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","setaf":"\u001b[3%p1%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m","setbg":"\u001b[4%p1%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001b[001z","kf2":"\u001b[002z","kf3":"\u001b[003z","kf4":"\u001b[004z","kf5":"\u001b[005z","kf6":"\u001b[006z","kf7":"\u001b[007z","kf8":"\u001b[008z","kf9":"\u001b[009z","kf10":"\u001b[010z","kf11":"\u001b[011z","kf12":"\u001b[012z","kf13":"\u001b[013z","kf14":"\u001b[014z","kf15":"\u001b[000z","kf16":"\u001b[101z","kf17":"\u001b[102z","kf18":"\u001b[103z","kf19":"\u001b[104z","kf20":"\u001b[105z","kf21":"\u001b[106z","kf22":"\u001b[107z","kf23":"\u001b[108z","kf24":"\u001b[109z","kf25":"\u001b[110z","kf26":"\u001b[111z","kf27":"\u001b[112z","kf28":"\u001b[113z","kf29":"\u001b[114z","kf30":"\u001b[100z","kf31":"\u001b[201z","kf32":"\u001b[202z","kf33":"\u001b[203z","kf34":"\u001b[204z","kf35":"\u001b[205z","kf36":"\u001b[206z","kf37":"\u001b[207z","kf38":"\u001b[208z","kf39":"\u001b[209z","kf40":"\u001b[210z","kf41":"\u001b[211z","kf42":"\u001b[212z","kf43":"\u001b[213z","kf44":"\u001b[214z","kf45":"\u001b[200z","kf46":"\u001b[301z","kf47":"\u001b[302z","kf48":"\u001b[303z","kf49":"\u001b[304z","kf50":"\u001b[305z","kf51":"\u001b[306z","kf52":"\u001b[307z","kf53":"\u001b[308z","kf54":"\u001b[309z","kf55":"\u001b[310z","kf56":"\u001b[311z","kf57":"\u001b[312z","kf58":"\u001b[313z","kf59":"\u001b[314z","kf60":"\u001b[300z","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u001b[2J","kprt":"\u001b[i","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)6","_setfgbg":"\u001b[3%p1%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;;4%p2%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m"} +{"name":"d220-dg","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u000c","cnorm":"\u001eFQ2","civis":"\u001eFQ0","sgr0":"\u000f\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u000e","rev":"\u001eD","dim":"\u001c","setaf":"\u001eA%p1%{2}%\u0026%?%p1%{1}%\u0026%t%{4}%|%;%?%p1%{4}%\u0026%t%{1}%|%;%'0'%+%c","setbg":"\u001eB%p1%{2}%\u0026%?%p1%{1}%\u0026%t%{4}%|%;%?%p1%{4}%\u0026%t%{1}%|%;%'0'%+%c","cup":"\u0010%p2%c%p1%c","cub1":"\u0019","cuu1":"\u0017","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u0008","kcuu1":"\u0017","kcud1":"\u001a","kcub1":"\u0019","kcuf1":"\u0018","kclr":"\u000c","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001e\u0018","kLFT":"\u001e\u0019","kHOM":"\u001e\u0008"} +{"name":"d230c","aliases":["d230"],"cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[2J","cnorm":"\u001b[3;2v","civis":"\u001b[3;0v","sgr0":"\u001b[50m\u001b)4\u000f","smul":"\u001b[4;50m","bold":"\u001b[4;7;50m","blink":"\u001b[5;50m","rev":"\u001b[7;50m","dim":"\u001b[2;50m","smkx":"\u001b[2;0v","rmkx":"\u001b[2;1v","setaf":"\u001b[3%p1%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m","setbg":"\u001b[4%p1%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001b[001z","kf2":"\u001b[002z","kf3":"\u001b[003z","kf4":"\u001b[004z","kf5":"\u001b[005z","kf6":"\u001b[006z","kf7":"\u001b[007z","kf8":"\u001b[008z","kf9":"\u001b[009z","kf10":"\u001b[010z","kf11":"\u001b[011z","kf12":"\u001b[012z","kf13":"\u001b[013z","kf14":"\u001b[014z","kf15":"\u001b[000z","kf16":"\u001b[101z","kf17":"\u001b[102z","kf18":"\u001b[103z","kf19":"\u001b[104z","kf20":"\u001b[105z","kf21":"\u001b[106z","kf22":"\u001b[107z","kf23":"\u001b[108z","kf24":"\u001b[109z","kf25":"\u001b[110z","kf26":"\u001b[111z","kf27":"\u001b[112z","kf28":"\u001b[113z","kf29":"\u001b[114z","kf30":"\u001b[100z","kf31":"\u001b[201z","kf32":"\u001b[202z","kf33":"\u001b[203z","kf34":"\u001b[204z","kf35":"\u001b[205z","kf36":"\u001b[206z","kf37":"\u001b[207z","kf38":"\u001b[208z","kf39":"\u001b[209z","kf40":"\u001b[210z","kf41":"\u001b[211z","kf42":"\u001b[212z","kf43":"\u001b[213z","kf44":"\u001b[214z","kf45":"\u001b[200z","kf46":"\u001b[301z","kf47":"\u001b[302z","kf48":"\u001b[303z","kf49":"\u001b[304z","kf50":"\u001b[305z","kf51":"\u001b[306z","kf52":"\u001b[307z","kf53":"\u001b[308z","kf54":"\u001b[309z","kf55":"\u001b[310z","kf56":"\u001b[311z","kf57":"\u001b[312z","kf58":"\u001b[313z","kf59":"\u001b[314z","kf60":"\u001b[300z","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u001b[2J","kprt":"\u001b[i","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001b)6\u000e","rmacs":"\u001b)4\u000f","_setfgbg":"\u001b[3%p1%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;;4%p2%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m"} +{"name":"d230c-dg","aliases":["d230-dg"],"cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u000c","cnorm":"\u001eFQ2","civis":"\u001eFQ0","sgr0":"\u000f\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u000e","rev":"\u001eD","dim":"\u001c","setaf":"\u001eA%p1%{2}%\u0026%?%p1%{1}%\u0026%t%{4}%|%;%?%p1%{4}%\u0026%t%{1}%|%;%'0'%+%c","setbg":"\u001eB%p1%{2}%\u0026%?%p1%{1}%\u0026%t%{4}%|%;%?%p1%{4}%\u0026%t%{1}%|%;%'0'%+%c","cup":"\u0010%p2%c%p1%c","cub1":"\u0019","cuu1":"\u0017","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u0008","kcuu1":"\u0017","kcud1":"\u001a","kcub1":"\u0019","kcuf1":"\u0018","kclr":"\u000c","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001e\u0018","kLFT":"\u001e\u0019","kHOM":"\u001e\u0008"} +{"name":"d400","aliases":["d400-dg","d450","d450-dg"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","cnorm":"\u001eFQ2","civis":"\u001eFQ0","sgr0":"\u000f\u0015\u001d\u001eE\u001eO","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u000e","rev":"\u001eD","dim":"\u001c","cup":"\u0010%p2%c%p1%c","cub1":"\u0019","cuu1":"\u0017","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u0008","kcuu1":"\u0017","kcud1":"\u001a","kcub1":"\u0019","kcuf1":"\u0018","kclr":"\u000c","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eN","rmacs":"\u001eO","enacs":"\u001eN\u001eFS11\u001eO","kRIT":"\u001e\u0018","kLFT":"\u001e\u0019","kHOM":"\u001e\u0008"} +{"name":"d410","aliases":["d411","d460","d461"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J","cnorm":"\u001b[3;2v","civis":"\u001b[3;0v","sgr0":"\u001b[m\u001b)4\u000f","smul":"\u001b[4m","bold":"\u001b[4;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\ufffd001z","kf2":"\ufffd002z","kf3":"\ufffd003z","kf4":"\ufffd004z","kf5":"\ufffd005z","kf6":"\ufffd006z","kf7":"\ufffd007z","kf8":"\ufffd008z","kf9":"\ufffd009z","kf10":"\ufffd010z","kf11":"\ufffd011z","kf12":"\ufffd012z","kf13":"\ufffd013z","kf14":"\ufffd014z","kf15":"\ufffd000z","kf16":"\ufffd101z","kf17":"\ufffd102z","kf18":"\ufffd103z","kf19":"\ufffd104z","kf20":"\ufffd105z","kf21":"\ufffd106z","kf22":"\ufffd107z","kf23":"\ufffd108z","kf24":"\ufffd109z","kf25":"\ufffd110z","kf26":"\ufffd111z","kf27":"\ufffd112z","kf28":"\ufffd113z","kf29":"\ufffd114z","kf30":"\ufffd100z","kf31":"\ufffd201z","kf32":"\ufffd202z","kf33":"\ufffd203z","kf34":"\ufffd204z","kf35":"\ufffd205z","kf36":"\ufffd206z","kf37":"\ufffd207z","kf38":"\ufffd208z","kf39":"\ufffd209z","kf40":"\ufffd210z","kf41":"\ufffd211z","kf42":"\ufffd212z","kf43":"\ufffd213z","kf44":"\ufffd214z","kf45":"\ufffd200z","kf46":"\ufffd301z","kf47":"\ufffd302z","kf48":"\ufffd303z","kf49":"\ufffd304z","kf50":"\ufffd305z","kf51":"\ufffd306z","kf52":"\ufffd307z","kf53":"\ufffd308z","kf54":"\ufffd309z","kf55":"\ufffd310z","kf56":"\ufffd311z","kf57":"\ufffd312z","kf58":"\ufffd313z","kf59":"\ufffd314z","kf60":"\ufffd300z","khome":"\ufffdH","kcuu1":"\ufffdA","kcud1":"\ufffdB","kcub1":"\ufffdD","kcuf1":"\ufffdC","kclr":"\ufffd2J","kprt":"\ufffdi","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001b)6\u000e","rmacs":"\u001b)4\u000f"} +{"name":"d410-7b","aliases":["d411-7b","d460-7b","d461-7b"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J","cnorm":"\u001b[3;2v","civis":"\u001b[3;0v","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[4;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001b[001z","kf2":"\u001b[002z","kf3":"\u001b[003z","kf4":"\u001b[004z","kf5":"\u001b[005z","kf6":"\u001b[006z","kf7":"\u001b[007z","kf8":"\u001b[008z","kf9":"\u001b[009z","kf10":"\u001b[010z","kf11":"\u001b[011z","kf12":"\u001b[012z","kf13":"\u001b[013z","kf14":"\u001b[014z","kf15":"\u001b[000z","kf16":"\u001b[101z","kf17":"\u001b[102z","kf18":"\u001b[103z","kf19":"\u001b[104z","kf20":"\u001b[105z","kf21":"\u001b[106z","kf22":"\u001b[107z","kf23":"\u001b[108z","kf24":"\u001b[109z","kf25":"\u001b[110z","kf26":"\u001b[111z","kf27":"\u001b[112z","kf28":"\u001b[113z","kf29":"\u001b[114z","kf30":"\u001b[100z","kf31":"\u001b[201z","kf32":"\u001b[202z","kf33":"\u001b[203z","kf34":"\u001b[204z","kf35":"\u001b[205z","kf36":"\u001b[206z","kf37":"\u001b[207z","kf38":"\u001b[208z","kf39":"\u001b[209z","kf40":"\u001b[210z","kf41":"\u001b[211z","kf42":"\u001b[212z","kf43":"\u001b[213z","kf44":"\u001b[214z","kf45":"\u001b[200z","kf46":"\u001b[301z","kf47":"\u001b[302z","kf48":"\u001b[303z","kf49":"\u001b[304z","kf50":"\u001b[305z","kf51":"\u001b[306z","kf52":"\u001b[307z","kf53":"\u001b[308z","kf54":"\u001b[309z","kf55":"\u001b[310z","kf56":"\u001b[311z","kf57":"\u001b[312z","kf58":"\u001b[313z","kf59":"\u001b[314z","kf60":"\u001b[300z","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u001b[2J","kprt":"\u001b[i","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)6"} +{"name":"d410-7b-w","aliases":["d411-7b-w","d460-7b-w","d461-7b-w"],"cols":126,"lines":24,"bell":"\u0007","clear":"\u001b[2J","cnorm":"\u001b[3;2v","civis":"\u001b[3;0v","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[4;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001b[001z","kf2":"\u001b[002z","kf3":"\u001b[003z","kf4":"\u001b[004z","kf5":"\u001b[005z","kf6":"\u001b[006z","kf7":"\u001b[007z","kf8":"\u001b[008z","kf9":"\u001b[009z","kf10":"\u001b[010z","kf11":"\u001b[011z","kf12":"\u001b[012z","kf13":"\u001b[013z","kf14":"\u001b[014z","kf15":"\u001b[000z","kf16":"\u001b[101z","kf17":"\u001b[102z","kf18":"\u001b[103z","kf19":"\u001b[104z","kf20":"\u001b[105z","kf21":"\u001b[106z","kf22":"\u001b[107z","kf23":"\u001b[108z","kf24":"\u001b[109z","kf25":"\u001b[110z","kf26":"\u001b[111z","kf27":"\u001b[112z","kf28":"\u001b[113z","kf29":"\u001b[114z","kf30":"\u001b[100z","kf31":"\u001b[201z","kf32":"\u001b[202z","kf33":"\u001b[203z","kf34":"\u001b[204z","kf35":"\u001b[205z","kf36":"\u001b[206z","kf37":"\u001b[207z","kf38":"\u001b[208z","kf39":"\u001b[209z","kf40":"\u001b[210z","kf41":"\u001b[211z","kf42":"\u001b[212z","kf43":"\u001b[213z","kf44":"\u001b[214z","kf45":"\u001b[200z","kf46":"\u001b[301z","kf47":"\u001b[302z","kf48":"\u001b[303z","kf49":"\u001b[304z","kf50":"\u001b[305z","kf51":"\u001b[306z","kf52":"\u001b[307z","kf53":"\u001b[308z","kf54":"\u001b[309z","kf55":"\u001b[310z","kf56":"\u001b[311z","kf57":"\u001b[312z","kf58":"\u001b[313z","kf59":"\u001b[314z","kf60":"\u001b[300z","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u001b[2J","kprt":"\u001b[i","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)6"} +{"name":"d410-dg","aliases":["d411-dg","d460-dg","d461-dg"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","cnorm":"\u001eFQ2","civis":"\u001eFQ0","sgr0":"\u000f\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u000e","rev":"\u001eD","dim":"\u001c","cup":"\u0010%p2%c%p1%c","cub1":"\u0019","cuu1":"\u0017","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u0008","kcuu1":"\u0017","kcud1":"\u001a","kcub1":"\u0019","kcuf1":"\u0018","kclr":"\u000c","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001e\u0018","kLFT":"\u001e\u0019","kHOM":"\u001e\u0008"} +{"name":"d410-w","aliases":["d411-w","d460-w","d461-w"],"cols":126,"lines":24,"bell":"\u0007","clear":"\u001b[2J","cnorm":"\u001b[3;2v","civis":"\u001b[3;0v","sgr0":"\u001b[m\u001b)4\u000f","smul":"\u001b[4m","bold":"\u001b[4;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\ufffd001z","kf2":"\ufffd002z","kf3":"\ufffd003z","kf4":"\ufffd004z","kf5":"\ufffd005z","kf6":"\ufffd006z","kf7":"\ufffd007z","kf8":"\ufffd008z","kf9":"\ufffd009z","kf10":"\ufffd010z","kf11":"\ufffd011z","kf12":"\ufffd012z","kf13":"\ufffd013z","kf14":"\ufffd014z","kf15":"\ufffd000z","kf16":"\ufffd101z","kf17":"\ufffd102z","kf18":"\ufffd103z","kf19":"\ufffd104z","kf20":"\ufffd105z","kf21":"\ufffd106z","kf22":"\ufffd107z","kf23":"\ufffd108z","kf24":"\ufffd109z","kf25":"\ufffd110z","kf26":"\ufffd111z","kf27":"\ufffd112z","kf28":"\ufffd113z","kf29":"\ufffd114z","kf30":"\ufffd100z","kf31":"\ufffd201z","kf32":"\ufffd202z","kf33":"\ufffd203z","kf34":"\ufffd204z","kf35":"\ufffd205z","kf36":"\ufffd206z","kf37":"\ufffd207z","kf38":"\ufffd208z","kf39":"\ufffd209z","kf40":"\ufffd210z","kf41":"\ufffd211z","kf42":"\ufffd212z","kf43":"\ufffd213z","kf44":"\ufffd214z","kf45":"\ufffd200z","kf46":"\ufffd301z","kf47":"\ufffd302z","kf48":"\ufffd303z","kf49":"\ufffd304z","kf50":"\ufffd305z","kf51":"\ufffd306z","kf52":"\ufffd307z","kf53":"\ufffd308z","kf54":"\ufffd309z","kf55":"\ufffd310z","kf56":"\ufffd311z","kf57":"\ufffd312z","kf58":"\ufffd313z","kf59":"\ufffd314z","kf60":"\ufffd300z","khome":"\ufffdH","kcuu1":"\ufffdA","kcud1":"\ufffdB","kcub1":"\ufffdD","kcuf1":"\ufffdC","kclr":"\ufffd2J","kprt":"\ufffdi","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001b)6\u000e","rmacs":"\u001b)4\u000f"} +{"name":"d412-dg","aliases":["d412+dg","d413-dg","d462+dg","d462-dg","d462e-dg","d463-dg"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","cnorm":"\u001eFQ2","civis":"\u001eFQ0","sgr0":"\u000f\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u000e","rev":"\u001eD","dim":"\u001c","cup":"\u0010%p2%c%p1%c","cub1":"\u0019","cuu1":"\u0017","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u0008","kcuu1":"\u0017","kcud1":"\u001a","kcub1":"\u0019","kcuf1":"\u0018","kclr":"\u000c","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001e\u0018","kLFT":"\u001e\u0019","kHOM":"\u001e\u0008"} +{"name":"d412-unix","aliases":["d412+","d462+","d462-unix"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001eFE","cnorm":"\u001eFQ5","civis":"\u001eFQ0","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","cup":"\u001eFP%p2%2.2X%p1%2.2X","cub1":"\u001ePD","cuu1":"\u001ePA","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d412-unix-25","aliases":["d412+25","d462+25","d462-unix-25"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001eFE","cnorm":"\u001eFQ5","civis":"\u001eFQ0","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","cup":"\u001eFP%p2%2.2X%p1%2.2X","cub1":"\u001ePD","cuu1":"\u001ePA","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d412-unix-s","aliases":["d412+s","d462+s","d462-unix-s"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001eFG\u001ePH","cnorm":"\u001eFQ5","civis":"\u001eFQ0","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","cup":"\u001eFP%p2%2.2X%p1%2.2X","cub1":"\u001ePD","cuu1":"\u001ePA","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d412-unix-sr","aliases":["d412+sr","d462+sr","d462-unix-sr"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001eFE","cnorm":"\u001eFQ5","civis":"\u001eFQ0","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","cup":"\u001eFP%p2%2.2X%p1%2.2X","cub1":"\u001ePD","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d412-unix-w","aliases":["d412+w","d462+w","d462-unix-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001eFE","cnorm":"\u001eFQ5","civis":"\u001eFQ0","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","cup":"\u001eFP%p2%2.2X%p1%2.2X","cub1":"\u001ePD","cuu1":"\u001ePA","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d413-unix","aliases":["d463-unix"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001eFE","cnorm":"\u001eFQ5","civis":"\u001eFQ0","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","cup":"\u001eFP%p2%2.2X%p1%2.2X","cub1":"\u001ePD","cuu1":"\u001ePA","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d413-unix-25","aliases":["d463-unix-25"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001eFE","cnorm":"\u001eFQ5","civis":"\u001eFQ0","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","cup":"\u001eFP%p2%2.2X%p1%2.2X","cub1":"\u001ePD","cuu1":"\u001ePA","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d413-unix-s","aliases":["d463-unix-s"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001eFG\u001ePH","cnorm":"\u001eFQ5","civis":"\u001eFQ0","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","cup":"\u001eFP%p2%2.2X%p1%2.2X","cub1":"\u001ePD","cuu1":"\u001ePA","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d413-unix-sr","aliases":["d463-unix-sr"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001eFE","cnorm":"\u001eFQ5","civis":"\u001eFQ0","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","cup":"\u001eFP%p2%2.2X%p1%2.2X","cub1":"\u001ePD","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d413-unix-w","aliases":["d463-unix-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001eFE","cnorm":"\u001eFQ5","civis":"\u001eFQ0","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","cup":"\u001eFP%p2%2.2X%p1%2.2X","cub1":"\u001ePD","cuu1":"\u001ePA","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d414-unix","aliases":["d464-unix"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001eFE","cnorm":"\u001eFQ5","civis":"\u001eFQ0","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","cup":"\u001eFP%p2%2.2X%p1%2.2X","cub1":"\u001ePD","cuu1":"\u001ePA","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d414-unix-25","aliases":["d464-unix-25"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001eFE","cnorm":"\u001eFQ5","civis":"\u001eFQ0","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","cup":"\u001eFP%p2%2.2X%p1%2.2X","cub1":"\u001ePD","cuu1":"\u001ePA","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d414-unix-s","aliases":["d464-unix-s"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001eFG\u001ePH","cnorm":"\u001eFQ5","civis":"\u001eFQ0","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","cup":"\u001eFP%p2%2.2X%p1%2.2X","cub1":"\u001ePD","cuu1":"\u001ePA","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d414-unix-sr","aliases":["d464-unix-sr"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001eFE","cnorm":"\u001eFQ5","civis":"\u001eFQ0","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","cup":"\u001eFP%p2%2.2X%p1%2.2X","cub1":"\u001ePD","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d414-unix-w","aliases":["d464-unix-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001eFE","cnorm":"\u001eFQ5","civis":"\u001eFQ0","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","cup":"\u001eFP%p2%2.2X%p1%2.2X","cub1":"\u001ePD","cuu1":"\u001ePA","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d430c-dg","aliases":["d430-dg"],"cols":80,"lines":24,"colors":16,"bell":"\u0007","clear":"\u000c","cnorm":"\u001eFQ2","civis":"\u001eFQ0","sgr0":"\u000f\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u000e","rev":"\u001eD","dim":"\u001c","setaf":"\u001eA%p1%?%p1%{8}%\u003c%t%{2}%\u0026%?%p1%{1}%\u0026%t%{4}%|%;%?%p1%{4}%\u0026%t%{1}%|%;%;%'0'%+%c","setbg":"\u001eB%p1%?%p1%{8}%\u003c%t%{2}%\u0026%?%p1%{1}%\u0026%t%{4}%|%;%?%p1%{4}%\u0026%t%{1}%|%;%;%'0'%+%c","cup":"\u0010%p2%c%p1%c","cub1":"\u0019","cuu1":"\u0017","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u0008","kcuu1":"\u0017","kcud1":"\u001a","kcub1":"\u0019","kcuf1":"\u0018","kclr":"\u000c","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001e\u0018","kLFT":"\u001e\u0019","kHOM":"\u001e\u0008"} +{"name":"d430c-dg-ccc","aliases":["d430-dg-ccc"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","cnorm":"\u001eFQ2","civis":"\u001eFQ0","sgr0":"\u000f\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u000e","rev":"\u001eD","dim":"\u001c","cup":"\u0010%p2%c%p1%c","cub1":"\u0019","cuu1":"\u0017","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u0008","kcuu1":"\u0017","kcud1":"\u001a","kcub1":"\u0019","kcuf1":"\u0018","kclr":"\u000c","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001e\u0018","kLFT":"\u001e\u0019","kHOM":"\u001e\u0008"} +{"name":"d430c-unix","aliases":["d430-unix"],"cols":80,"lines":24,"colors":16,"bell":"\u0007","clear":"\u001eFE","cnorm":"\u001eFQ5","civis":"\u001eFQ0","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","setaf":"\u001eA%p1%?%p1%{8}%\u003c%t%{2}%\u0026%?%p1%{1}%\u0026%t%{4}%|%;%?%p1%{4}%\u0026%t%{1}%|%;%;%'0'%+%c","setbg":"\u001eB%p1%?%p1%{8}%\u003c%t%{2}%\u0026%?%p1%{1}%\u0026%t%{4}%|%;%?%p1%{4}%\u0026%t%{1}%|%;%;%'0'%+%c","cup":"\u001eFP%p2%2.2X%p1%2.2X","cub1":"\u001ePD","cuu1":"\u001ePA","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d430c-unix-25","aliases":["d430-unix-25"],"cols":80,"lines":25,"colors":16,"bell":"\u0007","clear":"\u001eFE","cnorm":"\u001eFQ5","civis":"\u001eFQ0","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","setaf":"\u001eA%p1%?%p1%{8}%\u003c%t%{2}%\u0026%?%p1%{1}%\u0026%t%{4}%|%;%?%p1%{4}%\u0026%t%{1}%|%;%;%'0'%+%c","setbg":"\u001eB%p1%?%p1%{8}%\u003c%t%{2}%\u0026%?%p1%{1}%\u0026%t%{4}%|%;%?%p1%{4}%\u0026%t%{1}%|%;%;%'0'%+%c","cup":"\u001eFP%p2%2.2X%p1%2.2X","cub1":"\u001ePD","cuu1":"\u001ePA","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d430c-unix-25-ccc","aliases":["d430-unix-25-ccc"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001eFE","cnorm":"\u001eFQ5","civis":"\u001eFQ0","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","cup":"\u001eFP%p2%2.2X%p1%2.2X","cub1":"\u001ePD","cuu1":"\u001ePA","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d430c-unix-ccc","aliases":["d430-unix-ccc"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001eFE","cnorm":"\u001eFQ5","civis":"\u001eFQ0","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","cup":"\u001eFP%p2%2.2X%p1%2.2X","cub1":"\u001ePD","cuu1":"\u001ePA","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d430c-unix-s","aliases":["d430-unix-s"],"cols":80,"lines":24,"colors":16,"bell":"\u0007","clear":"\u001eFG\u001ePH","cnorm":"\u001eFQ5","civis":"\u001eFQ0","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","setaf":"\u001eA%p1%?%p1%{8}%\u003c%t%{2}%\u0026%?%p1%{1}%\u0026%t%{4}%|%;%?%p1%{4}%\u0026%t%{1}%|%;%;%'0'%+%c","setbg":"\u001eB%p1%?%p1%{8}%\u003c%t%{2}%\u0026%?%p1%{1}%\u0026%t%{4}%|%;%?%p1%{4}%\u0026%t%{1}%|%;%;%'0'%+%c","cup":"\u001eFP%p2%2.2X%p1%2.2X","cub1":"\u001ePD","cuu1":"\u001ePA","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d430c-unix-s-ccc","aliases":["d430-unix-s-ccc"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001eFG\u001ePH","cnorm":"\u001eFQ5","civis":"\u001eFQ0","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","cup":"\u001eFP%p2%2.2X%p1%2.2X","cub1":"\u001ePD","cuu1":"\u001ePA","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d430c-unix-sr","aliases":["d430-unix-sr"],"cols":80,"lines":24,"colors":16,"bell":"\u0007","clear":"\u001eFE","cnorm":"\u001eFQ5","civis":"\u001eFQ0","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","setaf":"\u001eA%p1%?%p1%{8}%\u003c%t%{2}%\u0026%?%p1%{1}%\u0026%t%{4}%|%;%?%p1%{4}%\u0026%t%{1}%|%;%;%'0'%+%c","setbg":"\u001eB%p1%?%p1%{8}%\u003c%t%{2}%\u0026%?%p1%{1}%\u0026%t%{4}%|%;%?%p1%{4}%\u0026%t%{1}%|%;%;%'0'%+%c","cup":"\u001eFP%p2%2.2X%p1%2.2X","cub1":"\u001ePD","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d430c-unix-sr-ccc","aliases":["d430-unix-sr-ccc"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001eFE","cnorm":"\u001eFQ5","civis":"\u001eFQ0","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","cup":"\u001eFP%p2%2.2X%p1%2.2X","cub1":"\u001ePD","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d430c-unix-w","aliases":["d430-unix-w"],"cols":132,"lines":24,"colors":16,"bell":"\u0007","clear":"\u001eFE","cnorm":"\u001eFQ5","civis":"\u001eFQ0","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","setaf":"\u001eA%p1%?%p1%{8}%\u003c%t%{2}%\u0026%?%p1%{1}%\u0026%t%{4}%|%;%?%p1%{4}%\u0026%t%{1}%|%;%;%'0'%+%c","setbg":"\u001eB%p1%?%p1%{8}%\u003c%t%{2}%\u0026%?%p1%{1}%\u0026%t%{4}%|%;%?%p1%{4}%\u0026%t%{1}%|%;%;%'0'%+%c","cup":"\u001eFP%p2%2.2X%p1%2.2X","cub1":"\u001ePD","cuu1":"\u001ePA","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d430c-unix-w-ccc","aliases":["d430-unix-w-ccc"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001eFE","cnorm":"\u001eFQ5","civis":"\u001eFQ0","sgr0":"\u001ePJ\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u001ePI","rev":"\u001eD","dim":"\u001c","cup":"\u001eFP%p2%2.2X%p1%2.2X","cub1":"\u001ePD","cuu1":"\u001ePA","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u001ePF","kcuu1":"\u001ePA","kcud1":"\u001ePB","kcub1":"\u001ePD","kcuf1":"\u001ePC","kclr":"\u001ePH","kprt":"\u001eP0","acsc":"aj$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001ePc","kLFT":"\u001ePd","kHOM":"\u001ePf"} +{"name":"d470c","aliases":["d470"],"cols":80,"lines":24,"colors":16,"bell":"\u0007","clear":"\u001b[2J","cnorm":"\u001b[3;2v","civis":"\u001b[3;0v","sgr0":"\u001b[m\u001b)4\u000f","smul":"\u001b[4m","bold":"\u001b[4;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","setaf":"\u001b[%?%p1%{8}%\u003c%t3%p1%e\u003c%p1%{2}%\u0026%?%p1%{1}%\u0026%t%{4}%|%;%?%p1%{4}%\u0026%t%{1}%|%;%;%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m","setbg":"\u001b[%?%p1%{8}%\u003c%t4%p1%e=%p1%{2}%\u0026%?%p1%{1}%\u0026%t%{4}%|%;%?%p1%{4}%\u0026%t%{1}%|%;%;%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\ufffd001z","kf2":"\ufffd002z","kf3":"\ufffd003z","kf4":"\ufffd004z","kf5":"\ufffd005z","kf6":"\ufffd006z","kf7":"\ufffd007z","kf8":"\ufffd008z","kf9":"\ufffd009z","kf10":"\ufffd010z","kf11":"\ufffd011z","kf12":"\ufffd012z","kf13":"\ufffd013z","kf14":"\ufffd014z","kf15":"\ufffd000z","kf16":"\ufffd101z","kf17":"\ufffd102z","kf18":"\ufffd103z","kf19":"\ufffd104z","kf20":"\ufffd105z","kf21":"\ufffd106z","kf22":"\ufffd107z","kf23":"\ufffd108z","kf24":"\ufffd109z","kf25":"\ufffd110z","kf26":"\ufffd111z","kf27":"\ufffd112z","kf28":"\ufffd113z","kf29":"\ufffd114z","kf30":"\ufffd100z","kf31":"\ufffd201z","kf32":"\ufffd202z","kf33":"\ufffd203z","kf34":"\ufffd204z","kf35":"\ufffd205z","kf36":"\ufffd206z","kf37":"\ufffd207z","kf38":"\ufffd208z","kf39":"\ufffd209z","kf40":"\ufffd210z","kf41":"\ufffd211z","kf42":"\ufffd212z","kf43":"\ufffd213z","kf44":"\ufffd214z","kf45":"\ufffd200z","kf46":"\ufffd301z","kf47":"\ufffd302z","kf48":"\ufffd303z","kf49":"\ufffd304z","kf50":"\ufffd305z","kf51":"\ufffd306z","kf52":"\ufffd307z","kf53":"\ufffd308z","kf54":"\ufffd309z","kf55":"\ufffd310z","kf56":"\ufffd311z","kf57":"\ufffd312z","kf58":"\ufffd313z","kf59":"\ufffd314z","kf60":"\ufffd300z","khome":"\ufffdH","kcuu1":"\ufffdA","kcud1":"\ufffdB","kcub1":"\ufffdD","kcuf1":"\ufffdC","kclr":"\ufffd2J","kprt":"\ufffdi","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001b)6\u000e","rmacs":"\u001b)4\u000f","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t3%p1%e\u003c%p1%{2}%\u0026%?%p1%{1}%\u0026%t%{4}%|%;%?%p1%{4}%\u0026%t%{1}%|%;%;%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;;%?%p2%{8}%\u003c%t4%p2%e=%p2%{2}%\u0026%?%p2%{1}%\u0026%t%{4}%|%;%?%p2%{4}%\u0026%t%{1}%|%;%;%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m"} +{"name":"d470c-7b","aliases":["d470-7b"],"cols":80,"lines":24,"colors":16,"bell":"\u0007","clear":"\u001b[2J","cnorm":"\u001b[3;2v","civis":"\u001b[3;0v","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[4;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","setaf":"\u001b[%?%p1%{8}%\u003c%t3%p1%e\u003c%p1%{2}%\u0026%?%p1%{1}%\u0026%t%{4}%|%;%?%p1%{4}%\u0026%t%{1}%|%;%;%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m","setbg":"\u001b[%?%p1%{8}%\u003c%t4%p1%e=%p1%{2}%\u0026%?%p1%{1}%\u0026%t%{4}%|%;%?%p1%{4}%\u0026%t%{1}%|%;%;%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001b[001z","kf2":"\u001b[002z","kf3":"\u001b[003z","kf4":"\u001b[004z","kf5":"\u001b[005z","kf6":"\u001b[006z","kf7":"\u001b[007z","kf8":"\u001b[008z","kf9":"\u001b[009z","kf10":"\u001b[010z","kf11":"\u001b[011z","kf12":"\u001b[012z","kf13":"\u001b[013z","kf14":"\u001b[014z","kf15":"\u001b[000z","kf16":"\u001b[101z","kf17":"\u001b[102z","kf18":"\u001b[103z","kf19":"\u001b[104z","kf20":"\u001b[105z","kf21":"\u001b[106z","kf22":"\u001b[107z","kf23":"\u001b[108z","kf24":"\u001b[109z","kf25":"\u001b[110z","kf26":"\u001b[111z","kf27":"\u001b[112z","kf28":"\u001b[113z","kf29":"\u001b[114z","kf30":"\u001b[100z","kf31":"\u001b[201z","kf32":"\u001b[202z","kf33":"\u001b[203z","kf34":"\u001b[204z","kf35":"\u001b[205z","kf36":"\u001b[206z","kf37":"\u001b[207z","kf38":"\u001b[208z","kf39":"\u001b[209z","kf40":"\u001b[210z","kf41":"\u001b[211z","kf42":"\u001b[212z","kf43":"\u001b[213z","kf44":"\u001b[214z","kf45":"\u001b[200z","kf46":"\u001b[301z","kf47":"\u001b[302z","kf48":"\u001b[303z","kf49":"\u001b[304z","kf50":"\u001b[305z","kf51":"\u001b[306z","kf52":"\u001b[307z","kf53":"\u001b[308z","kf54":"\u001b[309z","kf55":"\u001b[310z","kf56":"\u001b[311z","kf57":"\u001b[312z","kf58":"\u001b[313z","kf59":"\u001b[314z","kf60":"\u001b[300z","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u001b[2J","kprt":"\u001b[i","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)6","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t3%p1%e\u003c%p1%{2}%\u0026%?%p1%{1}%\u0026%t%{4}%|%;%?%p1%{4}%\u0026%t%{1}%|%;%;%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;;%?%p2%{8}%\u003c%t4%p2%e=%p2%{2}%\u0026%?%p2%{1}%\u0026%t%{4}%|%;%?%p2%{4}%\u0026%t%{1}%|%;%;%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m"} +{"name":"d470c-dg","aliases":["d470-dg"],"cols":80,"lines":24,"colors":16,"bell":"\u0007","clear":"\u000c","cnorm":"\u001eFQ2","civis":"\u001eFQ0","sgr0":"\u000f\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u000e","rev":"\u001eD","dim":"\u001c","setaf":"\u001eA%p1%?%p1%{8}%\u003c%t%{2}%\u0026%?%p1%{1}%\u0026%t%{4}%|%;%?%p1%{4}%\u0026%t%{1}%|%;%;%'0'%+%c","setbg":"\u001eB%p1%?%p1%{8}%\u003c%t%{2}%\u0026%?%p1%{1}%\u0026%t%{4}%|%;%?%p1%{4}%\u0026%t%{1}%|%;%;%'0'%+%c","cup":"\u0010%p2%c%p1%c","cub1":"\u0019","cuu1":"\u0017","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u0008","kcuu1":"\u0017","kcud1":"\u001a","kcub1":"\u0019","kcuf1":"\u0018","kclr":"\u000c","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001e\u0018","kLFT":"\u001e\u0019","kHOM":"\u001e\u0008"} +{"name":"d555","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J","cnorm":"\u001b[3;2v","civis":"\u001b[3;0v","sgr0":"\u001b[m\u001b)4\u000f","smul":"\u001b[4m","bold":"\u001b[4;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\ufffd001z","kf2":"\ufffd002z","kf3":"\ufffd003z","kf4":"\ufffd004z","kf5":"\ufffd005z","kf6":"\ufffd006z","kf7":"\ufffd007z","kf8":"\ufffd008z","kf9":"\ufffd009z","kf10":"\ufffd010z","kf11":"\ufffd011z","kf12":"\ufffd012z","kf13":"\ufffd013z","kf14":"\ufffd014z","kf15":"\ufffd000z","kf16":"\ufffd101z","kf17":"\ufffd102z","kf18":"\ufffd103z","kf19":"\ufffd104z","kf20":"\ufffd105z","kf21":"\ufffd106z","kf22":"\ufffd107z","kf23":"\ufffd108z","kf24":"\ufffd109z","kf25":"\ufffd110z","kf26":"\ufffd111z","kf27":"\ufffd112z","kf28":"\ufffd113z","kf29":"\ufffd114z","kf30":"\ufffd100z","kf31":"\ufffd201z","kf32":"\ufffd202z","kf33":"\ufffd203z","kf34":"\ufffd204z","kf35":"\ufffd205z","kf36":"\ufffd206z","kf37":"\ufffd207z","kf38":"\ufffd208z","kf39":"\ufffd209z","kf40":"\ufffd210z","kf41":"\ufffd211z","kf42":"\ufffd212z","kf43":"\ufffd213z","kf44":"\ufffd214z","kf45":"\ufffd200z","kf46":"\ufffd301z","kf47":"\ufffd302z","kf48":"\ufffd303z","kf49":"\ufffd304z","kf50":"\ufffd305z","kf51":"\ufffd306z","kf52":"\ufffd307z","kf53":"\ufffd308z","kf54":"\ufffd309z","kf55":"\ufffd310z","kf56":"\ufffd311z","kf57":"\ufffd312z","kf58":"\ufffd313z","kf59":"\ufffd314z","kf60":"\ufffd300z","khome":"\ufffdH","kcuu1":"\ufffdA","kcud1":"\ufffdB","kcub1":"\ufffdD","kcuf1":"\ufffdC","kclr":"\ufffd2J","kprt":"\ufffdi","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001b)6\u000e","rmacs":"\u001b)4\u000f"} +{"name":"d555-7b","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J","cnorm":"\u001b[3;2v","civis":"\u001b[3;0v","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[4;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001b[001z","kf2":"\u001b[002z","kf3":"\u001b[003z","kf4":"\u001b[004z","kf5":"\u001b[005z","kf6":"\u001b[006z","kf7":"\u001b[007z","kf8":"\u001b[008z","kf9":"\u001b[009z","kf10":"\u001b[010z","kf11":"\u001b[011z","kf12":"\u001b[012z","kf13":"\u001b[013z","kf14":"\u001b[014z","kf15":"\u001b[000z","kf16":"\u001b[101z","kf17":"\u001b[102z","kf18":"\u001b[103z","kf19":"\u001b[104z","kf20":"\u001b[105z","kf21":"\u001b[106z","kf22":"\u001b[107z","kf23":"\u001b[108z","kf24":"\u001b[109z","kf25":"\u001b[110z","kf26":"\u001b[111z","kf27":"\u001b[112z","kf28":"\u001b[113z","kf29":"\u001b[114z","kf30":"\u001b[100z","kf31":"\u001b[201z","kf32":"\u001b[202z","kf33":"\u001b[203z","kf34":"\u001b[204z","kf35":"\u001b[205z","kf36":"\u001b[206z","kf37":"\u001b[207z","kf38":"\u001b[208z","kf39":"\u001b[209z","kf40":"\u001b[210z","kf41":"\u001b[211z","kf42":"\u001b[212z","kf43":"\u001b[213z","kf44":"\u001b[214z","kf45":"\u001b[200z","kf46":"\u001b[301z","kf47":"\u001b[302z","kf48":"\u001b[303z","kf49":"\u001b[304z","kf50":"\u001b[305z","kf51":"\u001b[306z","kf52":"\u001b[307z","kf53":"\u001b[308z","kf54":"\u001b[309z","kf55":"\u001b[310z","kf56":"\u001b[311z","kf57":"\u001b[312z","kf58":"\u001b[313z","kf59":"\u001b[314z","kf60":"\u001b[300z","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u001b[2J","kprt":"\u001b[i","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)6"} +{"name":"d555-7b-w","cols":126,"lines":24,"bell":"\u0007","clear":"\u001b[2J","cnorm":"\u001b[3;2v","civis":"\u001b[3;0v","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[4;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001b[001z","kf2":"\u001b[002z","kf3":"\u001b[003z","kf4":"\u001b[004z","kf5":"\u001b[005z","kf6":"\u001b[006z","kf7":"\u001b[007z","kf8":"\u001b[008z","kf9":"\u001b[009z","kf10":"\u001b[010z","kf11":"\u001b[011z","kf12":"\u001b[012z","kf13":"\u001b[013z","kf14":"\u001b[014z","kf15":"\u001b[000z","kf16":"\u001b[101z","kf17":"\u001b[102z","kf18":"\u001b[103z","kf19":"\u001b[104z","kf20":"\u001b[105z","kf21":"\u001b[106z","kf22":"\u001b[107z","kf23":"\u001b[108z","kf24":"\u001b[109z","kf25":"\u001b[110z","kf26":"\u001b[111z","kf27":"\u001b[112z","kf28":"\u001b[113z","kf29":"\u001b[114z","kf30":"\u001b[100z","kf31":"\u001b[201z","kf32":"\u001b[202z","kf33":"\u001b[203z","kf34":"\u001b[204z","kf35":"\u001b[205z","kf36":"\u001b[206z","kf37":"\u001b[207z","kf38":"\u001b[208z","kf39":"\u001b[209z","kf40":"\u001b[210z","kf41":"\u001b[211z","kf42":"\u001b[212z","kf43":"\u001b[213z","kf44":"\u001b[214z","kf45":"\u001b[200z","kf46":"\u001b[301z","kf47":"\u001b[302z","kf48":"\u001b[303z","kf49":"\u001b[304z","kf50":"\u001b[305z","kf51":"\u001b[306z","kf52":"\u001b[307z","kf53":"\u001b[308z","kf54":"\u001b[309z","kf55":"\u001b[310z","kf56":"\u001b[311z","kf57":"\u001b[312z","kf58":"\u001b[313z","kf59":"\u001b[314z","kf60":"\u001b[300z","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u001b[2J","kprt":"\u001b[i","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)6"} +{"name":"d555-dg","cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","cnorm":"\u001eFQ2","civis":"\u001eFQ0","sgr0":"\u000f\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u000e","rev":"\u001eD","dim":"\u001c","cup":"\u0010%p2%c%p1%c","cub1":"\u0019","cuu1":"\u0017","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u0008","kcuu1":"\u0017","kcud1":"\u001a","kcub1":"\u0019","kcuf1":"\u0018","kclr":"\u000c","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001e\u0018","kLFT":"\u001e\u0019","kHOM":"\u001e\u0008"} +{"name":"d555-w","cols":126,"lines":24,"bell":"\u0007","clear":"\u001b[2J","cnorm":"\u001b[3;2v","civis":"\u001b[3;0v","sgr0":"\u001b[m\u001b)4\u000f","smul":"\u001b[4m","bold":"\u001b[4;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\ufffd001z","kf2":"\ufffd002z","kf3":"\ufffd003z","kf4":"\ufffd004z","kf5":"\ufffd005z","kf6":"\ufffd006z","kf7":"\ufffd007z","kf8":"\ufffd008z","kf9":"\ufffd009z","kf10":"\ufffd010z","kf11":"\ufffd011z","kf12":"\ufffd012z","kf13":"\ufffd013z","kf14":"\ufffd014z","kf15":"\ufffd000z","kf16":"\ufffd101z","kf17":"\ufffd102z","kf18":"\ufffd103z","kf19":"\ufffd104z","kf20":"\ufffd105z","kf21":"\ufffd106z","kf22":"\ufffd107z","kf23":"\ufffd108z","kf24":"\ufffd109z","kf25":"\ufffd110z","kf26":"\ufffd111z","kf27":"\ufffd112z","kf28":"\ufffd113z","kf29":"\ufffd114z","kf30":"\ufffd100z","kf31":"\ufffd201z","kf32":"\ufffd202z","kf33":"\ufffd203z","kf34":"\ufffd204z","kf35":"\ufffd205z","kf36":"\ufffd206z","kf37":"\ufffd207z","kf38":"\ufffd208z","kf39":"\ufffd209z","kf40":"\ufffd210z","kf41":"\ufffd211z","kf42":"\ufffd212z","kf43":"\ufffd213z","kf44":"\ufffd214z","kf45":"\ufffd200z","kf46":"\ufffd301z","kf47":"\ufffd302z","kf48":"\ufffd303z","kf49":"\ufffd304z","kf50":"\ufffd305z","kf51":"\ufffd306z","kf52":"\ufffd307z","kf53":"\ufffd308z","kf54":"\ufffd309z","kf55":"\ufffd310z","kf56":"\ufffd311z","kf57":"\ufffd312z","kf58":"\ufffd313z","kf59":"\ufffd314z","kf60":"\ufffd300z","khome":"\ufffdH","kcuu1":"\ufffdA","kcud1":"\ufffdB","kcub1":"\ufffdD","kcuf1":"\ufffdC","kclr":"\ufffd2J","kprt":"\ufffdi","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001b)6\u000e","rmacs":"\u001b)4\u000f"} +{"name":"d577","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J","cnorm":"\u001b[3;2v","civis":"\u001b[3;0v","sgr0":"\u001b[m\u001b)4\u000f","smul":"\u001b[4m","bold":"\u001b[4;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\ufffd001z","kf2":"\ufffd002z","kf3":"\ufffd003z","kf4":"\ufffd004z","kf5":"\ufffd005z","kf6":"\ufffd006z","kf7":"\ufffd007z","kf8":"\ufffd008z","kf9":"\ufffd009z","kf10":"\ufffd010z","kf11":"\ufffd011z","kf12":"\ufffd012z","kf13":"\ufffd013z","kf14":"\ufffd014z","kf15":"\ufffd000z","kf16":"\ufffd101z","kf17":"\ufffd102z","kf18":"\ufffd103z","kf19":"\ufffd104z","kf20":"\ufffd105z","kf21":"\ufffd106z","kf22":"\ufffd107z","kf23":"\ufffd108z","kf24":"\ufffd109z","kf25":"\ufffd110z","kf26":"\ufffd111z","kf27":"\ufffd112z","kf28":"\ufffd113z","kf29":"\ufffd114z","kf30":"\ufffd100z","kf31":"\ufffd201z","kf32":"\ufffd202z","kf33":"\ufffd203z","kf34":"\ufffd204z","kf35":"\ufffd205z","kf36":"\ufffd206z","kf37":"\ufffd207z","kf38":"\ufffd208z","kf39":"\ufffd209z","kf40":"\ufffd210z","kf41":"\ufffd211z","kf42":"\ufffd212z","kf43":"\ufffd213z","kf44":"\ufffd214z","kf45":"\ufffd200z","kf46":"\ufffd301z","kf47":"\ufffd302z","kf48":"\ufffd303z","kf49":"\ufffd304z","kf50":"\ufffd305z","kf51":"\ufffd306z","kf52":"\ufffd307z","kf53":"\ufffd308z","kf54":"\ufffd309z","kf55":"\ufffd310z","kf56":"\ufffd311z","kf57":"\ufffd312z","kf58":"\ufffd313z","kf59":"\ufffd314z","kf60":"\ufffd300z","khome":"\ufffdH","kcuu1":"\ufffdA","kcud1":"\ufffdB","kcub1":"\ufffdD","kcuf1":"\ufffdC","kclr":"\ufffd2J","kprt":"\ufffdi","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001b)6\u000e","rmacs":"\u001b)4\u000f"} +{"name":"d577-7b","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J","cnorm":"\u001b[3;2v","civis":"\u001b[3;0v","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[4;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001b[001z","kf2":"\u001b[002z","kf3":"\u001b[003z","kf4":"\u001b[004z","kf5":"\u001b[005z","kf6":"\u001b[006z","kf7":"\u001b[007z","kf8":"\u001b[008z","kf9":"\u001b[009z","kf10":"\u001b[010z","kf11":"\u001b[011z","kf12":"\u001b[012z","kf13":"\u001b[013z","kf14":"\u001b[014z","kf15":"\u001b[000z","kf16":"\u001b[101z","kf17":"\u001b[102z","kf18":"\u001b[103z","kf19":"\u001b[104z","kf20":"\u001b[105z","kf21":"\u001b[106z","kf22":"\u001b[107z","kf23":"\u001b[108z","kf24":"\u001b[109z","kf25":"\u001b[110z","kf26":"\u001b[111z","kf27":"\u001b[112z","kf28":"\u001b[113z","kf29":"\u001b[114z","kf30":"\u001b[100z","kf31":"\u001b[201z","kf32":"\u001b[202z","kf33":"\u001b[203z","kf34":"\u001b[204z","kf35":"\u001b[205z","kf36":"\u001b[206z","kf37":"\u001b[207z","kf38":"\u001b[208z","kf39":"\u001b[209z","kf40":"\u001b[210z","kf41":"\u001b[211z","kf42":"\u001b[212z","kf43":"\u001b[213z","kf44":"\u001b[214z","kf45":"\u001b[200z","kf46":"\u001b[301z","kf47":"\u001b[302z","kf48":"\u001b[303z","kf49":"\u001b[304z","kf50":"\u001b[305z","kf51":"\u001b[306z","kf52":"\u001b[307z","kf53":"\u001b[308z","kf54":"\u001b[309z","kf55":"\u001b[310z","kf56":"\u001b[311z","kf57":"\u001b[312z","kf58":"\u001b[313z","kf59":"\u001b[314z","kf60":"\u001b[300z","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u001b[2J","kprt":"\u001b[i","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)6"} +{"name":"d577-7b-w","cols":126,"lines":24,"bell":"\u0007","clear":"\u001b[2J","cnorm":"\u001b[3;2v","civis":"\u001b[3;0v","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[4;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001b[001z","kf2":"\u001b[002z","kf3":"\u001b[003z","kf4":"\u001b[004z","kf5":"\u001b[005z","kf6":"\u001b[006z","kf7":"\u001b[007z","kf8":"\u001b[008z","kf9":"\u001b[009z","kf10":"\u001b[010z","kf11":"\u001b[011z","kf12":"\u001b[012z","kf13":"\u001b[013z","kf14":"\u001b[014z","kf15":"\u001b[000z","kf16":"\u001b[101z","kf17":"\u001b[102z","kf18":"\u001b[103z","kf19":"\u001b[104z","kf20":"\u001b[105z","kf21":"\u001b[106z","kf22":"\u001b[107z","kf23":"\u001b[108z","kf24":"\u001b[109z","kf25":"\u001b[110z","kf26":"\u001b[111z","kf27":"\u001b[112z","kf28":"\u001b[113z","kf29":"\u001b[114z","kf30":"\u001b[100z","kf31":"\u001b[201z","kf32":"\u001b[202z","kf33":"\u001b[203z","kf34":"\u001b[204z","kf35":"\u001b[205z","kf36":"\u001b[206z","kf37":"\u001b[207z","kf38":"\u001b[208z","kf39":"\u001b[209z","kf40":"\u001b[210z","kf41":"\u001b[211z","kf42":"\u001b[212z","kf43":"\u001b[213z","kf44":"\u001b[214z","kf45":"\u001b[200z","kf46":"\u001b[301z","kf47":"\u001b[302z","kf48":"\u001b[303z","kf49":"\u001b[304z","kf50":"\u001b[305z","kf51":"\u001b[306z","kf52":"\u001b[307z","kf53":"\u001b[308z","kf54":"\u001b[309z","kf55":"\u001b[310z","kf56":"\u001b[311z","kf57":"\u001b[312z","kf58":"\u001b[313z","kf59":"\u001b[314z","kf60":"\u001b[300z","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u001b[2J","kprt":"\u001b[i","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)6"} +{"name":"d577-dg","aliases":["d578-dg"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","cnorm":"\u001eFQ2","civis":"\u001eFQ0","sgr0":"\u000f\u0015\u001d\u001eE\u001eFS00","smul":"\u0014","bold":"\u001eD\u0014","blink":"\u000e","rev":"\u001eD","dim":"\u001c","cup":"\u0010%p2%c%p1%c","cub1":"\u0019","cuu1":"\u0017","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001e|","kf13":"\u001e}","kf14":"\u001e~","kf15":"\u001ep","kf16":"\u001ea","kf17":"\u001eb","kf18":"\u001ec","kf19":"\u001ed","kf20":"\u001ee","kf21":"\u001ef","kf22":"\u001eg","kf23":"\u001eh","kf24":"\u001ei","kf25":"\u001ej","kf26":"\u001ek","kf27":"\u001el","kf28":"\u001em","kf29":"\u001en","kf30":"\u001e`","kf31":"\u001e1","kf32":"\u001e2","kf33":"\u001e3","kf34":"\u001e4","kf35":"\u001e5","kf36":"\u001e6","kf37":"\u001e7","kf38":"\u001e8","kf39":"\u001e9","kf40":"\u001e:","kf41":"\u001e;","kf42":"\u001e\u003c","kf43":"\u001e=","kf44":"\u001e\u003e","kf45":"\u001e0","kf46":"\u001e!","kf47":"\u001e\"","kf48":"\u001e#","kf49":"\u001e$","kf50":"\u001e%%","kf51":"\u001e\u0026","kf52":"\u001e'","kf53":"\u001e(","kf54":"\u001e)","kf55":"\u001e*","kf56":"\u001e+","kf57":"\u001e,","kf58":"\u001e-","kf59":"\u001e.","kf60":"\u001e ","khome":"\u0008","kcuu1":"\u0017","kcud1":"\u001a","kcub1":"\u0019","kcuf1":"\u0018","kclr":"\u000c","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001eFS11","rmacs":"\u001eFS00","kRIT":"\u001e\u0018","kLFT":"\u001e\u0019","kHOM":"\u001e\u0008"} +{"name":"d577-w","cols":126,"lines":24,"bell":"\u0007","clear":"\u001b[2J","cnorm":"\u001b[3;2v","civis":"\u001b[3;0v","sgr0":"\u001b[m\u001b)4\u000f","smul":"\u001b[4m","bold":"\u001b[4;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\ufffd001z","kf2":"\ufffd002z","kf3":"\ufffd003z","kf4":"\ufffd004z","kf5":"\ufffd005z","kf6":"\ufffd006z","kf7":"\ufffd007z","kf8":"\ufffd008z","kf9":"\ufffd009z","kf10":"\ufffd010z","kf11":"\ufffd011z","kf12":"\ufffd012z","kf13":"\ufffd013z","kf14":"\ufffd014z","kf15":"\ufffd000z","kf16":"\ufffd101z","kf17":"\ufffd102z","kf18":"\ufffd103z","kf19":"\ufffd104z","kf20":"\ufffd105z","kf21":"\ufffd106z","kf22":"\ufffd107z","kf23":"\ufffd108z","kf24":"\ufffd109z","kf25":"\ufffd110z","kf26":"\ufffd111z","kf27":"\ufffd112z","kf28":"\ufffd113z","kf29":"\ufffd114z","kf30":"\ufffd100z","kf31":"\ufffd201z","kf32":"\ufffd202z","kf33":"\ufffd203z","kf34":"\ufffd204z","kf35":"\ufffd205z","kf36":"\ufffd206z","kf37":"\ufffd207z","kf38":"\ufffd208z","kf39":"\ufffd209z","kf40":"\ufffd210z","kf41":"\ufffd211z","kf42":"\ufffd212z","kf43":"\ufffd213z","kf44":"\ufffd214z","kf45":"\ufffd200z","kf46":"\ufffd301z","kf47":"\ufffd302z","kf48":"\ufffd303z","kf49":"\ufffd304z","kf50":"\ufffd305z","kf51":"\ufffd306z","kf52":"\ufffd307z","kf53":"\ufffd308z","kf54":"\ufffd309z","kf55":"\ufffd310z","kf56":"\ufffd311z","kf57":"\ufffd312z","kf58":"\ufffd313z","kf59":"\ufffd314z","kf60":"\ufffd300z","khome":"\ufffdH","kcuu1":"\ufffdA","kcud1":"\ufffdB","kcub1":"\ufffdD","kcuf1":"\ufffdC","kclr":"\ufffd2J","kprt":"\ufffdi","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001b)6\u000e","rmacs":"\u001b)4\u000f"} +{"name":"d578","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J","cnorm":"\u001b[3;2v","civis":"\u001b[3;0v","sgr0":"\u001b[m\u001b)4\u000f","smul":"\u001b[4m","bold":"\u001b[4;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\ufffd001z","kf2":"\ufffd002z","kf3":"\ufffd003z","kf4":"\ufffd004z","kf5":"\ufffd005z","kf6":"\ufffd006z","kf7":"\ufffd007z","kf8":"\ufffd008z","kf9":"\ufffd009z","kf10":"\ufffd010z","kf11":"\ufffd011z","kf12":"\ufffd012z","kf13":"\ufffd013z","kf14":"\ufffd014z","kf15":"\ufffd000z","kf16":"\ufffd101z","kf17":"\ufffd102z","kf18":"\ufffd103z","kf19":"\ufffd104z","kf20":"\ufffd105z","kf21":"\ufffd106z","kf22":"\ufffd107z","kf23":"\ufffd108z","kf24":"\ufffd109z","kf25":"\ufffd110z","kf26":"\ufffd111z","kf27":"\ufffd112z","kf28":"\ufffd113z","kf29":"\ufffd114z","kf30":"\ufffd100z","kf31":"\ufffd201z","kf32":"\ufffd202z","kf33":"\ufffd203z","kf34":"\ufffd204z","kf35":"\ufffd205z","kf36":"\ufffd206z","kf37":"\ufffd207z","kf38":"\ufffd208z","kf39":"\ufffd209z","kf40":"\ufffd210z","kf41":"\ufffd211z","kf42":"\ufffd212z","kf43":"\ufffd213z","kf44":"\ufffd214z","kf45":"\ufffd200z","kf46":"\ufffd301z","kf47":"\ufffd302z","kf48":"\ufffd303z","kf49":"\ufffd304z","kf50":"\ufffd305z","kf51":"\ufffd306z","kf52":"\ufffd307z","kf53":"\ufffd308z","kf54":"\ufffd309z","kf55":"\ufffd310z","kf56":"\ufffd311z","kf57":"\ufffd312z","kf58":"\ufffd313z","kf59":"\ufffd314z","kf60":"\ufffd300z","khome":"\ufffdH","kcuu1":"\ufffdA","kcud1":"\ufffdB","kcub1":"\ufffdD","kcuf1":"\ufffdC","kclr":"\ufffd2J","kprt":"\ufffdi","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u001b)6\u000e","rmacs":"\u001b)4\u000f"} +{"name":"d578-7b","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J","cnorm":"\u001b[3;2v","civis":"\u001b[3;0v","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[4;7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001b[001z","kf2":"\u001b[002z","kf3":"\u001b[003z","kf4":"\u001b[004z","kf5":"\u001b[005z","kf6":"\u001b[006z","kf7":"\u001b[007z","kf8":"\u001b[008z","kf9":"\u001b[009z","kf10":"\u001b[010z","kf11":"\u001b[011z","kf12":"\u001b[012z","kf13":"\u001b[013z","kf14":"\u001b[014z","kf15":"\u001b[000z","kf16":"\u001b[101z","kf17":"\u001b[102z","kf18":"\u001b[103z","kf19":"\u001b[104z","kf20":"\u001b[105z","kf21":"\u001b[106z","kf22":"\u001b[107z","kf23":"\u001b[108z","kf24":"\u001b[109z","kf25":"\u001b[110z","kf26":"\u001b[111z","kf27":"\u001b[112z","kf28":"\u001b[113z","kf29":"\u001b[114z","kf30":"\u001b[100z","kf31":"\u001b[201z","kf32":"\u001b[202z","kf33":"\u001b[203z","kf34":"\u001b[204z","kf35":"\u001b[205z","kf36":"\u001b[206z","kf37":"\u001b[207z","kf38":"\u001b[208z","kf39":"\u001b[209z","kf40":"\u001b[210z","kf41":"\u001b[211z","kf42":"\u001b[212z","kf43":"\u001b[213z","kf44":"\u001b[214z","kf45":"\u001b[200z","kf46":"\u001b[301z","kf47":"\u001b[302z","kf48":"\u001b[303z","kf49":"\u001b[304z","kf50":"\u001b[305z","kf51":"\u001b[306z","kf52":"\u001b[307z","kf53":"\u001b[308z","kf54":"\u001b[309z","kf55":"\u001b[310z","kf56":"\u001b[311z","kf57":"\u001b[312z","kf58":"\u001b[313z","kf59":"\u001b[314z","kf60":"\u001b[300z","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u001b[2J","kprt":"\u001b[i","acsc":"j$k\"l!m#n)q+t'u\u0026v(w%x*","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)6"} +{"name":"d800","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[1;1H\u001b[2J","cnorm":"\u001b[\u003e12h","sgr0":"\u001b[m","smul":"\u001b[4m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOT","kf6":"\u001bOU","kf7":"\u001bOV","kf8":"\u001bOW","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``a1fxgqh0jYk?lZm@nEooppqDrrsstCu4vAwBx3yyzz{{||}}~~","smacs":"\u001b[1m","rmacs":"\u001b[m"} +{"name":"ddr","aliases":["ddr3180","rebus3180"],"cols":80,"lines":24,"clear":"\u001b[H\u001b[2J$\u003c50/\u003e","sgr0":"\u001b[m$\u003c2/\u003e","smul":"\u001b[4m$\u003c2/\u003e","bold":"\u001b[1m$\u003c2/\u003e","blink":"\u001b[5m$\u003c2/\u003e","rev":"\u001b[7m$\u003c2/\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5/\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2/\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"dec-vt100","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"dec-vt220","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0$\u003c2\u003e","rmacs":"\u001b(B$\u003c4\u003e","enacs":"\u001b)0"} +{"name":"decansi","cols":-1,"lines":-1,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"delta","aliases":["dd5000"],"cols":80,"lines":27,"bell":"\u0007","clear":"\u000eR","cup":"\u000f%p1%p1%{16}%m%{2}%*%-%'9'%+%c%p2%p2%{16}%m%{2}%*%-%'9'%+%c","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000"} +{"name":"dg-generic","cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","sgr0":"\u000f\u0015\u001d","smul":"\u0014","blink":"\u000e","dim":"\u001c","cup":"\u0010%p2%c%p1%c","cub1":"\u0019","cuu1":"\u0017","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001ea","kf13":"\u001eb","kf14":"\u001ec","kf15":"\u001ed","kf16":"\u001ee","kf17":"\u001ef","kf18":"\u001eg","kf19":"\u001eh","kf20":"\u001ei","kf21":"\u001ej","kf22":"\u001ek","kf23":"\u001e1","kf24":"\u001e2","kf25":"\u001e3","kf26":"\u001e4","kf27":"\u001e5","kf28":"\u001e6","kf29":"\u001e7","kf30":"\u001e8","kf31":"\u001e9","kf32":"\u001e:","kf33":"\u001e;","kf34":"\u001e!","kf35":"\u001e\"","kf36":"\u001e#","kf37":"\u001e$","kf38":"\u001e%%","kf39":"\u001e\u0026","kf40":"\u001e'","kf41":"\u001e(","kf42":"\u001e)","kf43":"\u001e*","kf44":"\u001e+","khome":"\u0008","kcuu1":"\u0017","kcud1":"\u001a","kcub1":"\u0019","kcuf1":"\u0018","kclr":"\u000c"} +{"name":"dg200","cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","smul":"\u0014","cup":"\u0010%p2%c%p1%c","cub1":"\u0019","cuu1":"\u0017","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","khome":"\u0008","kcuu1":"\u0017","kcud1":"\u001a","kcub1":"\u0019","kcuf1":"\u0018"} +{"name":"dg210","aliases":["dg-ansi"],"cols":80,"lines":24,"clear":"\u001b[2J","smul":"\u001b[4;m","cup":"\u001b[%i%p1%d;%p2%dH","cuu1":"\u001b[A","pad":"\u0000","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"dg211","cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","smcup":"\u000c\u0012","rmcup":"\u000c","cnorm":"\u000c","smul":"\u0014","cup":"\u0010%p2%c%p1%c","cub1":"\u0019","cuu1":"\u0017","pad":"\u0000","kbs":"\u0019","khome":"\u0008","kcuu1":"\u0017","kcud1":"\u001a","kcub1":"\u0019","kcuf1":"\u0018"} +{"name":"dg450","aliases":["dg6134"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","smul":"\u0014","cup":"\u0010%p2%c%p1%c","cuu1":"\u0017","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","khome":"\u0008","kcuu1":"\u0017","kcud1":"\u001a","kcub1":"\u0019","kcuf1":"\u0018"} +{"name":"dg460-ansi","cols":80,"lines":24,"clear":"\u001b[2J","sgr0":"\u001b[m","smul":"\u001b[4m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%2d;%p2%2dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u001b[D","kf1":"\u001b[002z","kf2":"\u001b[003z","kf3":"\u001b[004z","kf4":"\u001b[005z","kf5":"\u001b[006z","kf6":"\u001b[007z","kf7":"\u001b[008z","kf8":"\u001b[009z","kf9":"\u001b[010z","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"dg6053","aliases":["6053","6053-dg","605x","605x-dg","d2","d2-dg","dg605x"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","sgr0":"\u000f\u0015\u001d","smul":"\u0014","blink":"\u000e","dim":"\u001c","cup":"\u0010%p2%c%p1%c","cub1":"\u0019","cuu1":"\u0017","pad":"\u0000","kf1":"\u001eq","kf2":"\u001er","kf3":"\u001es","kf4":"\u001et","kf5":"\u001eu","kf6":"\u001ev","kf7":"\u001ew","kf8":"\u001ex","kf9":"\u001ey","kf10":"\u001ez","kf11":"\u001e{","kf12":"\u001ea","kf13":"\u001eb","kf14":"\u001ec","kf15":"\u001ed","kf16":"\u001ee","kf17":"\u001ef","kf18":"\u001eg","kf19":"\u001eh","kf20":"\u001ei","kf21":"\u001ej","kf22":"\u001ek","kf23":"\u001e1","kf24":"\u001e2","kf25":"\u001e3","kf26":"\u001e4","kf27":"\u001e5","kf28":"\u001e6","kf29":"\u001e7","kf30":"\u001e8","kf31":"\u001e9","kf32":"\u001e:","kf33":"\u001e;","kf34":"\u001e!","kf35":"\u001e\"","kf36":"\u001e#","kf37":"\u001e$","kf38":"\u001e%%","kf39":"\u001e\u0026","kf40":"\u001e'","kf41":"\u001e(","kf42":"\u001e)","kf43":"\u001e*","kf44":"\u001e+","khome":"\u0008","kcuu1":"\u0017","kcud1":"\u001a","kcub1":"\u0019","kcuf1":"\u0018","kclr":"\u000c"} +{"name":"dg6053-old","aliases":["dg100"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","smcup":"\u000c\u0012","rmcup":"\u000c","cnorm":"\u000c","smul":"\u0014","cup":"\u0010%p2%c%p1%c","cub1":"\u0019","cuu1":"\u0017","pad":"\u0000","kbs":"\u0019","kf1":"\u001er","kf2":"\u001es","kf3":"\u001et","kf4":"\u001eu","kf5":"\u001ev","kf6":"\u001ew","kf7":"\u001ex","kf8":"\u001ey","kf9":"\u001ez","khome":"\u0008","kcuu1":"\u0017","kcud1":"\u001a","kcub1":"\u0019","kcuf1":"\u0018"} +{"name":"djgpp","cols":-1,"lines":-1,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[v","civis":"\u001b[1v","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[[A","kf2":"\u001b[[B","kf3":"\u001b[[C","kf4":"\u001b[[D","kf5":"\u001b[[E","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"djgpp204","cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","cnorm":"\u001b[v","civis":"\u001b[1v","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[[A","kf2":"\u001b[[B","kf3":"\u001b[[C","kf4":"\u001b[[D","kf5":"\u001b[[E","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"dku7003","cols":80,"lines":25,"clear":"\u001d\u001f","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[7m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0019","cuu1":"\u001a","pad":"\u0000","kbs":"\u0008","khome":"\u001d","kcuu1":"\u001a","kcud1":"\u000b","kcub1":"\u0019","kcuf1":"\u0018"} +{"name":"dku7003-dumb","cols":80,"lines":25,"clear":"\u001d\u001f","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0019","cuu1":"\u001a","pad":"\u0000","kbs":"\u0008","khome":"\u001d","kcuu1":"\u001a","kcud1":"\u000b","kcub1":"\u0019","kcuf1":"\u0018"} +{"name":"dku7202","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J","smcup":"\u001b[?\u003eh\u001bPY99:98\u001b\\","rmcup":"\u001b[0;98v\u001b[2J\u001b[v","cnorm":"\u001b[r","civis":"\u001b[1r","sgr0":"\u001b[m\u000f","smul":"\u001b[0;2m","blink":"\u001b[0;2;4m","rev":"\u001b[0;7m","dim":"\u001b[0;5m","cup":"\u001b[%i%p1%d;%p2%df","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[1u\u0017","kf2":"\u001b[2u\u0017","kf3":"\u001b[3u\u0017","kf4":"\u001b[4u\u0017","kf5":"\u001b[5u\u0017","kf6":"\u001b[6u\u0017","kf7":"\u001b[7u\u0017","kf8":"\u001b[8u\u0017","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggj)k,l\u0026m#n/ooppq*rrsst'u-v+w.x%yyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"dm1520","aliases":["dm1521"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","cup":"\u001e%p2%' '%+%c%p1%' '%+%c","cub1":"\u0008","cuu1":"\u001f","pad":"\u0000","khome":"\u0019","kcuu1":"\u001f","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u001c"} +{"name":"dm2500","aliases":["datamedia2500"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001e\u001e","cup":"\u000c%p2%'`'%^%c%p1%'`'%^%c","cub1":"\u0008","cuu1":"\u001a","pad":"\ufffd"} +{"name":"dm3025","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bM$\u003c2\u003e","cup":"\u001bY%p2%' '%+%c%p1%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000"} +{"name":"dm3045","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bM$\u003c2\u003e","cup":"\u001bY%p2%' '%+%c%p1%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"","kf1":"\u001bp\r","kf2":"\u001bq\r","kf3":"\u001br\r","kf4":"\u001bs\r","kf5":"\u001bt\r","kf6":"\u001bu\r","kf7":"\u001bv\r","kf8":"\u001bw\r","kf9":"\u001bx\r","khome":"\u001bH","kcuu1":"\u001bA","kcuf1":"\u001bC"} +{"name":"dm80","aliases":["dmdt80","dt80"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[H","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"%i\u001b[%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"dm80w","aliases":["dmdt80w","dt80w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J$\u003c50/\u003e","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5/\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c5/\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"dmchat","cols":80,"lines":24,"bell":"\u0007","clear":"\u001e\u001e","cup":"\u000c%p2%'`'%^%c%p1%'`'%^%c","cub1":"\u0008","cuu1":"\u001a","pad":"\ufffd"} +{"name":"dmterm","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bj","cnorm":"\u001bG6","civis":"\u001bG5","sgr0":"\u001bG0","rev":"\u001bG4","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kf1":"\u001b2","kf2":"\u001b3","kf3":"\u001b4","kf4":"\u001b5","kf5":"\u001b6","kf6":"\u001b7","kf7":"\u001b8","kf8":"\u001b9","kf9":"\u001b0","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"dp8242","cols":80,"lines":25,"bell":"\u0007","clear":"\u0015\u001b\u0004\u0017\u0018","cnorm":"\u0018","civis":"\u0019","smul":"\u001b\u0006","cup":"\t%p2%'\ufffd'%+%c%p1%'\ufffd'%+%c","cub1":"\u0008","pad":"\u0000","kbs":"\u0008","kf1":"\u0007\u001be","kf2":"\t\u001bd","kf3":"\n\u001bc","kf4":"\n\u001bb","kf5":"\u0013\u001ba","kf6":"\u001bO\u001be","kf7":"\u001bN\u001bd","kf8":"\u001bM\u001bc","kf9":"\u001bL\u001bb","kf10":"\u001bK\u001ba","kcuu1":"\u0005","kcud1":"\u0002","kcub1":"\u0004","kcuf1":"\u0006"} +{"name":"dt100","aliases":["dt-100"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u001b[4m","cup":"\u0008\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001b[?3i","kf2":"\u001b[2i","kf3":"\u001b[@","kf4":"\u001b[M","kf5":"\u001b[17~","kf6":"\u001b[18~","kf7":"\u001b[19~","kf8":"\u001b[20~","kf9":"\u001b[21~","kf10":"\u001b[?5i","khome":"\u001b[H","kpp":"\u001b[28~","knp":"\u001b[29~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"jjkkllmmnnqqttuuvvwwxx","smacs":"\u000e","rmacs":"\u000f"} +{"name":"dt100w","aliases":["dt-100w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u001b[4m","cup":"\u0008\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001b[?3i","kf2":"\u001b[2i","kf3":"\u001b[@","kf4":"\u001b[M","kf5":"\u001b[17~","kf6":"\u001b[18~","kf7":"\u001b[19~","kf8":"\u001b[20~","kf9":"\u001b[21~","kf10":"\u001b[?5i","khome":"\u001b[H","kpp":"\u001b[28~","knp":"\u001b[29~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"jjkkllmmnnqqttuuvvwwxx","smacs":"\u000e","rmacs":"\u000f"} +{"name":"dt110","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u001b[4m","cup":"\u0008\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[0A","pad":"\u0000","kf1":"\u001b[1~","kf2":"\u001b[2~","kf3":"\u001b[3~","kf4":"\u001b[4~","kf5":"\u001b[5~","kf6":"\u001b[6~","kf7":"\u001b[7~","kf8":"\u001b[8~","kf9":"\u001b[9~","kf10":"\u001b[10~","kich":"\u001b[@","khome":"\u001b[G","kend":"\u001b[K","kpp":"\u001b[25~","knp":"\u001b[26~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"jjkkllmmnnqqttuuvvwwxx","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"dt80-sas","cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","sgr0":"\u0018","rev":"\u001b$2\u0004","cup":"\u001b=%p2%' '%+%c%p1%' '%+%c","cub1":"\u0008","cuu1":"\u001f","pad":"\u0000","khome":"\u0019","kcuu1":"\u001f","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u001c","kclr":"\u000c","acsc":"``a1fxgqh0jYk?lZm@nEooppqDrrsstCu4vAwBx3yyzz{{||}}~~","smacs":"\u001bF","rmacs":"\u001bG"} +{"name":"dtc382","cols":80,"lines":24,"bell":"\u0007","clear":"\u0010\u001d$\u003c20\u003e","smcup":"\u0010\u001d$\u003c20\u003e","cnorm":"\u0010b","smul":"\u0010 \u0010","cup":"\u0010\u0011%p2%c%p1%c","cub1":"\u0008","cuu1":"\u0010\u000c","pad":""} +{"name":"dtterm","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"dwk","aliases":["dwk-vt"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","sgr0":"\u001bX","rev":"\u001bT","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"","kf1":"\u001bf1","kf2":"\u001bf2","kf3":"\u001bf3","kf4":"\u001bf4","kf5":"\u001bf5","kf6":"\u001bf6","kf7":"\u001bf7","kf8":"\u001bf8","kf9":"\u001bf9","kf10":"\u001bf0","kich":"\u001bd","kdch":"\u001be","kpp":"\u001bg","knp":"\u001bh","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","acsc":"+^,Q-S.M0`+a:f'g#h#i#jXkClJmFnNo~qUs_tEuPv\\wKxW~_","smacs":"\u001bF","rmacs":"\u001bG"} +{"name":"elks","cols":80,"lines":25,"bell":"\u0007","clear":"\u001bH\u001bJ","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u001bD","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kcud1":"\n","kcub1":"\u0008"} +{"name":"elks-ansi","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[H\u001b[2J","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kcud1":"\n","kcub1":"\u0008"} +{"name":"elks-vt52","cols":80,"lines":25,"bell":"\u0007","clear":"\u001bH\u001bJ","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u001bD","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kcud1":"\n","kcub1":"\u0008"} +{"name":"emu","cols":80,"lines":24,"colors":15,"bell":"\u0007","clear":"\u001bP\u001bE0;0;","cnorm":"\u001ba","civis":"\u001bZ","sgr0":"\u001bS","smul":"\u001bV","bold":"\u001bU","blink":"\u001bW","rev":"\u001bT","setaf":"\u001br%i%p1%d;","setbg":"\u001bs%i%p1%d;","cup":"\u001bE%p1%d;%p2%d;","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bF01","kf2":"\u001bF02","kf3":"\u001bF03","kf4":"\u001bF04","kf5":"\u001bF05","kf6":"\u001bF06","kf7":"\u001bF07","kf8":"\u001bF08","kf9":"\u001bF09","kf10":"\u001bF10","kf11":"\u001bF11","kf12":"\u001bF12","kf13":"\u001bF13","kf14":"\u001bF14","kf15":"\u001bF15","kf16":"\u001bF16","kf17":"\u001bF17","kf18":"\u001bF18","kf19":"\u001bF19","kf20":"\u001bF20","kich":"\u001bins","kdch":"","kpp":"\u001bprior","knp":"\u001bnext","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bC","kcuf1":"\u001bD","acsc":"61a\ufffdf\ufffdg2j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo\ufffdq\ufffds\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffd~\ufffd"} +{"name":"emu-220","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[H","smcup":"\u001b[?1l\u001b=","rmcup":"\u001b\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u001b[0;4m","bold":"\u001b[0;1m","blink":"\u001b[0;5m","rev":"\u001b[0;7m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[1D","cuu1":"\u001b[1A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOq","kf2":"\u001bOr","kf3":"\u001bOs","kf4":"\u001bOt","kf5":"\u001bOu","kf6":"\u001bOv","kf7":"\u001bOw","kf8":"\u001bOx","kf9":"\u001bOy","kf10":"\u001bOl","kf11":"\u001bOm","kf12":"\u001bOn","kf13":"\u001bOP","kf14":"\u001bOQ","kf15":"\u001bOR","kf16":"\u001bOS","kf26":"\u001b[17~","kf27":"\u001b[18~","kf28":"\u001b[19~","kf29":"\u001b[20~","kf30":"\u001b[21~","kf34":"\u001b[26~","kf37":"\u001b[31~","kf38":"\u001b[32~","kf39":"\u001b[33~","kf40":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"emx-base","cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[2J","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\ufffd;","kf2":"\ufffd\u003c","kf3":"\ufffd=","kf4":"\ufffd\u003e","kf5":"\ufffd?","kf6":"\ufffd@","kf7":"\ufffdA","kf8":"\ufffdB","kf9":"\ufffdC","kf10":"\ufffdD","kf11":"\ufffd\ufffd","kf12":"\ufffd\ufffd","kf13":"\ufffdT","kf14":"\ufffdU","kf15":"\ufffdV","kf16":"\ufffdW","kf17":"\ufffdX","kf18":"\ufffdY","kf19":"\ufffdZ","kf20":"\ufffd[","kf21":"\ufffd\\","kf22":"\ufffd]","kf23":"\ufffd\ufffd","kf24":"\ufffd\ufffd","kf25":"\ufffd^","kf26":"\ufffd_","kf27":"\ufffd`","kf28":"\ufffda","kf29":"\ufffdb","kf30":"\ufffdc","kf31":"\ufffdd","kf32":"\ufffde","kf33":"\ufffdf","kf34":"\ufffdg","kf35":"\ufffd\ufffd","kf36":"\ufffd\ufffd","kf37":"\ufffdh","kf38":"\ufffdi","kf39":"\ufffdj","kf40":"\ufffdk","kf41":"\ufffdl","kf42":"\ufffdm","kf43":"\ufffdn","kf44":"\ufffdo","kf45":"\ufffdp","kf46":"\ufffdq","kf47":"\ufffd\ufffd","kf48":"\ufffd\ufffd","kich":"\ufffdR","kdch":"\ufffdS","khome":"\ufffdG","kend":"\ufffdO","kpp":"\ufffdI","knp":"\ufffdQ","kcuu1":"\ufffdH","kcud1":"\ufffdP","kcub1":"\ufffdK","kcuf1":"\ufffdM","kcbt":"\ufffd\u000f","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"env230","aliases":["envision230"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"ergo4000","cols":80,"lines":66,"bell":"\u0007","clear":"\u001b[H\u001b[2J$\u003c80\u003e","sgr0":"\u001b[m$\u003c20\u003e","smkx":"\u001b=$\u003c4\u003e","rmkx":"\u001b=$\u003c4\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"esprit","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b\u001c","smkx":"\u001b\u003c","rmkx":"\u001b\u003e","cup":"\u001b\u0011%p2%c%p1%c","cub1":"\u0008","cuu1":"\u001b\u000c","pad":"\u0000","kbs":"\u0008","kf1":"\u00021\n","kf2":"\u00022\n","kf3":"\u00023\n","kf4":"\u00024\n","kf5":"\u00025\n","kf6":"\u00026\n","kf7":"\u00027\n","kf8":"\u00028\n","kf9":"\u00029\n","khome":"\u001b\u0012","kcuu1":"\u001b\u000c","kcud1":"\u001b\u000b","kcub1":"\u0008","kcuf1":"\u0010"} +{"name":"esprit-am","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b\u001c","smkx":"\u001b\u003c","rmkx":"\u001b\u003e","cup":"\u001b\u0011%p2%c%p1%c","cub1":"\u0008","cuu1":"\u001b\u000c","pad":"\u0000","kbs":"\u0008","kf1":"\u00021\n","kf2":"\u00022\n","kf3":"\u00023\n","kf4":"\u00024\n","kf5":"\u00025\n","kf6":"\u00026\n","kf7":"\u00027\n","kf8":"\u00028\n","kf9":"\u00029\n","khome":"\u001b\u0012","kcuu1":"\u001b\u000c","kcud1":"\u001b\u000b","kcub1":"\u0008","kcuf1":"\u0010"} +{"name":"eterm","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000"} +{"name":"ex155","cols":80,"lines":24,"clear":"\u001bX","smul":"\u001bf\u001bD","cup":"\u001bE%p1%' '%+%c%p2%' '%+%c","pad":"\u0000","kbs":"\u0008","khome":"\u001b@","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001b[","kclr":"\u001bX"} +{"name":"excel62","aliases":["excel64"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[H","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"%i\u001b[%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOu","kf6":"\u001bOv","kf7":"\u001bOw","kf8":"\u001bOx","kf9":"\u001bOy","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"excel62-rv","aliases":["excel64-rv"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[H","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"%i\u001b[%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOu","kf6":"\u001bOv","kf7":"\u001bOw","kf8":"\u001bOx","kf9":"\u001bOy","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"excel62-w","aliases":["excel64-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J$\u003c50/\u003e","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5/\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c5/\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOu","kf6":"\u001bOv","kf7":"\u001bOw","kf8":"\u001bOx","kf9":"\u001bOy","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"f100","aliases":["freedom","freedom100"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001a","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","smacs":"\u001b%%","rmacs":"\u001b$"} +{"name":"f100-rv","aliases":["freedom-rv"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001a","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","smacs":"\u001b%%","rmacs":"\u001b$"} +{"name":"f110","aliases":["freedom110"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001a","cnorm":"\u001b.2","civis":"\u001b.1","sgr0":"\u001bG0","smul":"\u001bG8","bold":"\u001bG0","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bG@","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kclr":"\u001e","smacs":"\u001b$","rmacs":"\u001b%%"} +{"name":"f110-14","cols":80,"lines":24,"bell":"\u0007","clear":"\u001a","cnorm":"\u001b.2","civis":"\u001b.1","sgr0":"\u001bG0","smul":"\u001bG8","bold":"\u001bG0","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bG@","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kclr":"\u001e","smacs":"\u001b$","rmacs":"\u001b%%"} +{"name":"f110-14w","cols":132,"lines":24,"bell":"\u0007","clear":"\u001a","cnorm":"\u001b.2","civis":"\u001b.1","sgr0":"\u001bG0","smul":"\u001bG8","bold":"\u001bG0","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bG@","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kclr":"\u001e","smacs":"\u001b$","rmacs":"\u001b%%"} +{"name":"f110-w","cols":132,"lines":24,"bell":"\u0007","clear":"\u001a","cnorm":"\u001b.2","civis":"\u001b.1","sgr0":"\u001bG0","smul":"\u001bG8","bold":"\u001bG0","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bG@","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kclr":"\u001e","smacs":"\u001b$","rmacs":"\u001b%%"} +{"name":"f1720","aliases":["f1720a"],"cols":80,"lines":16,"bell":"\u0007","clear":"\u001b[H\u001b[2J","sgr0":"\u001b[m","smul":"\u001b[4m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kcuu1":"\u001c","kcud1":"\u001d","kcub1":"\u001f","kcuf1":"\u001e"} +{"name":"f200","aliases":["freedom200"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001a","cnorm":"\u001b.1","civis":"\u001b.0","sgr0":"\u001bG0","smul":"\u001bG8","bold":"\u001bG0","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bG@","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kich":"\u001bQ","kdch":"\u001bW","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kclr":"\u001e","smacs":"\u001b$","rmacs":"\u001b%%"} +{"name":"f200-w","cols":132,"lines":24,"bell":"\u0007","clear":"\u001a","cnorm":"\u001b.1","civis":"\u001b.0","sgr0":"\u001bG0","smul":"\u001bG8","bold":"\u001bG0","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bG@","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kich":"\u001bQ","kdch":"\u001bW","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kclr":"\u001e","smacs":"\u001b$","rmacs":"\u001b%%"} +{"name":"f200vi","cols":80,"lines":24,"bell":"\u0007","clear":"\u001a","cnorm":"\u001b.1","civis":"\u001b.0","sgr0":"\u001bG0","smul":"\u001bG8","bold":"\u001bG0","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bG@","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kich":"\u001bQ","kdch":"\u001bW","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kclr":"\u001e","smacs":"\u001b$","rmacs":"\u001b%%"} +{"name":"f200vi-w","cols":132,"lines":24,"bell":"\u0007","clear":"\u001a","cnorm":"\u001b.1","civis":"\u001b.0","sgr0":"\u001bG0","smul":"\u001bG8","bold":"\u001bG0","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bG@","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kich":"\u001bQ","kdch":"\u001bW","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kclr":"\u001e","smacs":"\u001b$","rmacs":"\u001b%%"} +{"name":"falco","aliases":["ts-1","ts1"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*","sgr0":"\u001bg0","smul":"\u001bg1","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"falco-p","aliases":["ts-1p","ts1p"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*","smcup":"\u001b_d","rmcup":"\u001b_b","sgr0":"\u001bg0","smul":"\u001bg1","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"fos","aliases":["fortune"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u000c$\u003c20\u003e","cnorm":"\u001b\\","civis":"\u001b]","sgr0":"\u001bI","smul":"\u001cHP","blink":"\u001bN","rev":"\u001bH","cup":"\u001cC%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b$\u003c3\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u0001a\r","kf2":"\u0001b\r","kf3":"\u0001c\r","kf4":"\u0001d\r","kf5":"\u0001e\r","kf6":"\u0001f\r","kf7":"\u0001g\r","kf8":"\u0001h\r","khome":"\u0001?\r","kend":"\u0001k\r","kpp":"\u0001n\r","knp":"\u0001o\r","kcuu1":"\u0001x\r","kcud1":"\u0001y\r","kcub1":"\u0001w\r","kcuf1":"\u0001z\r","acsc":"j*k(l m\"q\u0026v%w#x-","smacs":"\u001bo","rmacs":"\u000f"} +{"name":"fox","aliases":["pe1100"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ$\u003c132\u003e","cup":"\u001bX%p1%' '%+%c\u001bY%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000"} +{"name":"gator","cols":128,"lines":47,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m","smul":"\u001b[4m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kcud1":"\n","kcub1":"\u0008"} +{"name":"gator-52","cols":128,"lines":47,"bell":"\u0007","clear":"\u001bH\u001bJ","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u001bD","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","acsc":"ffgghhompoqqss.k","smacs":"\u001bF","rmacs":"\u001bG"} +{"name":"gator-52t","cols":128,"lines":94,"bell":"\u0007","clear":"\u001bH\u001bJ","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u001bD","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","acsc":"ffgghhompoqqss.k","smacs":"\u001bF","rmacs":"\u001bG"} +{"name":"gator-t","cols":128,"lines":94,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m","smul":"\u001b[4m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kcud1":"\n","kcub1":"\u0008"} +{"name":"gigi","aliases":["vk100"],"cols":84,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J","sgr0":"\u001b[m","smul":"\u001b[4m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","khome":"\u001b[H","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"gnome","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001bO1;2P","kf14":"\u001bO1;2Q","kf15":"\u001bO1;2R","kf16":"\u001bO1;2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001bO1;5P","kf26":"\u001bO1;5Q","kf27":"\u001bO1;5R","kf28":"\u001bO1;5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001bO1;6P","kf38":"\u001bO1;6Q","kf39":"\u001bO1;6R","kf40":"\u001bO1;6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kf49":"\u001bO1;3P","kf50":"\u001bO1;3Q","kf51":"\u001bO1;3R","kf52":"\u001bO1;3S","kf53":"\u001b[15;3~","kf54":"\u001b[17;3~","kf55":"\u001b[18;3~","kf56":"\u001b[19;3~","kf57":"\u001b[20;3~","kf58":"\u001b[21;3~","kf59":"\u001b[23;3~","kf60":"\u001b[24;3~","kf61":"\u001bO1;4P","kf62":"\u001bO1;4Q","kf63":"\u001bO1;4R","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0","kRIT":"\u001b[1;2C","kLFT":"\u001b[1;2D","kHOM":"\u001b[1;2H","kEND":"\u001b[1;2F","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kscu1":"\u001b[1;2A","_kscud1":"\u001b[1;2B","_kccu1":"\u001b[1;5A","_kccud1":"\u001b[1;5B","_kccuf1":"\u001b[1;5C","_kccub1":"\u001b[1;5D","_kmcu1":"\u001b[1;9A","_kmcud1":"\u001b[1;9B","_kmcuf1":"\u001b[1;9C","_kmcub1":"\u001b[1;9D","_kacu1":"\u001b[1;3A","_kacud1":"\u001b[1;3B","_kacuf1":"\u001b[1;3C","_kacub1":"\u001b[1;3D","_kchome":"\u001b[1;5H","_kcend":"\u001b[1;5F","_kahome":"\u001b[1;9H","_kaend":"\u001b[1;9F","_kascu1":"\u001b[1;4A","_kascud1":"\u001b[1;4B","_kascub1":"\u001b[1;4D","_kascuf1":"\u001b[1;4C","_kmscu1":"\u001b[1;10A","_kmscud1":"\u001b[1;10B","_kmscub1":"\u001b[1;10D","_kmscuf1":"\u001b[1;10C","_kcscu1":"\u001b[1;6A","_kcscud1":"\u001b[1;6B","_kcscub1":"\u001b[1;6D","_kcscuf1":"\u001b[1;6C","_kcHOME":"\u001b[1;6H","_kcEND":"\u001b[1;6F","_kaHOME":"\u001b[1;4H","_kaEND":"\u001b[1;4F","_kmHOME":"\u001b[1;10H","_kmEND":"\u001b[1;10F"} +{"name":"gnome-2007","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001bO2P","kf14":"\u001bO2Q","kf15":"\u001bO2R","kf16":"\u001bO2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001bO5P","kf26":"\u001bO5Q","kf27":"\u001bO5R","kf28":"\u001bO5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001bO6P","kf38":"\u001bO6Q","kf39":"\u001bO6R","kf40":"\u001bO6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kf49":"\u001bO3P","kf50":"\u001bO3Q","kf51":"\u001bO3R","kf52":"\u001bO3S","kf53":"\u001b[15;3~","kf54":"\u001b[17;3~","kf55":"\u001b[18;3~","kf56":"\u001b[19;3~","kf57":"\u001b[20;3~","kf58":"\u001b[21;3~","kf59":"\u001b[23;3~","kf60":"\u001b[24;3~","kf61":"\u001bO4P","kf62":"\u001bO4Q","kf63":"\u001bO4R","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0","kRIT":"\u001b[1;2C","kLFT":"\u001b[1;2D","kHOM":"\u001b[1;2H","kEND":"\u001b[1;2F","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kscu1":"\u001b[1;2A","_kscud1":"\u001b[1;2B","_kccu1":"\u001b[1;5A","_kccud1":"\u001b[1;5B","_kccuf1":"\u001b[1;5C","_kccub1":"\u001b[1;5D","_kmcu1":"\u001b[1;9A","_kmcud1":"\u001b[1;9B","_kmcuf1":"\u001b[1;9C","_kmcub1":"\u001b[1;9D","_kacu1":"\u001b[1;3A","_kacud1":"\u001b[1;3B","_kacuf1":"\u001b[1;3C","_kacub1":"\u001b[1;3D","_kchome":"\u001b[1;5H","_kcend":"\u001b[1;5F","_kahome":"\u001b[1;9H","_kaend":"\u001b[1;9F","_kascu1":"\u001b[1;4A","_kascud1":"\u001b[1;4B","_kascub1":"\u001b[1;4D","_kascuf1":"\u001b[1;4C","_kmscu1":"\u001b[1;10A","_kmscud1":"\u001b[1;10B","_kmscub1":"\u001b[1;10D","_kmscuf1":"\u001b[1;10C","_kcscu1":"\u001b[1;6A","_kcscud1":"\u001b[1;6B","_kcscub1":"\u001b[1;6D","_kcscuf1":"\u001b[1;6C","_kcHOME":"\u001b[1;6H","_kcEND":"\u001b[1;6F","_kaHOME":"\u001b[1;4H","_kaEND":"\u001b[1;4F","_kmHOME":"\u001b[1;10H","_kmEND":"\u001b[1;10F"} +{"name":"gnome-2008","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001bO1;2P","kf14":"\u001bO1;2Q","kf15":"\u001bO1;2R","kf16":"\u001bO1;2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001bO1;5P","kf26":"\u001bO1;5Q","kf27":"\u001bO1;5R","kf28":"\u001bO1;5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001bO1;6P","kf38":"\u001bO1;6Q","kf39":"\u001bO1;6R","kf40":"\u001bO1;6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kf49":"\u001bO1;3P","kf50":"\u001bO1;3Q","kf51":"\u001bO1;3R","kf52":"\u001bO1;3S","kf53":"\u001b[15;3~","kf54":"\u001b[17;3~","kf55":"\u001b[18;3~","kf56":"\u001b[19;3~","kf57":"\u001b[20;3~","kf58":"\u001b[21;3~","kf59":"\u001b[23;3~","kf60":"\u001b[24;3~","kf61":"\u001bO1;4P","kf62":"\u001bO1;4Q","kf63":"\u001bO1;4R","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0","kRIT":"\u001b[1;2C","kLFT":"\u001b[1;2D","kHOM":"\u001b[1;2H","kEND":"\u001b[1;2F","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kscu1":"\u001b[1;2A","_kscud1":"\u001b[1;2B","_kccu1":"\u001b[1;5A","_kccud1":"\u001b[1;5B","_kccuf1":"\u001b[1;5C","_kccub1":"\u001b[1;5D","_kmcu1":"\u001b[1;9A","_kmcud1":"\u001b[1;9B","_kmcuf1":"\u001b[1;9C","_kmcub1":"\u001b[1;9D","_kacu1":"\u001b[1;3A","_kacud1":"\u001b[1;3B","_kacuf1":"\u001b[1;3C","_kacub1":"\u001b[1;3D","_kchome":"\u001b[1;5H","_kcend":"\u001b[1;5F","_kahome":"\u001b[1;9H","_kaend":"\u001b[1;9F","_kascu1":"\u001b[1;4A","_kascud1":"\u001b[1;4B","_kascub1":"\u001b[1;4D","_kascuf1":"\u001b[1;4C","_kmscu1":"\u001b[1;10A","_kmscud1":"\u001b[1;10B","_kmscub1":"\u001b[1;10D","_kmscuf1":"\u001b[1;10C","_kcscu1":"\u001b[1;6A","_kcscud1":"\u001b[1;6B","_kcscub1":"\u001b[1;6D","_kcscuf1":"\u001b[1;6C","_kcHOME":"\u001b[1;6H","_kcEND":"\u001b[1;6F","_kaHOME":"\u001b[1;4H","_kaEND":"\u001b[1;4F","_kmHOME":"\u001b[1;10H","_kmEND":"\u001b[1;10F"} +{"name":"gnome-256color","cols":80,"lines":24,"colors":256,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[%?%p1%{8}%\u003c%t3%p1%d%e%p1%{16}%\u003c%t9%p1%{8}%-%d%e38;5;%p1%d%;m","setbg":"\u001b[%?%p1%{8}%\u003c%t4%p1%d%e%p1%{16}%\u003c%t10%p1%{8}%-%d%e48;5;%p1%d%;m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001bO1;2P","kf14":"\u001bO1;2Q","kf15":"\u001bO1;2R","kf16":"\u001bO1;2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001bO1;5P","kf26":"\u001bO1;5Q","kf27":"\u001bO1;5R","kf28":"\u001bO1;5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001bO1;6P","kf38":"\u001bO1;6Q","kf39":"\u001bO1;6R","kf40":"\u001bO1;6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kf49":"\u001bO1;3P","kf50":"\u001bO1;3Q","kf51":"\u001bO1;3R","kf52":"\u001bO1;3S","kf53":"\u001b[15;3~","kf54":"\u001b[17;3~","kf55":"\u001b[18;3~","kf56":"\u001b[19;3~","kf57":"\u001b[20;3~","kf58":"\u001b[21;3~","kf59":"\u001b[23;3~","kf60":"\u001b[24;3~","kf61":"\u001bO1;4P","kf62":"\u001bO1;4Q","kf63":"\u001bO1;4R","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0","kRIT":"\u001b[1;2C","kLFT":"\u001b[1;2D","kHOM":"\u001b[1;2H","kEND":"\u001b[1;2F","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t3%p1%d%e%p1%{16}%\u003c%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%\u003c%t4%p2%d%e%p2%{16}%\u003c%t10%p2%{8}%-%d%e48;5;%p2%d%;m","_kscu1":"\u001b[1;2A","_kscud1":"\u001b[1;2B","_kccu1":"\u001b[1;5A","_kccud1":"\u001b[1;5B","_kccuf1":"\u001b[1;5C","_kccub1":"\u001b[1;5D","_kmcu1":"\u001b[1;9A","_kmcud1":"\u001b[1;9B","_kmcuf1":"\u001b[1;9C","_kmcub1":"\u001b[1;9D","_kacu1":"\u001b[1;3A","_kacud1":"\u001b[1;3B","_kacuf1":"\u001b[1;3C","_kacub1":"\u001b[1;3D","_kchome":"\u001b[1;5H","_kcend":"\u001b[1;5F","_kahome":"\u001b[1;9H","_kaend":"\u001b[1;9F","_kascu1":"\u001b[1;4A","_kascud1":"\u001b[1;4B","_kascub1":"\u001b[1;4D","_kascuf1":"\u001b[1;4C","_kmscu1":"\u001b[1;10A","_kmscud1":"\u001b[1;10B","_kmscub1":"\u001b[1;10D","_kmscuf1":"\u001b[1;10C","_kcscu1":"\u001b[1;6A","_kcscud1":"\u001b[1;6B","_kcscub1":"\u001b[1;6D","_kcscuf1":"\u001b[1;6C","_kcHOME":"\u001b[1;6H","_kcEND":"\u001b[1;6F","_kaHOME":"\u001b[1;4H","_kaEND":"\u001b[1;4F","_kmHOME":"\u001b[1;10H","_kmEND":"\u001b[1;10F"} +{"name":"gnome-fc5","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001bO2P","kf14":"\u001bO2Q","kf15":"\u001bO2R","kf16":"\u001bO2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001bO5P","kf26":"\u001bO5Q","kf27":"\u001bO5R","kf28":"\u001bO5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001bO6P","kf38":"\u001bO6Q","kf39":"\u001bO6R","kf40":"\u001bO6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kf49":"\u001bO3P","kf50":"\u001bO3Q","kf51":"\u001bO3R","kf52":"\u001bO3S","kf53":"\u001b[15;3~","kf54":"\u001b[17;3~","kf55":"\u001b[18;3~","kf56":"\u001b[19;3~","kf57":"\u001b[20;3~","kf58":"\u001b[21;3~","kf59":"\u001b[23;3~","kf60":"\u001b[24;3~","kf61":"\u001bO4P","kf62":"\u001bO4Q","kf63":"\u001bO4R","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0","kRIT":"\u001bO2C","kLFT":"\u001bO2D","kHOM":"\u001b[1;2H","kEND":"\u001b[1;2F","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kchome":"\u001b[1;5H","_kcend":"\u001b[1;5F","_kahome":"\u001b[1;9H","_kaend":"\u001b[1;9F","_kcHOME":"\u001b[1;6H","_kcEND":"\u001b[1;6F","_kaHOME":"\u001b[1;4H","_kaEND":"\u001b[1;4F","_kmHOME":"\u001b[1;10H","_kmEND":"\u001b[1;10F"} +{"name":"gnome-rh62","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"gnome-rh72","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"gnome-rh80","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b\t","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"gnome-rh90","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001bO2P","kf14":"\u001bO2Q","kf15":"\u001bO2R","kf16":"\u001bO2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001bO5P","kf26":"\u001bO5Q","kf27":"\u001bO5R","kf28":"\u001bO5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001bO6P","kf38":"\u001bO6Q","kf39":"\u001bO6R","kf40":"\u001bO6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kf49":"\u001bO3P","kf50":"\u001bO3Q","kf51":"\u001bO3R","kf52":"\u001bO3S","kf53":"\u001b[15;3~","kf54":"\u001b[17;3~","kf55":"\u001b[18;3~","kf56":"\u001b[19;3~","kf57":"\u001b[20;3~","kf58":"\u001b[21;3~","kf59":"\u001b[23;3~","kf60":"\u001b[24;3~","kf61":"\u001bO4P","kf62":"\u001bO4Q","kf63":"\u001bO4R","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0","kRIT":"\u001bO2C","kLFT":"\u001bO2D","kHOM":"\u001b[1;2H","kEND":"\u001b[1;2F","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kchome":"\u001b[1;5H","_kcend":"\u001b[1;5F","_kahome":"\u001b[1;9H","_kaend":"\u001b[1;9F","_kcHOME":"\u001b[1;6H","_kcEND":"\u001b[1;6F","_kaHOME":"\u001b[1;4H","_kaEND":"\u001b[1;4F","_kmHOME":"\u001b[1;10H","_kmEND":"\u001b[1;10F"} +{"name":"go140","cols":80,"lines":24,"clear":"\u001b[H\u001b[2J$\u003c10/\u003e","sgr0":"\u001b[m","smul":"\u001b[4m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%2d;%p2%2dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","khome":"\u001b[H","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"go140w","cols":132,"lines":24,"clear":"\u001b[H\u001b[2J$\u003c10/\u003e","sgr0":"\u001b[m","smul":"\u001b[4m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%2d;%p2%2dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","khome":"\u001b[H","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"go225","aliases":["go-225"],"cols":80,"lines":25,"clear":"\u001b[H\u001b[J","smcup":"\u001b[2;0#w\u001b[1;25r","rmcup":"\u001b[!p\u001b[?7h\u001b[2;1;1#w","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"graphos","cols":80,"lines":24,"clear":"\u001b[H\u001b[2J","cnorm":"\u001bz56;2;0;0z\u001bz73z\u001bz4;1;1z","sgr0":"\u001b[m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"graphos-30","cols":80,"lines":30,"clear":"\u001b[H\u001b[2J","cnorm":"\u001bz56;2;0;0z\u001bz73z\u001bz4;1;1z","sgr0":"\u001b[m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"gs6300","aliases":["emots"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u001b[10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[0s","kf2":"\u001b[24s","kf3":"\u001b[1s","kf4":"\u001b[23s","kf5":"\u001b[2s","kf6":"\u001b[22s","kf7":"\u001b[3s","kf8":"\u001b[21s","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u0012\t","acsc":"++,,--..``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b[11m","rmacs":"\u001b[10m"} +{"name":"guru","aliases":["guru+unk","guru-33"],"cols":80,"lines":33,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[33p","rmcup":"\u001b[255p\u001b[255;1H\u001b[K","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"guru-24","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[24p","rmcup":"\u001b[255p\u001b[255;1H\u001b[K","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"guru-44","cols":97,"lines":44,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[44p","rmcup":"\u001b[255p\u001b[255;1H\u001b[K","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"guru-44-s","cols":80,"lines":43,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[44;1p\u001b[255;1H\u001b[K","rmcup":"\u001b[255;1p\u001b[255;1H\u001b[K","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"guru-76","cols":89,"lines":76,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[76p","rmcup":"\u001b[255p\u001b[255;1H\u001b[K","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"guru-76-lp","aliases":["guru-lp"],"cols":134,"lines":76,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[76p","rmcup":"\u001b[255p\u001b[255;1H\u001b[K","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"guru-76-s","cols":89,"lines":75,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[76;1p\u001b[255;1H\u001b[K","rmcup":"\u001b[255;1p\u001b[255;1H\u001b[K","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"guru-76-w","cols":178,"lines":76,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[76p","rmcup":"\u001b[255p\u001b[255;1H\u001b[K","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"guru-76-w-s","cols":178,"lines":75,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[76;1p\u001b[255;1H\u001b[K","rmcup":"\u001b[255;1p\u001b[255;1H\u001b[K","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"guru-76-wm","cols":178,"lines":76,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[76p","rmcup":"\u001b[255p\u001b[255;1H\u001b[K","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"guru-nctxt","cols":80,"lines":33,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[H\u001b[J$\u003c156\u003e\u001b[33p\u001b[255;1H\u001b[K","rmcup":"\u001b[255p\u001b[255;1H\u001b[K","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"guru-rv","aliases":["guru-33-rv"],"cols":80,"lines":33,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[33p","rmcup":"\u001b[255p\u001b[255;1H\u001b[K","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"guru-s","aliases":["guru-33-s"],"cols":80,"lines":32,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c156\u003e","smcup":"\u001b[33;1p\u001b[255;1H\u001b[K","rmcup":"\u001b[255;1p\u001b[255;1H\u001b[K","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001bP`\u003ez~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\u001b\\","rmkx":"\u001bP`\u003ey~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\u001b\\","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOA","kf2":"\u001bOB","kf3":"\u001bOC","kf4":"\u001bOD","kf5":"\u001bOE","kf6":"\u001bOF","kf7":"\u001bOG","kf8":"\u001bOH","kf9":"\u001bOI","kf10":"\u001bOJ","kf11":"\u001bOK","kf12":"\u001bOL","kf13":"\u001bOM","kf14":"\u001bON","kf15":"\u001bOO","kf16":"\u001bOP","kf17":"\u001bOQ","kf18":"\u001bOR","kf19":"\u001bOS","kf20":"\u001bOT","kf21":"\u001bOU","kf22":"\u001bOV","kf23":"\u001bOW","kf24":"\u001bOX","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[J"} +{"name":"h19","aliases":["h19-b","heath","heath-19","heathkit","z19","zenith"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bE","cnorm":"\u001by4","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bS","kf2":"\u001bT","kf3":"\u001bU","kf4":"\u001bV","kf5":"\u001bW","kf6":"\u001bP","kf7":"\u001bQ","kf8":"\u001bR","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","acsc":"~^x`qanbkcjdmelfgg+hai.kwsutvutvozs{","smacs":"\u001bF","rmacs":"\u001bG"} +{"name":"h19-a","aliases":["h19a","heath-ansi","heathkit-a"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J","cnorm":"\u001b[\u003e4l","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[1A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOS","kf2":"\u001bOT","kf3":"\u001bOU","kf4":"\u001bOV","kf5":"\u001bOW","kf6":"\u001bOP","kf7":"\u001bOQ","kf8":"\u001bOR","khome":"\u001b[H","kcuu1":"\u001b[1A","kcud1":"\u001b[1B","kcub1":"\u001b[1D","kcuf1":"\u001b[1C","smacs":"\u001b[10m","rmacs":"\u001b[11m"} +{"name":"h19-bs","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bE","cnorm":"\u001by4","smkx":"\u001bt","rmkx":"\u001bu","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bS","kf2":"\u001bT","kf3":"\u001bU","kf4":"\u001bV","kf5":"\u001bW","kf6":"\u001bP","kf7":"\u001bQ","kf8":"\u001bR","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","acsc":"~^x`qanbkcjdmelfgg+hai.kwsutvutvozs{","smacs":"\u001bF","rmacs":"\u001bG"} +{"name":"h19-g","aliases":["h19g"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bE","cnorm":"\u001bx4","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bS","kf2":"\u001bT","kf3":"\u001bU","kf4":"\u001bV","kf5":"\u001bW","kf6":"\u001bP","kf7":"\u001bQ","kf8":"\u001bR","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","acsc":"~^x`qanbkcjdmelfgg+hai.kwsutvutvozs{","smacs":"\u001bF","rmacs":"\u001bG"} +{"name":"h19-u","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bE","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bS","kf2":"\u001bT","kf3":"\u001bU","kf4":"\u001bV","kf5":"\u001bW","kf6":"\u001bP","kf7":"\u001bQ","kf8":"\u001bR","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","acsc":"~^x`qanbkcjdmelfgg+hai.kwsutvutvozs{","smacs":"\u001bF","rmacs":"\u001bG"} +{"name":"h19-us","aliases":["h19-smul","h19us"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bE","smkx":"\u001bt","rmkx":"\u001bu","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bS","kf2":"\u001bT","kf3":"\u001bU","kf4":"\u001bV","kf5":"\u001bW","kf6":"\u001bP","kf7":"\u001bQ","kf8":"\u001bR","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","acsc":"~^x`qanbkcjdmelfgg+hai.kwsutvutvozs{","smacs":"\u001bF","rmacs":"\u001bG"} +{"name":"h19k","aliases":["h19kermit"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bE","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bS","kf2":"\u001bT","kf3":"\u001bU","kf4":"\u001bV","kf5":"\u001bW","kf6":"\u001bP","kf7":"\u001bQ","kf8":"\u001bR","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","acsc":"~^x`qanbkcjdmelfgg+hai.kwsutvutvozs{","smacs":"\u001bF","rmacs":"\u001bG"} +{"name":"ha8675","cols":80,"lines":24,"clear":"\u001bE","sgr0":"\u001bd@","smul":"\u001bd`","cup":"\u001bF%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u0006","kf2":"\u0010","kf3":"\u000e","kf4":"\u0016","kf5":"\n","kf6":"\u0014","kf7":"\u0008","kf8":"","kf9":"\u001be","kf10":"\u001bd","kf11":"\u0017","kf12":"\u001bR","kf13":"\u001bE","kf14":"\u001bI","kf15":"\u001bi","kf16":"\u001bg","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001b\u003e","kclr":"\u001bE"} +{"name":"ha8686","cols":80,"lines":24,"clear":"\u001bE","sgr0":"\u001bd@","smul":"\u001bd`","cup":"\u001bF%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u0002\u001bp\u0003","kf2":"\u0002\u001bq\u0003","kf3":"\u0002\u001br\u0003","kf4":"\u0002\u001bs\u0003","kf5":"\u001b3","kf6":"\u001bI","kf7":"\u001bR","kf8":"\u001bJ","kf9":"\u001b(","kf10":"\u001bj","kf11":"\u001bW","kf12":"\u0002\u001b{\u0003","kf13":"\u0002\u001b|\u0003","kf14":"\u0002\u001b}\u0003","kf15":"\u0002\u001b~\u0003","kf16":"\u0002\u001b\u0003","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001b\u003e","kclr":"\u001bE"} +{"name":"hazel","aliases":["exec80","h80","he80"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[;H\u001b[2J$\u003c50/\u003e","sgr0":"\u001b[m$\u003c2/\u003e","smul":"\u001b[4m$\u003c2/\u003e","bold":"\u001b[1m$\u003c2/\u003e","blink":"\u001b[5m$\u003c2/\u003e","rev":"\u001b[7m$\u003c2/\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5/\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2/\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"hds200","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[+{","civis":"\u001b[6+{","sgr0":"\u001b[m\u000f","smul":"\u001b[0;4m","bold":"\u001b[0;1m","blink":"\u001b[0;5m","rev":"\u001b[0;7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001c001\r","kf2":"\u001c002\r","kf3":"\u001c003\r","kf4":"\u001c004\r","kf5":"\u001c005\r","kf6":"\u001c006\r","kf7":"\u001c007\r","kf8":"\u001c008\r","kf9":"\u001c009\r","kf10":"\u001c010\r","kf11":"\u001c011\r","kf12":"\u001c012\r","kf13":"\u001bOP","kf14":"\u001bOQ","kf15":"\u001bOR","kf16":"\u001bOS","kf17":"\u001c017\r","kf18":"\u001c018\r","kf19":"\u001c019\r","kf20":"\u001c020\r","kf21":"\u001c021\r","kf22":"\u001c022\r","kf23":"\u001c023\r","kf31":"\u001c031\r","kf32":"\u001c032\r","kf33":"\u001c033\r","kf34":"\u001c034\r","kf35":"\u001c035\r","kf36":"\u001c036\r","kf37":"\u001c037\r","kf38":"\u001c038\r","kf39":"\u001c039\r","kf40":"\u001c040\r","kf41":"\u001c041\r","kf42":"\u001c042\r","kf43":"\u001b$P","kf44":"\u001b$Q","kf45":"\u001b$R","kf46":"\u001b$S","kf47":"\u001c047\r","kf48":"\u001c048\r","kf49":"\u001c049\r","kf50":"\u001c050\r","kf51":"\u001c051\r","kf52":"\u001c052\r","kf53":"\u001c053\r","kdch":"","khome":"\u001b[H","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b$I","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e","rmacs":"\u000f","kRIT":"\u001b$C","kLFT":"\u001b$D","kHOM":"\u001b$H"} +{"name":"hft-c","cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[001q","kf2":"\u001b[002q","kf3":"\u001b[003q","kf4":"\u001b[004q","kf5":"\u001b[005q","kf6":"\u001b[006q","kf7":"\u001b[007q","kf8":"\u001b[008q","kf9":"\u001b[009q","kf10":"\u001b[010q","kf11":"\u001b[011q","kf12":"\u001b[012q","kf13":"\u001b[013q","kf14":"\u001b[014q","kf15":"\u001b[015q","kf16":"\u001b[016q","kf17":"\u001b[017q","kf18":"\u001b[018q","kf19":"\u001b[019q","kf20":"\u001b[020q","kf21":"\u001b[021q","kf22":"\u001b[022q","kf23":"\u001b[023q","kf24":"\u001b[024q","kf25":"\u001b[025q","kf26":"\u001b[026q","kf27":"\u001b[027q","kf28":"\u001b[028q","kf29":"\u001b[029q","kf30":"\u001b[030q","kf31":"\u001b[031q","kf32":"\u001b[032q","kf33":"\u001b[033q","kf34":"\u001b[034q","kf35":"\u001b[035q","kf36":"\u001b[036q","kich":"\u001b[139q","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[146q","kpp":"\u001b[150q","knp":"\u001b[154q","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[144q","acsc":"jjkkllmmnnqqttuuvvwwxx","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"hft-c-old","cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[001q","kf2":"\u001b[002q","kf3":"\u001b[003q","kf4":"\u001b[004q","kf5":"\u001b[005q","kf6":"\u001b[006q","kf7":"\u001b[007q","kf8":"\u001b[008q","kf9":"\u001b[009q","kf10":"\u001b[010q","kf11":"\u001b[011q","kf12":"\u001b[012q","kf13":"\u001b[013q","kf14":"\u001b[014q","kf15":"\u001b[015q","kf16":"\u001b[016q","kf17":"\u001b[017q","kf18":"\u001b[018q","kf19":"\u001b[019q","kf20":"\u001b[020q","kf21":"\u001b[021q","kf22":"\u001b[022q","kf23":"\u001b[023q","kf24":"\u001b[024q","kf25":"\u001b[025q","kf26":"\u001b[026q","kf27":"\u001b[027q","kf28":"\u001b[028q","kf29":"\u001b[029q","kf30":"\u001b[030q","kf31":"\u001b[031q","kf32":"\u001b[032q","kf33":"\u001b[033q","kf34":"\u001b[034q","kf35":"\u001b[035q","kf36":"\u001b[036q","kich":"\u001b[139q","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[146q","kpp":"\u001b[150q","knp":"\u001b[154q","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[144q","acsc":"j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"hft-old","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[001q","kf2":"\u001b[002q","kf3":"\u001b[003q","kf4":"\u001b[004q","kf5":"\u001b[005q","kf6":"\u001b[006q","kf7":"\u001b[007q","kf8":"\u001b[008q","kf9":"\u001b[009q","khome":"\u001b[H","kpp":"\u001b[159q","knp":"\u001b[153q","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"hirez100","cols":80,"lines":48,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOQ","kf2":"\u001bOR","kf3":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","smacs":"\u000e","rmacs":"\u000f"} +{"name":"hirez100-w","cols":132,"lines":48,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOQ","kf2":"\u001bOR","kf3":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","smacs":"\u000e","rmacs":"\u000f"} +{"name":"hmod1","cols":80,"lines":24,"bell":"\u0007","clear":"~\u001c","sgr0":"~\u0019","cup":"~\u0011%p2%c%p1%c","cub1":"\u0008","cuu1":"~\u000c","pad":"\u0000","khome":"~\u0012","kcuu1":"~\u000c","kcud1":"~\u000b","kcub1":"\u0008","kcuf1":"\u0010"} +{"name":"hp110","cols":80,"lines":16,"bell":"\u0007","clear":"\u001bH\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","cup":"\u001b\u0026a%p2%dc%p1%dY$\u003c6\u003e","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kcbt":"\u001bi"} +{"name":"hp150","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b\u0026a0c0Y\u001bJ$\u003c40\u003e","sgr0":"\u001b\u0026d@\u000f","smul":"\u001b\u0026dD","bold":"\u001b\u0026dF","blink":"\u001b\u0026dA","rev":"\u001b\u0026dB","dim":"\u001b\u0026dH","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p1%dy%p2%dC$\u003c10\u003e","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp\r","kf2":"\u001bq\r","kf3":"\u001br\r","kf4":"\u001bs\r","kf5":"\u001bt\r","kf6":"\u001bu\r","kf7":"\u001bv\r","kf8":"\u001bw\r","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001bi","kclr":"\u001bJ","acsc":"2[3@4\u003e5I9(:'JSKWLQMAO#P$Q;R!S\"T1U2V4W3X:Y+Z*dHjGkTlRmFn/q,t5u6v8w7x.","smacs":"\u000e","rmacs":"\u000f"} +{"name":"hp2","aliases":["hpex2"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b\u0026a0y0C\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p1%dy%p2%dC","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp","kf2":"\u001bq","kf3":"\u001br","kf4":"\u001bs","kf5":"\u001bt","kf6":"\u001bu","kf7":"\u001bv","kf8":"\u001bw","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kclr":"\u001bJ"} +{"name":"hp236","cols":80,"lines":24,"clear":"\u001bF","cnorm":"\u001bDE","sgr0":"\u001bCI","cup":"\u001bE%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000"} +{"name":"hp2382a","aliases":["hp2382"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b\u0026a0c0Y\u001bJ$\u003c40\u003e","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","bold":"\u001b\u0026dF","blink":"\u001b\u0026dA","rev":"\u001b\u0026dB","dim":"\u001b\u0026dH","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p1%dy%p2%dC$\u003c10\u003e","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp","kf2":"\u001bq","kf3":"\u001br","kf4":"\u001bs","kf5":"\u001bt","kf6":"\u001bu","kf7":"\u001bv","kf8":"\u001bw","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001bi","kclr":"\u001bJ"} +{"name":"hp2392","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p1%dy%p2%dC","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp\r","kf2":"\u001bq\r","kf3":"\u001br\r","kf4":"\u001bs\r","kf5":"\u001bt\r","kf6":"\u001bu\r","kf7":"\u001bv\r","kf8":"\u001bw\r","khome":"\u001bh","kpp":"\u001bv","knp":"\u001bu","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"hp2397a","aliases":["hp2397"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ$\u003c40\u003e","sgr0":"\u001b\u0026d@\u000f","smul":"\u001b\u0026dD","bold":"\u001b\u0026dF","blink":"\u001b\u0026dA","rev":"\u001b\u0026dB","dim":"\u001b\u0026dH","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p1%dr%p2%dC","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp","kf2":"\u001bq","kf3":"\u001br","kf4":"\u001bs","kf5":"\u001bt","kf6":"\u001bu","kf7":"\u001bv","kf8":"\u001bw","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001bi","kclr":"\u001bJ","acsc":"2[3@4\u003e5I9(:'JSKWLQMAO#P$Q;R!S\"T1U2V4W3X:Y+Z*dHjGkTlRmFn/q,t5u6v8w7x.","smacs":"\u000e","rmacs":"\u000f"} +{"name":"hp2621","aliases":["2621","2621-wl","2621a","hp2621-wl","hp2621a"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","smkx":"\u001b\u0026jB","rmkx":"\u001b\u0026jA","cup":"\u001b\u0026a%p2%dc%p1%dY","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp\r","kf2":"\u001bq\r","kf3":"\u001br\r","kf4":"\u001bs\r","kf5":"\u001bt\r","kf6":"\u001bu\r","kf7":"\u001bv\r","kf8":"\u001bw\r","kcbt":"\u001bi"} +{"name":"hp2621-48","cols":80,"lines":48,"bell":"\u0007","clear":"\u001bH\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","smkx":"\u001b\u0026jB","rmkx":"\u001b\u0026jA","cup":"\u001b\u0026a%p2%dc%p1%dR","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp\r","kf2":"\u001bq\r","kf3":"\u001br\r","kf4":"\u001bs\r","kf5":"\u001bt\r","kf6":"\u001bu\r","kf7":"\u001bv\r","kf8":"\u001bw\r","kcbt":"\u001bi"} +{"name":"hp2621-a","aliases":["hp2621a-a"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","smkx":"\u001b\u0026jB","rmkx":"\u001b\u0026j@","cup":"\u001b\u0026a%p2%dc%p1%dY","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","khome":"\u001bp\r","kcuu1":"\u001bt\r","kcud1":"\u001bw\r","kcub1":"\u001bu\r","kcuf1":"\u001bv\r","kcbt":"\u001bi"} +{"name":"hp2621-ba","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","cup":"\u001b\u0026a%p2%dc%p1%dY","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp\r","kf2":"\u001bq\r","kf3":"\u001br\r","kf4":"\u001bs\r","kf5":"\u001bt\r","kf6":"\u001bu\r","kf7":"\u001bv\r","kf8":"\u001bw\r","khome":"\u001bh","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001bi"} +{"name":"hp2621-fl","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","smkx":"\u001b\u0026jB","rmkx":"\u001b\u0026j@","cup":"\u001b\u0026a%p2%dc%p1%dY","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp\r","kf2":"\u001bq\r","kf3":"\u001br\r","kf4":"\u001bs\r","kf5":"\u001bt\r","kf6":"\u001bu\r","kf7":"\u001bv\r","kf8":"\u001bw\r","kcbt":"\u001bi"} +{"name":"hp2621-k45","aliases":["hp2621k45","k45"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p2%dc%p1%dY","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp\r","kf2":"\u001bq\r","kf3":"\u001br\r","kf4":"\u001bs\r","kf5":"\u001bt\r","kf6":"\u001bu\r","kf7":"\u001bv\r","kf8":"\u001bw\r","khome":"\u001bh","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001bi"} +{"name":"hp2621-nl","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","cup":"\u001b\u0026a%p2%dc%p1%dY","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp\r","kf2":"\u001bq\r","kf3":"\u001br\r","kf4":"\u001bs\r","kf5":"\u001bt\r","kf6":"\u001bu\r","kf7":"\u001bv\r","kf8":"\u001bw\r","kcbt":"\u001bi"} +{"name":"hp2621-nt","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","smkx":"\u001b\u0026jB","rmkx":"\u001b\u0026jA","cup":"\u001b\u0026a%p2%dc%p1%dY","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp\r","kf2":"\u001bq\r","kf3":"\u001br\r","kf4":"\u001bs\r","kf5":"\u001bt\r","kf6":"\u001bu\r","kf7":"\u001bv\r","kf8":"\u001bw\r","kcbt":"\u001bi"} +{"name":"hp2621b","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","smkx":"\u001b\u0026jB","rmkx":"\u001b\u0026jA","cup":"\u001b\u0026a%p2%dc%p1%dY","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp\r","kf2":"\u001bq\r","kf3":"\u001br\r","kf4":"\u001bs\r","kf5":"\u001bt\r","kf6":"\u001bu\r","kf7":"\u001bv\r","kf8":"\u001bw\r","khome":"\u001bh","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001bi"} +{"name":"hp2621b-kx","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p2%dc%p1%dY","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp","kf2":"\u001bq","kf3":"\u001br","kf4":"\u001bs","kf5":"\u001bt","kf6":"\u001bu","kf7":"\u001bv","kf8":"\u001bw","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001bi","kclr":"\u001bJ"} +{"name":"hp2621b-kx-p","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p2%dc%p1%dY","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp","kf2":"\u001bq","kf3":"\u001br","kf4":"\u001bs","kf5":"\u001bt","kf6":"\u001bu","kf7":"\u001bv","kf8":"\u001bw","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001bi","kclr":"\u001bJ"} +{"name":"hp2621b-p","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","smkx":"\u001b\u0026jB","rmkx":"\u001b\u0026jA","cup":"\u001b\u0026a%p2%dc%p1%dY","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp\r","kf2":"\u001bq\r","kf3":"\u001br\r","kf4":"\u001bs\r","kf5":"\u001bt\r","kf6":"\u001bu\r","kf7":"\u001bv\r","kf8":"\u001bw\r","khome":"\u001bh","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001bi"} +{"name":"hp2621p","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","smkx":"\u001b\u0026jB","rmkx":"\u001b\u0026jA","cup":"\u001b\u0026a%p2%dc%p1%dY","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp\r","kf2":"\u001bq\r","kf3":"\u001br\r","kf4":"\u001bs\r","kf5":"\u001bt\r","kf6":"\u001bu\r","kf7":"\u001bv\r","kf8":"\u001bw\r","kcbt":"\u001bi"} +{"name":"hp2621p-a","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","smkx":"\u001b\u0026jB","rmkx":"\u001b\u0026jA","cup":"\u001b\u0026a%p2%dc%p1%dY","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","khome":"\u001bp\r","kcuu1":"\u001bt\r","kcud1":"\u001bw\r","kcub1":"\u001bu\r","kcuf1":"\u001bv\r","kcbt":"\u001bi"} +{"name":"hp2622","aliases":["hp2622a"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b\u0026a0c0Y\u001bJ$\u003c40\u003e","sgr0":"\u001b\u0026d@\u000f","smul":"\u001b\u0026dD","bold":"\u001b\u0026dF","blink":"\u001b\u0026dA","rev":"\u001b\u0026dB","dim":"\u001b\u0026dH","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p1%dy%p2%dC$\u003c10\u003e","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp\r","kf2":"\u001bq\r","kf3":"\u001br\r","kf4":"\u001bs\r","kf5":"\u001bt\r","kf6":"\u001bu\r","kf7":"\u001bv\r","kf8":"\u001bw\r","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001bi","kclr":"\u001bJ","acsc":"2[3@4\u003e5I9(:'JSKWLQMAO#P$Q;R!S\"T1U2V4W3X:Y+Z*dHjGkTlRmFn/q,t5u6v8w7x.","smacs":"\u000e","rmacs":"\u000f"} +{"name":"hp2623","aliases":["hp2623a"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b\u0026a0c0Y\u001bJ$\u003c40\u003e","sgr0":"\u001b\u0026d@\u000f","smul":"\u001b\u0026dD","bold":"\u001b\u0026dF","blink":"\u001b\u0026dA","rev":"\u001b\u0026dB","dim":"\u001b\u0026dH","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p1%dy%p2%dC$\u003c10\u003e","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp\r","kf2":"\u001bq\r","kf3":"\u001br\r","kf4":"\u001bs\r","kf5":"\u001bt\r","kf6":"\u001bu\r","kf7":"\u001bv\r","kf8":"\u001bw\r","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001bi","kclr":"\u001bJ","acsc":"2[3@4\u003e5I9(:'JSKWLQMAO#P$Q;R!S\"T1U2V4W3X:Y+Z*dHjGkTlRmFn/q,t5u6v8w7x.","smacs":"\u000e","rmacs":"\u000f"} +{"name":"hp2624","aliases":["hp2624a","hp2624b","hp2624b-4p"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b\u0026a0c0Y\u001bJ$\u003c40\u003e","sgr0":"\u001b\u0026d@\u000f","smul":"\u001b\u0026dD","bold":"\u001b\u0026dF","blink":"\u001b\u0026dA","rev":"\u001b\u0026dB","dim":"\u001b\u0026dH","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p1%dy%p2%dC$\u003c10\u003e","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp","kf2":"\u001bq","kf3":"\u001br","kf4":"\u001bs","kf5":"\u001bt","kf6":"\u001bu","kf7":"\u001bv","kf8":"\u001bw","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001bi","kclr":"\u001bJ","acsc":"2[3@4\u003e5I9(:'JSKWLQMAO#P$Q;R!S\"T1U2V4W3X:Y+Z*dHjGkTlRmFn/q,t5u6v8w7x.","smacs":"\u000e","rmacs":"\u000f"} +{"name":"hp2624-10p","aliases":["hp2624a-10p","hp2624b-10p"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b\u0026a0c0Y\u001bJ$\u003c40\u003e","sgr0":"\u001b\u0026d@\u000f","smul":"\u001b\u0026dD","bold":"\u001b\u0026dF","blink":"\u001b\u0026dA","rev":"\u001b\u0026dB","dim":"\u001b\u0026dH","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p1%dy%p2%dC$\u003c10\u003e","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp","kf2":"\u001bq","kf3":"\u001br","kf4":"\u001bs","kf5":"\u001bt","kf6":"\u001bu","kf7":"\u001bv","kf8":"\u001bw","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001bi","kclr":"\u001bJ","acsc":"2[3@4\u003e5I9(:'JSKWLQMAO#P$Q;R!S\"T1U2V4W3X:Y+Z*dHjGkTlRmFn/q,t5u6v8w7x.","smacs":"\u000e","rmacs":"\u000f"} +{"name":"hp2624b-10p-p","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b\u0026a0c0Y\u001bJ$\u003c40\u003e","sgr0":"\u001b\u0026d@\u000f","smul":"\u001b\u0026dD","bold":"\u001b\u0026dF","blink":"\u001b\u0026dA","rev":"\u001b\u0026dB","dim":"\u001b\u0026dH","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p1%dy%p2%dC$\u003c10\u003e","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp","kf2":"\u001bq","kf3":"\u001br","kf4":"\u001bs","kf5":"\u001bt","kf6":"\u001bu","kf7":"\u001bv","kf8":"\u001bw","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001bi","kclr":"\u001bJ","acsc":"2[3@4\u003e5I9(:'JSKWLQMAO#P$Q;R!S\"T1U2V4W3X:Y+Z*dHjGkTlRmFn/q,t5u6v8w7x.","smacs":"\u000e","rmacs":"\u000f"} +{"name":"hp2624b-p","aliases":["hp2624b-4p-p"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b\u0026a0c0Y\u001bJ$\u003c40\u003e","sgr0":"\u001b\u0026d@\u000f","smul":"\u001b\u0026dD","bold":"\u001b\u0026dF","blink":"\u001b\u0026dA","rev":"\u001b\u0026dB","dim":"\u001b\u0026dH","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p1%dy%p2%dC$\u003c10\u003e","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp","kf2":"\u001bq","kf3":"\u001br","kf4":"\u001bs","kf5":"\u001bt","kf6":"\u001bu","kf7":"\u001bv","kf8":"\u001bw","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001bi","kclr":"\u001bJ","acsc":"2[3@4\u003e5I9(:'JSKWLQMAO#P$Q;R!S\"T1U2V4W3X:Y+Z*dHjGkTlRmFn/q,t5u6v8w7x.","smacs":"\u000e","rmacs":"\u000f"} +{"name":"hp2626","aliases":["hp2626a","hp2626p"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b\u0026a0c0Y\u001bJ$\u003c40\u003e","sgr0":"\u001b\u0026d@\u000f","smul":"\u001b\u0026dD","bold":"\u001b\u0026dF","blink":"\u001b\u0026dA","rev":"\u001b\u0026dB","dim":"\u001b\u0026dH","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p1%dy%p2%dC$\u003c10\u003e","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp\r","kf2":"\u001bq\r","kf3":"\u001br\r","kf4":"\u001bs\r","kf5":"\u001bt\r","kf6":"\u001bu\r","kf7":"\u001bv\r","kf8":"\u001bw\r","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001bi","kclr":"\u001bJ","acsc":"2[3@4\u003e5I9(:'JSKWLQMAO#P$Q;R!S\"T1U2V4W3X:Y+Z*dHjGkTlRmFn/q,t5u6v8w7x.","smacs":"\u000e","rmacs":"\u000f"} +{"name":"hp2626-12","cols":80,"lines":12,"bell":"\u0007","clear":"\u001b\u0026a0c0Y\u001bJ$\u003c40\u003e","sgr0":"\u001b\u0026d@\u000f","smul":"\u001b\u0026dD","bold":"\u001b\u0026dF","blink":"\u001b\u0026dA","rev":"\u001b\u0026dB","dim":"\u001b\u0026dH","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p1%dy%p2%dC$\u003c10\u003e","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp\r","kf2":"\u001bq\r","kf3":"\u001br\r","kf4":"\u001bs\r","kf5":"\u001bt\r","kf6":"\u001bu\r","kf7":"\u001bv\r","kf8":"\u001bw\r","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001bi","kclr":"\u001bJ","acsc":"2[3@4\u003e5I9(:'JSKWLQMAO#P$Q;R!S\"T1U2V4W3X:Y+Z*dHjGkTlRmFn/q,t5u6v8w7x.","smacs":"\u000e","rmacs":"\u000f"} +{"name":"hp2626-12-s","cols":80,"lines":11,"bell":"\u0007","clear":"\u001b\u0026a0c0Y\u001bJ$\u003c40\u003e","sgr0":"\u001b\u0026d@\u000f","smul":"\u001b\u0026dD","bold":"\u001b\u0026dF","blink":"\u001b\u0026dA","rev":"\u001b\u0026dB","dim":"\u001b\u0026dH","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p1%dy%p2%dC$\u003c10\u003e","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp\r","kf2":"\u001bq\r","kf3":"\u001br\r","kf4":"\u001bs\r","kf5":"\u001bt\r","kf6":"\u001bu\r","kf7":"\u001bv\r","kf8":"\u001bw\r","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001bi","kclr":"\u001bJ","acsc":"2[3@4\u003e5I9(:'JSKWLQMAO#P$Q;R!S\"T1U2V4W3X:Y+Z*dHjGkTlRmFn/q,t5u6v8w7x.","smacs":"\u000e","rmacs":"\u000f"} +{"name":"hp2626-12x40","cols":40,"lines":12,"bell":"\u0007","clear":"\u001b\u0026a0c0Y\u001bJ$\u003c40\u003e","sgr0":"\u001b\u0026d@\u000f","smul":"\u001b\u0026dD","bold":"\u001b\u0026dF","blink":"\u001b\u0026dA","rev":"\u001b\u0026dB","dim":"\u001b\u0026dH","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p1%dy%p2%dC$\u003c10\u003e","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp\r","kf2":"\u001bq\r","kf3":"\u001br\r","kf4":"\u001bs\r","kf5":"\u001bt\r","kf6":"\u001bu\r","kf7":"\u001bv\r","kf8":"\u001bw\r","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001bi","kclr":"\u001bJ","acsc":"2[3@4\u003e5I9(:'JSKWLQMAO#P$Q;R!S\"T1U2V4W3X:Y+Z*dHjGkTlRmFn/q,t5u6v8w7x.","smacs":"\u000e","rmacs":"\u000f"} +{"name":"hp2626-ns","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b\u0026a0c0Y\u001bJ$\u003c40\u003e","sgr0":"\u001b\u0026d@\u000f","smul":"\u001b\u0026dD","bold":"\u001b\u0026dF","blink":"\u001b\u0026dA","rev":"\u001b\u0026dB","dim":"\u001b\u0026dH","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p1%dy%p2%dC$\u003c10\u003e","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp\r","kf2":"\u001bq\r","kf3":"\u001br\r","kf4":"\u001bs\r","kf5":"\u001bt\r","kf6":"\u001bu\r","kf7":"\u001bv\r","kf8":"\u001bw\r","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001bi","kclr":"\u001bJ","acsc":"2[3@4\u003e5I9(:'JSKWLQMAO#P$Q;R!S\"T1U2V4W3X:Y+Z*dHjGkTlRmFn/q,t5u6v8w7x.","smacs":"\u000e","rmacs":"\u000f"} +{"name":"hp2626-s","cols":80,"lines":23,"bell":"\u0007","clear":"\u001b\u0026a0c0Y\u001bJ$\u003c40\u003e","sgr0":"\u001b\u0026d@\u000f","smul":"\u001b\u0026dD","bold":"\u001b\u0026dF","blink":"\u001b\u0026dA","rev":"\u001b\u0026dB","dim":"\u001b\u0026dH","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p1%dy%p2%dC$\u003c10\u003e","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp\r","kf2":"\u001bq\r","kf3":"\u001br\r","kf4":"\u001bs\r","kf5":"\u001bt\r","kf6":"\u001bu\r","kf7":"\u001bv\r","kf8":"\u001bw\r","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001bi","kclr":"\u001bJ","acsc":"2[3@4\u003e5I9(:'JSKWLQMAO#P$Q;R!S\"T1U2V4W3X:Y+Z*dHjGkTlRmFn/q,t5u6v8w7x.","smacs":"\u000e","rmacs":"\u000f"} +{"name":"hp2626-x40","cols":40,"lines":24,"bell":"\u0007","clear":"\u001b\u0026a0c0Y\u001bJ$\u003c40\u003e","sgr0":"\u001b\u0026d@\u000f","smul":"\u001b\u0026dD","bold":"\u001b\u0026dF","blink":"\u001b\u0026dA","rev":"\u001b\u0026dB","dim":"\u001b\u0026dH","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p1%dy%p2%dC$\u003c10\u003e","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp\r","kf2":"\u001bq\r","kf3":"\u001br\r","kf4":"\u001bs\r","kf5":"\u001bt\r","kf6":"\u001bu\r","kf7":"\u001bv\r","kf8":"\u001bw\r","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001bi","kclr":"\u001bJ","acsc":"2[3@4\u003e5I9(:'JSKWLQMAO#P$Q;R!S\"T1U2V4W3X:Y+Z*dHjGkTlRmFn/q,t5u6v8w7x.","smacs":"\u000e","rmacs":"\u000f"} +{"name":"hp2627a","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD\u001b\u0026v1S","cup":"\u001b\u0026a%p2%dc%p1%dY","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp\r","kf2":"\u001bq\r","kf3":"\u001br\r","kf4":"\u001bs\r","kf5":"\u001bt\r","kf6":"\u001bu\r","kf7":"\u001bv\r","kf8":"\u001bw\r","kcud1":"\n","kcub1":"\u0008","kcbt":"\u001bi"} +{"name":"hp2627a-rev","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD\u001b\u0026v1S","cup":"\u001b\u0026a%p2%dc%p1%dY","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp\r","kf2":"\u001bq\r","kf3":"\u001br\r","kf4":"\u001bs\r","kf5":"\u001bt\r","kf6":"\u001bu\r","kf7":"\u001bv\r","kf8":"\u001bw\r","kcud1":"\n","kcub1":"\u0008","kcbt":"\u001bi"} +{"name":"hp2627c","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD\u001b\u0026v1S","cup":"\u001b\u0026a%p2%dc%p1%dY","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp\r","kf2":"\u001bq\r","kf3":"\u001br\r","kf4":"\u001bs\r","kf5":"\u001bt\r","kf6":"\u001bu\r","kf7":"\u001bv\r","kf8":"\u001bw\r","kcud1":"\n","kcub1":"\u0008","kcbt":"\u001bi"} +{"name":"hp2640b","aliases":["hp2644a"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","blink":"\u001b\u0026dA","rev":"\u001b\u0026dB","dim":"\u001b\u0026dH","cup":"\u001b\u0026a%p2%dc%p1%dY$\u003c6\u003e","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001bi"} +{"name":"hp2641a","aliases":["hp2645a","hp2647a"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","cup":"\u001b\u0026a%p2%2dc%p1%2dY","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kcud1":"\n","kcub1":"\u0008"} +{"name":"hp2645","aliases":["hp45"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","blink":"\u001b\u0026dA","rev":"\u001b\u0026dB","dim":"\u001b\u0026dH","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p2%dc%p1%dY$\u003c6\u003e","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001bi"} +{"name":"hp2648","aliases":["hp2648a"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ$\u003c50\u003e","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","blink":"\u001b\u0026dA","rev":"\u001b\u0026dB","dim":"\u001b\u0026dH","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p2%dc%p1%dY$\u003c20\u003e","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001bi"} +{"name":"hp300h","cols":128,"lines":51,"bell":"\u0007","clear":"\u001b\u0026a0y0C\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p1%dy%p2%dC","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","khome":"\u001bh","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"hp700-wy","cols":80,"lines":24,"clear":"\u001a","sgr0":"\u001bG0$\u003c10/\u003e","smul":"\u001bG8$\u003c10/\u003e","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"","kich":"\u001bq","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kclr":"\u001a"} +{"name":"hp70092","aliases":["hp70092a"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b\u0026a0y0C\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","bold":"\u001b\u0026dB","blink":"\u001b\u0026dA","rev":"\u001b\u0026dB","dim":"\u001b\u0026dH","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p1%dy%p2%dC","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp","kf2":"\u001bq","kf3":"\u001br","kf4":"\u001bs","kf5":"\u001bt","kf6":"\u001bu","kf7":"\u001bv","kf8":"\u001bw","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kclr":"\u001bJ","acsc":"0cjgktlrmfn/q,t5u6v8w7x.","smacs":"\u000e","rmacs":"\u000f"} +{"name":"hp9837","aliases":["hp98720","hp98721"],"cols":128,"lines":46,"bell":"\u0007","clear":"\u001b\u0026a0y0C\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p1%dy%p2%dC","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"hp9845","cols":80,"lines":21,"clear":"\u001bH\u001bJ","cup":"\u001b\u0026a%p2%2dc%p1%2dY","cuu1":"\u001bA","pad":"\u0000"} +{"name":"hp98550","aliases":["hp98550a"],"cols":128,"lines":49,"bell":"\u0007","clear":"\u001bH\u001bJ","cnorm":"\u001b*dQ","civis":"\u001b*dR","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","bold":"\u001b\u0026dJ","blink":"\u001b\u0026dA","rev":"\u001b\u0026dJ","dim":"\u001b\u0026dH","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p1%dy%p2%dC","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp","kf2":"\u001bq","kf3":"\u001br","kf4":"\u001bs","kf5":"\u001bt","kf6":"\u001bu","kf7":"\u001bv","kf8":"\u001bw","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kclr":"\u001bJ","smacs":"\u000e","rmacs":"\u000f"} +{"name":"hpansi","aliases":["hp700"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[2J\u001b[H","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u001b[4m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[17~","kf2":"\u001b[18~","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kf9":"\u001b[26~","kf10":"\u001b[28~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffd"} +{"name":"hpex","cols":-1,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p1%dy%p2%dC","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","khome":"\u001bh","kcuu1":"\u001bA","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u001bC"} +{"name":"hpgeneric","aliases":["hp"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","cup":"\u001b\u0026a%p2%dc%p1%dY$\u003c6\u003e","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kcbt":"\u001bi"} +{"name":"hpterm","aliases":["X-hpterm"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b\u0026a0y0C\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","bold":"\u001b\u0026dB","rev":"\u001b\u0026dB","dim":"\u001b\u0026dH","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p1%dy%p2%dC","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp","kf2":"\u001bq","kf3":"\u001br","kf4":"\u001bs","kf5":"\u001bt","kf6":"\u001bu","kf7":"\u001bv","kf8":"\u001bw","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kclr":"\u001bJ","smacs":"\u000e","rmacs":"\u000f"} +{"name":"hpterm-color","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b\u0026a0y0C\u001bJ","sgr0":"\u001b\u0026d@","smul":"\u001b\u0026dD","bold":"\u001b\u0026dB","rev":"\u001b\u0026dB","dim":"\u001b\u0026dH","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p1%dy%p2%dC","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp","kf2":"\u001bq","kf3":"\u001br","kf4":"\u001bs","kf5":"\u001bt","kf6":"\u001bu","kf7":"\u001bv","kf8":"\u001bw","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kclr":"\u001bJ","smacs":"\u000e","rmacs":"\u000f"} +{"name":"hurd","cols":-1,"lines":-1,"colors":8,"bell":"\u0007","clear":"\u001bc","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"++,,--..00ii``aaffgghhjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"hz1420","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b\u001c","cup":"\u001b\u0011%p2%c%p1%' '%+%c","cub1":"\u0008","cuu1":"\u001b\u000c","pad":"\u0000"} +{"name":"hz1500","cols":80,"lines":24,"bell":"\u0007","clear":"~\u001c","cup":"~\u0011%p2%p2%?%{30}%\u003e%t%' '%+%;%'`'%+%c%p1%'`'%+%c","cub1":"\u0008","cuu1":"~\u000c","pad":"\u0000","khome":"~\u0012","kcuu1":"~\u000c","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u0010"} +{"name":"hz1510","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b\u001c","cup":"\u001b\u0011%p2%c%p1%c","cub1":"\u0008","cuu1":"\u001b\u000c","pad":"\u0000"} +{"name":"hz1520","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b\u001c","sgr0":"\u001b\u0019","bold":"\u001b\u001f","cup":"\u001b\u0011%p2%c%p1%c","cub1":"\u0008","cuu1":"\u001b\u000c","pad":"\u0000","kbs":"\u0008","khome":"\u001b\u0012","kcuu1":"\u001b\u000c","kcud1":"\u001b\u000b","kcub1":"\u0008","kcuf1":"\u0010","kclr":"\u001b\u001c"} +{"name":"hz1520-noesc","cols":80,"lines":24,"bell":"\u0007","clear":"~\u001c","cup":"~\u0011%p2%c%p1%c$\u003c1\u003e","cub1":"\u0008","cuu1":"~\u000c","pad":"\u0000"} +{"name":"hz1552","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u001bD","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bP","kf2":"\u001bQ","kf3":"\u001bR","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","acsc":"ffgghhompoqqss.k","smacs":"\u001bF","rmacs":"\u001bG"} +{"name":"hz1552-rv","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u001bD","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bP","kf2":"\u001bQ","kf3":"\u001bR","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","acsc":"ffgghhompoqqss.k","smacs":"\u001bF","rmacs":"\u001bG"} +{"name":"hz2000","cols":74,"lines":27,"bell":"\u0007","clear":"~\u001c$\u003c6\u003e","cup":"~\u0011%p2%c%p1%c","cub1":"\u0008","pad":""} +{"name":"i100","aliases":["gt100","gt100a"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","cup":"\u001bf%p2%' '%+%c%p1%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000"} +{"name":"i400","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[2J","cup":"\u001b[%i%p1%3d;%p2%3dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000"} +{"name":"ibcs2","cols":-1,"lines":-1,"clear":"\u001bc","cup":"\u001b[%i%p1%d;%p2%dH","pad":"\u0000"} +{"name":"ibm-apl","aliases":["apl"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u000c","cup":"\u001e%p2%' '%+%c%p1%' '%+%c","cub1":"\u0008","cuu1":"\u001f","pad":"\u0000","khome":"\u0019","kcuu1":"\u001f","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u001c"} +{"name":"ibm-system1","aliases":["system1"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001a","cup":"\u0005%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001e","pad":"\u0000"} +{"name":"ibm3101","aliases":["i3101"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bK","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"ibm3151","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","smcup":"\u001b\u003eB","rmcup":"\u001b\u003eB","sgr0":"\u001b4@\u001b\u003eB","smul":"\u001b4\"a","bold":"\u001b4(a","blink":"\u001b4$a","rev":"\u001b4!a","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u001bD","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001ba\r","kf2":"\u001bb\r","kf3":"\u001bc\r","kf4":"\u001bd\r","kf5":"\u001be\r","kf6":"\u001bf\r","kf7":"\u001bg\r","kf8":"\u001bh\r","kf9":"\u001bi\r","kf10":"\u001bj\r","kf11":"\u001bk\r","kf12":"\u001bl\r","kf13":"\u001b!a\r","kf14":"\u001b!b\r","kf15":"\u001b!c\r","kf16":"\u001b!d\r","kf17":"\u001b!e\r","kf18":"\u001b!f\r","kf19":"\u001b!g\r","kf20":"\u001b!h\r","kf21":"\u001b!i\r","kf22":"\u001b!j\r","kf23":"\u001b!k\r","kf24":"\u001b!l\r","kich":"\u001bP \u0008","kdch":"\u001bQ","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001b2","kclr":"\u001bL\r","acsc":"j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffd","smacs":"\u001b\u003eA","rmacs":"\u001b\u003eB"} +{"name":"ibm3161","aliases":["ibm3163","wy60-316X","wyse60-316X"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","smcup":"\u001b\u003eA","rmcup":"\u001b\u003eA","sgr0":"\u001b4@\u001b\u003c@","smul":"\u001b4B","bold":"\u001b4H","blink":"\u001b4D","rev":"\u001b4A","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u001bD","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001ba\r","kf2":"\u001bb\r","kf3":"\u001bc\r","kf4":"\u001bd\r","kf5":"\u001be\r","kf6":"\u001bf\r","kf7":"\u001bg\r","kf8":"\u001bh\r","kf9":"\u001bi\r","kf10":"\u001bj\r","kf11":"\u001bk\r","kf12":"\u001bl\r","kf13":"\u001b!a\r","kf14":"\u001b!b\r","kf15":"\u001b!c\r","kf16":"\u001b!d\r","kf17":"\u001b!e\r","kf18":"\u001b!f\r","kf19":"\u001b!g\r","kf20":"\u001b!h\r","kf21":"\u001b!i\r","kf22":"\u001b!j\r","kf23":"\u001b!k\r","kf24":"\u001b!l\r","kich":"\u001bP \u0008","kdch":"\u001bQ","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001b2","kclr":"\u001bL\r","acsc":"j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffd"} +{"name":"ibm3161-C","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","smcup":"\u001b\u003eB","rmcup":"\u001b\u003eB","sgr0":"\u001b4@\u001b\u003c@","smul":"\u001b4B","bold":"\u001b4H","blink":"\u001b4D","rev":"\u001b4A","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u001bD","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001ba\r","kf2":"\u001bb\r","kf3":"\u001bc\r","kf4":"\u001bd\r","kf5":"\u001be\r","kf6":"\u001bf\r","kf7":"\u001bg\r","kf8":"\u001bh\r","kf9":"\u001bi\r","kf10":"\u001bj\r","kf11":"\u001bk\r","kf12":"\u001bl\r","kf13":"\u001b!a\r","kf14":"\u001b!b\r","kf15":"\u001b!c\r","kf16":"\u001b!d\r","kf17":"\u001b!e\r","kf18":"\u001b!f\r","kf19":"\u001b!g\r","kf20":"\u001b!h\r","kf21":"\u001b!i\r","kf22":"\u001b!j\r","kf23":"\u001b!k\r","kf24":"\u001b!l\r","kich":"\u001bP \u0008","kdch":"\u001bQ","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001b2","kclr":"\u001bL\r","acsc":"j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffd"} +{"name":"ibm3162","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","smcup":"\u001b\u003eB","rmcup":"\u001b\u003eB","sgr0":"\u001b4@","smul":"\u001b4\"a","bold":"\u001b4(a","blink":"\u001b4$a","rev":"\u001b4!a","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u001bD","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001ba\r","kf2":"\u001bb\r","kf3":"\u001bc\r","kf4":"\u001bd\r","kf5":"\u001be\r","kf6":"\u001bf\r","kf7":"\u001bg\r","kf8":"\u001bh\r","kf9":"\u001bi\r","kf10":"\u001bj\r","kf11":"\u001bk\r","kf12":"\u001bl\r","kf13":"\u001b!a\r","kf14":"\u001b!b\r","kf15":"\u001b!c\r","kf16":"\u001b!d\r","kf17":"\u001b!e\r","kf18":"\u001b!f\r","kf19":"\u001b!g\r","kf20":"\u001b!h\r","kf21":"\u001b!i\r","kf22":"\u001b!j\r","kf23":"\u001b!k\r","kf24":"\u001b!l\r","kich":"\u001bP \u0008","kdch":"\u001bQ","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001b2","kclr":"\u001bL\r","acsc":"j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffd"} +{"name":"ibm3164","aliases":["i3164"],"cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001bH\u001bJ","smcup":"\u001b!9/N\u001b\u003eB","rmcup":"\u001b!9(N\u001b\u003eB","sgr0":"\u001b4@\u001b\u003c@","smul":"\u001b4B","bold":"\u001b4H","blink":"\u001b4D","rev":"\u001b4A","setaf":"\u001b4%?%p1%t %p1%' '%+%c%e!'%;@","setbg":"\u001b4 %p1%'@'%+%c","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u001bD","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001ba\r","kf2":"\u001bb\r","kf3":"\u001bc\r","kf4":"\u001bd\r","kf5":"\u001be\r","kf6":"\u001bf\r","kf7":"\u001bg\r","kf8":"\u001bh\r","kf9":"\u001bi\r","kf10":"\u001bj\r","kf11":"\u001bk\r","kf12":"\u001bl\r","kf13":"\u001b!a\r","kf14":"\u001b!b\r","kf15":"\u001b!c\r","kf16":"\u001b!d\r","kf17":"\u001b!e\r","kf18":"\u001b!f\r","kf19":"\u001b!g\r","kf20":"\u001b!h\r","kf21":"\u001b!i\r","kf22":"\u001b!j\r","kf23":"\u001b!k\r","kf24":"\u001b!l\r","kich":"\u001bP \u0008","kdch":"\u001bQ","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001b2","kclr":"\u001bL\r","acsc":"j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffd"} +{"name":"ibm5081","aliases":["hft"],"cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0m\u001b(B","smul":"\u001b[4m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[001q","kf2":"\u001b[002q","kf3":"\u001b[003q","kf4":"\u001b[004q","kf5":"\u001b[005q","kf6":"\u001b[006q","kf7":"\u001b[007q","kf8":"\u001b[008q","kf9":"\u001b[009q","kf10":"\u001b[010q","kf11":"\u001b[011q","kf12":"\u001b[012q","kf13":"\u001b[013q","kf14":"\u001b[014q","kf15":"\u001b[015q","kf16":"\u001b[016q","kf17":"\u001b[017q","kf18":"\u001b[018q","kf19":"\u001b[019q","kf20":"\u001b[020q","kf21":"\u001b[021q","kf22":"\u001b[022q","kf23":"\u001b[023q","kf24":"\u001b[024q","kf25":"\u001b[025q","kf26":"\u001b[026q","kf27":"\u001b[027q","kf28":"\u001b[028q","kf29":"\u001b[029q","kf30":"\u001b[030q","kf31":"\u001b[031q","kf32":"\u001b[032q","kf33":"\u001b[033q","kf34":"\u001b[034q","kf35":"\u001b[035q","kf36":"\u001b[036q","kich":"\u001b[139q","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[146q","kpp":"\u001b[150q","knp":"\u001b[154q","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[144q","acsc":"jjkkllmmnnqqttuuvvwwxx","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"ibm5081-c","aliases":["ibmmpel-c"],"cols":80,"lines":33,"bell":"\u0007","clear":"\u001bK","sgr0":"\u001bw\u001bq\u001bz\u001bB","smul":"\u001bF\u001bf2;","bold":"\u001bZ","rev":"\u001bp","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bS","kf2":"\u001bT","kf3":"\u001bU","kf4":"\u001bV","kf5":"\u001bW","kf6":"\u001bP","kf7":"\u001bQ","kf8":"\u001bR","kf9":"\u001bY","kich":"\ufffd","khome":"\u001bH","kpp":"\u001bg","knp":"\u001bE","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"ibm5151","aliases":["wy60-AT","wyse60-AT"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[001q","kf2":"\u001b[002q","kf3":"\u001b[003q","kf4":"\u001b[004q","kf5":"\u001b[005q","kf6":"\u001b[006q","kf7":"\u001b[007q","kf8":"\u001b[008q","kf9":"\u001b[009q","kf10":"\u001b[010q","kf11":"\u001b[011q","kf12":"\u001b[012q","kf13":"\u001b[013q","kf14":"\u001b[014q","kf15":"\u001b[015q","kf16":"\u001b[016q","kf17":"\u001b[017q","kf18":"\u001b[018q","kf19":"\u001b[019q","kf20":"\u001b[020q","kf21":"\u001b[021q","kf22":"\u001b[022q","kf23":"\u001b[023q","kf24":"\u001b[024q","kf25":"\u001b[025q","kf26":"\u001b[026q","kf27":"\u001b[027q","kf28":"\u001b[028q","kf29":"\u001b[029q","kf30":"\u001b[030q","kf31":"\u001b[031q","kf32":"\u001b[032q","kf33":"\u001b[033q","kf34":"\u001b[034q","kf35":"\u001b[035q","kf36":"\u001b[036q","kich":"\u001b[139q","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[146q","kpp":"\u001b[150q","knp":"\u001b[154q","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[144q","acsc":"j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffd"} +{"name":"ibm5154","cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0m","smul":"\u001b[4m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[001q","kf2":"\u001b[002q","kf3":"\u001b[003q","kf4":"\u001b[004q","kf5":"\u001b[005q","kf6":"\u001b[006q","kf7":"\u001b[007q","kf8":"\u001b[008q","kf9":"\u001b[009q","kf10":"\u001b[010q","kf11":"\u001b[011q","kf12":"\u001b[012q","kf13":"\u001b[013q","kf14":"\u001b[014q","kf15":"\u001b[015q","kf16":"\u001b[016q","kf17":"\u001b[017q","kf18":"\u001b[018q","kf19":"\u001b[019q","kf20":"\u001b[020q","kf21":"\u001b[021q","kf22":"\u001b[022q","kf23":"\u001b[023q","kf24":"\u001b[024q","kf25":"\u001b[025q","kf26":"\u001b[026q","kf27":"\u001b[027q","kf28":"\u001b[028q","kf29":"\u001b[029q","kf30":"\u001b[030q","kf31":"\u001b[031q","kf32":"\u001b[032q","kf33":"\u001b[033q","kf34":"\u001b[034q","kf35":"\u001b[035q","kf36":"\u001b[036q","kich":"\u001b[139q","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[146q","kpp":"\u001b[150q","knp":"\u001b[154q","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[144q","acsc":"j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"ibm6153","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[12m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[001q","kf2":"\u001b[002q","kf3":"\u001b[003q","kf4":"\u001b[004q","kf5":"\u001b[005q","kf6":"\u001b[006q","kf7":"\u001b[007q","kf8":"\u001b[008q","kf9":"\u001b[009q","kf10":"\u001b[010q","kf11":"\u001b[011q","kf12":"\u001b[012q","kf13":"\u001b[013q","kf14":"\u001b[014q","kf15":"\u001b[015q","kf16":"\u001b[016q","kf17":"\u001b[017q","kf18":"\u001b[018q","kf19":"\u001b[019q","kf20":"\u001b[020q","kf21":"\u001b[021q","kf22":"\u001b[022q","kf23":"\u001b[023q","kf24":"\u001b[024q","kf25":"\u001b[025q","kf26":"\u001b[026q","kf27":"\u001b[027q","kf28":"\u001b[028q","kf29":"\u001b[029q","kf30":"\u001b[030q","kf31":"\u001b[031q","kf32":"\u001b[032q","kf33":"\u001b[033q","kf34":"\u001b[034q","kf35":"\u001b[035q","kf36":"\u001b[036q","kich":"\u001b[139q","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[146q","kpp":"\u001b[150q","knp":"\u001b[154q","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[144q","acsc":"j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffd"} +{"name":"ibm6153-40","cols":40,"lines":12,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0m","smul":"\u001b[4m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[001q","kf2":"\u001b[002q","kf3":"\u001b[003q","kf4":"\u001b[004q","kf5":"\u001b[005q","kf6":"\u001b[006q","kf7":"\u001b[007q","kf8":"\u001b[008q","kf9":"\u001b[009q","kf10":"\u001b[010q","kf11":"\u001b[011q","kf12":"\u001b[012q","kf13":"\u001b[013q","kf14":"\u001b[014q","kf15":"\u001b[015q","kf16":"\u001b[016q","kf17":"\u001b[017q","kf18":"\u001b[018q","kf19":"\u001b[019q","kf20":"\u001b[020q","kf21":"\u001b[021q","kf22":"\u001b[022q","kf23":"\u001b[023q","kf24":"\u001b[024q","kf25":"\u001b[025q","kf26":"\u001b[026q","kf27":"\u001b[027q","kf28":"\u001b[028q","kf29":"\u001b[029q","kf30":"\u001b[030q","kf31":"\u001b[031q","kf32":"\u001b[032q","kf33":"\u001b[033q","kf34":"\u001b[034q","kf35":"\u001b[035q","kf36":"\u001b[036q","kich":"\u001b[139q","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[146q","kpp":"\u001b[150q","knp":"\u001b[154q","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[144q","acsc":"j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffd"} +{"name":"ibm6153-90","cols":90,"lines":36,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0m","smul":"\u001b[4m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[001q","kf2":"\u001b[002q","kf3":"\u001b[003q","kf4":"\u001b[004q","kf5":"\u001b[005q","kf6":"\u001b[006q","kf7":"\u001b[007q","kf8":"\u001b[008q","kf9":"\u001b[009q","kf10":"\u001b[010q","kf11":"\u001b[011q","kf12":"\u001b[012q","kf13":"\u001b[013q","kf14":"\u001b[014q","kf15":"\u001b[015q","kf16":"\u001b[016q","kf17":"\u001b[017q","kf18":"\u001b[018q","kf19":"\u001b[019q","kf20":"\u001b[020q","kf21":"\u001b[021q","kf22":"\u001b[022q","kf23":"\u001b[023q","kf24":"\u001b[024q","kf25":"\u001b[025q","kf26":"\u001b[026q","kf27":"\u001b[027q","kf28":"\u001b[028q","kf29":"\u001b[029q","kf30":"\u001b[030q","kf31":"\u001b[031q","kf32":"\u001b[032q","kf33":"\u001b[033q","kf34":"\u001b[034q","kf35":"\u001b[035q","kf36":"\u001b[036q","kich":"\u001b[139q","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[146q","kpp":"\u001b[150q","knp":"\u001b[154q","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[144q","acsc":"j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffd"} +{"name":"ibm6154","cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[12m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[001q","kf2":"\u001b[002q","kf3":"\u001b[003q","kf4":"\u001b[004q","kf5":"\u001b[005q","kf6":"\u001b[006q","kf7":"\u001b[007q","kf8":"\u001b[008q","kf9":"\u001b[009q","kf10":"\u001b[010q","kf11":"\u001b[011q","kf12":"\u001b[012q","kf13":"\u001b[013q","kf14":"\u001b[014q","kf15":"\u001b[015q","kf16":"\u001b[016q","kf17":"\u001b[017q","kf18":"\u001b[018q","kf19":"\u001b[019q","kf20":"\u001b[020q","kf21":"\u001b[021q","kf22":"\u001b[022q","kf23":"\u001b[023q","kf24":"\u001b[024q","kf25":"\u001b[025q","kf26":"\u001b[026q","kf27":"\u001b[027q","kf28":"\u001b[028q","kf29":"\u001b[029q","kf30":"\u001b[030q","kf31":"\u001b[031q","kf32":"\u001b[032q","kf33":"\u001b[033q","kf34":"\u001b[034q","kf35":"\u001b[035q","kf36":"\u001b[036q","kich":"\u001b[139q","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[146q","kpp":"\u001b[150q","knp":"\u001b[154q","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[144q","acsc":"j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"ibm6155","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0m","smul":"\u001b[4m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[001q","kf2":"\u001b[002q","kf3":"\u001b[003q","kf4":"\u001b[004q","kf5":"\u001b[005q","kf6":"\u001b[006q","kf7":"\u001b[007q","kf8":"\u001b[008q","kf9":"\u001b[009q","kf10":"\u001b[010q","kf11":"\u001b[011q","kf12":"\u001b[012q","kf13":"\u001b[013q","kf14":"\u001b[014q","kf15":"\u001b[015q","kf16":"\u001b[016q","kf17":"\u001b[017q","kf18":"\u001b[018q","kf19":"\u001b[019q","kf20":"\u001b[020q","kf21":"\u001b[021q","kf22":"\u001b[022q","kf23":"\u001b[023q","kf24":"\u001b[024q","kf25":"\u001b[025q","kf26":"\u001b[026q","kf27":"\u001b[027q","kf28":"\u001b[028q","kf29":"\u001b[029q","kf30":"\u001b[030q","kf31":"\u001b[031q","kf32":"\u001b[032q","kf33":"\u001b[033q","kf34":"\u001b[034q","kf35":"\u001b[035q","kf36":"\u001b[036q","kich":"\u001b[139q","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[146q","kpp":"\u001b[150q","knp":"\u001b[154q","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[144q","acsc":"j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffd"} +{"name":"ibm8503","aliases":["ibm8507","ibm8604"],"cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[001q","kf2":"\u001b[002q","kf3":"\u001b[003q","kf4":"\u001b[004q","kf5":"\u001b[005q","kf6":"\u001b[006q","kf7":"\u001b[007q","kf8":"\u001b[008q","kf9":"\u001b[009q","kf10":"\u001b[010q","kf11":"\u001b[011q","kf12":"\u001b[012q","kf13":"\u001b[013q","kf14":"\u001b[014q","kf15":"\u001b[015q","kf16":"\u001b[016q","kf17":"\u001b[017q","kf18":"\u001b[018q","kf19":"\u001b[019q","kf20":"\u001b[020q","kf21":"\u001b[021q","kf22":"\u001b[022q","kf23":"\u001b[023q","kf24":"\u001b[024q","kf25":"\u001b[025q","kf26":"\u001b[026q","kf27":"\u001b[027q","kf28":"\u001b[028q","kf29":"\u001b[029q","kf30":"\u001b[030q","kf31":"\u001b[031q","kf32":"\u001b[032q","kf33":"\u001b[033q","kf34":"\u001b[034q","kf35":"\u001b[035q","kf36":"\u001b[036q","kich":"\u001b[139q","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[146q","kpp":"\u001b[150q","knp":"\u001b[154q","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[144q","acsc":"jjkkllmmnnqqttuuvvwwxx","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"ibm8512","aliases":["ibm8513"],"cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[20;4l\u001b[?7h\u001bb","rmcup":"\u001b[20h","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[001q","kf2":"\u001b[002q","kf3":"\u001b[003q","kf4":"\u001b[004q","kf5":"\u001b[005q","kf6":"\u001b[006q","kf7":"\u001b[007q","kf8":"\u001b[008q","kf9":"\u001b[009q","kf10":"\u001b[010q","kf11":"\u001b[011q","kf12":"\u001b[012q","kf13":"\u001b[013q","kf14":"\u001b[014q","kf15":"\u001b[015q","kf16":"\u001b[016q","kf17":"\u001b[017q","kf18":"\u001b[018q","kf19":"\u001b[019q","kf20":"\u001b[020q","kf21":"\u001b[021q","kf22":"\u001b[022q","kf23":"\u001b[023q","kf24":"\u001b[024q","kf25":"\u001b[025q","kf26":"\u001b[026q","kf27":"\u001b[027q","kf28":"\u001b[028q","kf29":"\u001b[029q","kf30":"\u001b[030q","kf31":"\u001b[031q","kf32":"\u001b[032q","kf33":"\u001b[033q","kf34":"\u001b[034q","kf35":"\u001b[035q","kf36":"\u001b[036q","kich":"\u001b[139q","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[146q","kpp":"\u001b[150q","knp":"\u001b[154q","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[144q","acsc":"jjkkllmmnnqqttuuvvwwxx","smacs":"\u000e","rmacs":"\u000f","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"ibm8514","cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0m\u001b(B","smul":"\u001b[4m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[001q","kf2":"\u001b[002q","kf3":"\u001b[003q","kf4":"\u001b[004q","kf5":"\u001b[005q","kf6":"\u001b[006q","kf7":"\u001b[007q","kf8":"\u001b[008q","kf9":"\u001b[009q","kf10":"\u001b[010q","kf11":"\u001b[011q","kf12":"\u001b[012q","kf13":"\u001b[013q","kf14":"\u001b[014q","kf15":"\u001b[015q","kf16":"\u001b[016q","kf17":"\u001b[017q","kf18":"\u001b[018q","kf19":"\u001b[019q","kf20":"\u001b[020q","kf21":"\u001b[021q","kf22":"\u001b[022q","kf23":"\u001b[023q","kf24":"\u001b[024q","kf25":"\u001b[025q","kf26":"\u001b[026q","kf27":"\u001b[027q","kf28":"\u001b[028q","kf29":"\u001b[029q","kf30":"\u001b[030q","kf31":"\u001b[031q","kf32":"\u001b[032q","kf33":"\u001b[033q","kf34":"\u001b[034q","kf35":"\u001b[035q","kf36":"\u001b[036q","kich":"\u001b[139q","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[146q","kpp":"\u001b[150q","knp":"\u001b[154q","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[144q","acsc":"jjkkllmmnnqqttuuvvwwxx","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"ibm8514-c","cols":80,"lines":41,"bell":"\u0007","clear":"\u001bK","sgr0":"\u001bw\u001bq\u001bz\u001bB","smul":"\u001bF\u001bf2;","bold":"\u001bZ","rev":"\u001bp","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bS","kf2":"\u001bT","kf3":"\u001bU","kf4":"\u001bV","kf5":"\u001bW","kf6":"\u001bP","kf7":"\u001bQ","kf8":"\u001bR","kf9":"\u001bY","kich":"\ufffd","khome":"\u001bH","kpp":"\u001bg","knp":"\u001bE","kcuu1":"\u001bA","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u001bC"} +{"name":"ibmaed","cols":80,"lines":52,"clear":"\u001bH\u001bK","sgr0":"\u001b0","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"ibmapa8c","aliases":["ibmapa8"],"cols":80,"lines":31,"bell":"\u0007","clear":"\u001bK","sgr0":"\u001bw\u001bq\u001bz\u001bB","smul":"\u001bW","bold":"\u001bZ","rev":"\u001bp","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bS","kf2":"\u001bT","kf3":"\u001bU","kf4":"\u001bV","kf5":"\u001bW","kf6":"\u001bP","kf7":"\u001bQ","kf8":"\u001bR","kf9":"\u001bY","kich":"\ufffd","khome":"\u001bH","kpp":"\u001bg","knp":"\u001bE","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"ibmapa8c-c","aliases":["ibm6154-c"],"cols":80,"lines":31,"bell":"\u0007","clear":"\u001bK","sgr0":"\u001bw\u001bq\u001bz\u001bB","smul":"\u001bF\u001bf2;","bold":"\u001bZ","rev":"\u001bp","dim":"\u001bF\u001bf7;","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bS","kf2":"\u001bT","kf3":"\u001bU","kf4":"\u001bV","kf5":"\u001bW","kf6":"\u001bP","kf7":"\u001bQ","kf8":"\u001bR","kf9":"\u001bY","kich":"\ufffd","khome":"\u001bH","kpp":"\u001bg","knp":"\u001bE","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"ibmega","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bK","sgr0":"\u001bw\u001bq\u001bz\u001bB","smul":"\u001bW","bold":"\u001bZ","rev":"\u001bp","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bS","kf2":"\u001bT","kf3":"\u001bU","kf4":"\u001bV","kf5":"\u001bW","kf6":"\u001bP","kf7":"\u001bQ","kf8":"\u001bR","kf9":"\u001bY","kich":"\ufffd","khome":"\u001bH","kpp":"\u001bg","knp":"\u001bE","kcuu1":"\u001bA","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u001bC"} +{"name":"ibmega-c","aliases":["ibm5154-c"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bK","sgr0":"\u001bw\u001bq\u001bz\u001bB","smul":"\u001bF\u001bf2;","bold":"\u001bZ","rev":"\u001bp","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bS","kf2":"\u001bT","kf3":"\u001bU","kf4":"\u001bV","kf5":"\u001bW","kf6":"\u001bP","kf7":"\u001bQ","kf8":"\u001bR","kf9":"\u001bY","kich":"\ufffd","khome":"\u001bH","kpp":"\u001bg","knp":"\u001bE","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"ibmmono","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bK","sgr0":"\u001bw\u001bq\u001bz\u001bB","smul":"\u001bW","bold":"\u001bZ","rev":"\u001bp","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bS","kf2":"\u001bT","kf3":"\u001bU","kf4":"\u001bV","kf5":"\u001bW","kf6":"\u001bP","kf7":"\u001bQ","kf8":"\u001bR","kf9":"\u001bY","kich":"\ufffd","khome":"\u001bH","kpp":"\u001bg","knp":"\u001bE","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"ibmpc","aliases":["wy60-PC","wyse60-PC"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bc","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\ufffd","kf2":"\ufffd","kf3":"\ufffd","kf4":"\ufffd","kf5":"\ufffd","kf6":"\ufffd","kf7":"\ufffd","kf8":"\ufffd","kf9":"\ufffd","kf10":"\ufffd","kich":"\u001b[\u0008","kdch":"","khome":"\u001b[H","kend":"\u001b[Y","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001d","acsc":"j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffd"} +{"name":"ibmpc3","aliases":["pc3-bold"],"cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001bc","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kich":"\u001b[L","khome":"\u001b[H","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"ibmpcx","aliases":["ibmx","xenix"],"cols":80,"lines":25,"clear":"\u000c","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[K","kf2":"\u001b[L","kf3":"\u001b[M","kf4":"\u001b[N","khome":"\u001b[Y","kend":"\u001b[d","kpp":"\u001b[Z","knp":"\u001b[e","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m"} +{"name":"ibmvga","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bK","sgr0":"\u001bw\u001bq\u001bz\u001bB","smul":"\u001bW","bold":"\u001bZ","rev":"\u001bp","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bS","kf2":"\u001bT","kf3":"\u001bU","kf4":"\u001bV","kf5":"\u001bW","kf6":"\u001bP","kf7":"\u001bQ","kf8":"\u001bR","kf9":"\u001bY","kich":"\ufffd","khome":"\u001bH","kpp":"\u001bg","knp":"\u001bE","kcuu1":"\u001bA","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u001bC"} +{"name":"ibmvga-c","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bK","sgr0":"\u001bw\u001bq\u001bz\u001bB","smul":"\u001bF\u001bf2;","bold":"\u001bZ","rev":"\u001bp","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bS","kf2":"\u001bT","kf3":"\u001bU","kf4":"\u001bV","kf5":"\u001bW","kf6":"\u001bP","kf7":"\u001bQ","kf8":"\u001bR","kf9":"\u001bY","kich":"\ufffd","khome":"\u001bH","kpp":"\u001bg","knp":"\u001bE","kcuu1":"\u001bA","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u001bC"} +{"name":"icl6404","aliases":["icl6402","kds6402","kds7372"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*","cnorm":"\u001b.3","civis":"\u001b.0","sgr0":"\u001b[0ZZ","smul":"\u001b[8ZZ","blink":"\u001b[2ZZ","rev":"\u001b[4ZZ","cup":"\u001b=%p1%' '%+%c%p2%'P'%m%' '%+%c%p2%'P'%\u003e%' '%+%c","cuu1":"\u000b","pad":"\u0000"} +{"name":"icl6404-w","aliases":["kds7372-w"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*","cnorm":"\u001b.3","civis":"\u001b.0","sgr0":"\u001b[0ZZ","smul":"\u001b[8ZZ","blink":"\u001b[2ZZ","rev":"\u001b[4ZZ","cup":"\u001b=%p1%' '%+%c%p2%'P'%m%' '%+%c%p2%'P'%\u003e%' '%+%c","cuu1":"\u000b","pad":"\u0000"} +{"name":"ifmr","cols":80,"lines":24,"clear":"\u001bZ","sgr0":"\u001bK","cup":"\u001bY%p2%' '%+%c%p1%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000"} +{"name":"ims-ansi","aliases":["ultima2","ultimaII"],"cols":80,"lines":24,"clear":"\u001b[H\u001b[2J","sgr0":"\u001b[m","smul":"\u001b[4m","cup":"\u001b[%i%p1%2d;%p2%2dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"ims950","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kich":"\u001bQ","kdch":"\u001bW","kcbt":"\u001bI","kclr":"\u001b*","acsc":"b\tc\u000cd\re\ni\u000b","smacs":"\u0015","rmacs":"\u0018"} +{"name":"ims950-b","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kich":"\u001bQ","kdch":"\u001bW","kcbt":"\u001bI","kclr":"\u001b*","acsc":"b\tc\u000cd\re\ni\u000b","smacs":"\u0015","rmacs":"\u0018"} +{"name":"ims950-rv","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kich":"\u001bQ","kdch":"\u001bW","kcbt":"\u001bI","kclr":"\u001b*","acsc":"b\tc\u000cd\re\ni\u000b","smacs":"\u0015","rmacs":"\u0018"} +{"name":"interix","aliases":["ntconsole","ntconsole-25","opennt","opennt-25"],"cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[2J","smcup":"\u001b[s\u001b[1b","rmcup":"\u001b[2b\u001b[u\r\u001b[K","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bF1","kf2":"\u001bF2","kf3":"\u001bF3","kf4":"\u001bF4","kf5":"\u001bF5","kf6":"\u001bF6","kf7":"\u001bF7","kf8":"\u001bF8","kf9":"\u001bF9","kf10":"\u001bFA","kf11":"\u001bFB","kf12":"\u001bFC","kf13":"\u001bFD","kf14":"\u001bFE","kf15":"\u001bFF","kf16":"\u001bFG","kf17":"\u001bFH","kf18":"\u001bFI","kf19":"\u001bFJ","kf20":"\u001bFK","kf21":"\u001bFL","kf22":"\u001bFM","kf23":"\u001bFN","kf24":"\u001bFO","kf25":"\u001bFP","kf26":"\u001bFQ","kf27":"\u001bFR","kf28":"\u001bFS","kf29":"\u001bFT","kf30":"\u001bFU","kf31":"\u001bFV","kf32":"\u001bFW","kf33":"\u001bFX","kf34":"\u001bFY","kf35":"\u001bFZ","kf36":"\u001bFa","kf37":"\u001bFb","kf38":"\u001bFc","kf39":"\u001bFd","kf40":"\u001bFe","kf41":"\u001bFf","kf42":"\u001bFg","kf43":"\u001bFh","kf44":"\u001bFi","kf45":"\u001bFj","kf46":"\u001bFk","kf47":"\u001bFm","kf48":"\u001bFn","kf49":"\u001bFo","kf50":"\u001bFp","kf51":"\u001bFq","kf52":"\u001bFr","kf53":"\u001bFs","kf54":"\u001bFt","kf55":"\u001bFu","kf56":"\u001bFv","kf57":"\u001bFw","kf58":"\u001bFx","kf59":"\u001bFy","kf60":"\u001bFz","kf61":"\u001bF+","kf62":"\u001bF-","kf63":"\u001bF\u000c kf64=\u001bF$","kich":"\u001b[L","kdch":"\u001b[M","kend":"\u001b[U","kpp":"\u001b[S","knp":"\u001b[T","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~q\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd.\u0019-\u0018,\u0011+\u00100\ufffdp\ufffdr\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"interix-nti","aliases":["ntconsole-25-nti","opennt-25-nti","opennt-nti"],"cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[2J","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bF1","kf2":"\u001bF2","kf3":"\u001bF3","kf4":"\u001bF4","kf5":"\u001bF5","kf6":"\u001bF6","kf7":"\u001bF7","kf8":"\u001bF8","kf9":"\u001bF9","kf10":"\u001bFA","kf11":"\u001bFB","kf12":"\u001bFC","kf13":"\u001bFD","kf14":"\u001bFE","kf15":"\u001bFF","kf16":"\u001bFG","kf17":"\u001bFH","kf18":"\u001bFI","kf19":"\u001bFJ","kf20":"\u001bFK","kf21":"\u001bFL","kf22":"\u001bFM","kf23":"\u001bFN","kf24":"\u001bFO","kf25":"\u001bFP","kf26":"\u001bFQ","kf27":"\u001bFR","kf28":"\u001bFS","kf29":"\u001bFT","kf30":"\u001bFU","kf31":"\u001bFV","kf32":"\u001bFW","kf33":"\u001bFX","kf34":"\u001bFY","kf35":"\u001bFZ","kf36":"\u001bFa","kf37":"\u001bFb","kf38":"\u001bFc","kf39":"\u001bFd","kf40":"\u001bFe","kf41":"\u001bFf","kf42":"\u001bFg","kf43":"\u001bFh","kf44":"\u001bFi","kf45":"\u001bFj","kf46":"\u001bFk","kf47":"\u001bFm","kf48":"\u001bFn","kf49":"\u001bFo","kf50":"\u001bFp","kf51":"\u001bFq","kf52":"\u001bFr","kf53":"\u001bFs","kf54":"\u001bFt","kf55":"\u001bFu","kf56":"\u001bFv","kf57":"\u001bFw","kf58":"\u001bFx","kf59":"\u001bFy","kf60":"\u001bFz","kf61":"\u001bF+","kf62":"\u001bF-","kf63":"\u001bF\u000c kf64=\u001bF$","kich":"\u001b[L","kdch":"\u001b[M","kend":"\u001b[U","kpp":"\u001b[S","knp":"\u001b[T","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~q\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd.\u0019-\u0018,\u0011+\u00100\ufffdp\ufffdr\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"intertube","aliases":["intertec"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u000c","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c$\u003c50\u003e","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000"} +{"name":"intertube2","cols":80,"lines":25,"bell":"\u0007","clear":"\u000c","cup":"\u000e%p1%c\u0010%p2%{10}%/%{16}%*%p2%{10}%m%+%c","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000"} +{"name":"intext","cols":80,"lines":24,"bell":"\u0007","clear":"\u000c$\u003c132\u003e","smkx":"\u001e:\ufffd\u0016%%","rmkx":"\u00169","cup":"\u000f%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001c","pad":"\u0000","kbs":"\u0008","kf1":"\u0016A\r","kf2":"\u0016B\r","kf3":"\u0016C\r","kf4":"\u0016D\r","kf5":"\u0016E\r","kf6":"\u0016F\r","kf7":"\u0016G\r","kf8":"\u0016H\r","kf9":"\u0016I\r","khome":"\u001a","kcuu1":"\u001c","kcud1":"\n","kcub1":"\u001f","kcuf1":"\u001e"} +{"name":"intext2","aliases":["intextii"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smul":"\u001b[18 D","cup":"\u001b[%i%p1%d;%p2%dH","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bP\r","kf2":"\u001bQ\r","kf3":"\u001bS\r","kf4":"\u001bT\r","kf5":"\u001bU\r","kf6":"\u001bV\r","kf7":"\u001bW\r","kf8":"\u001bX\r","kf9":"\u001bY\r","khome":"\u001bR\r","kcuu1":"\u001bA\r","kcud1":"\u001bB\r","kcub1":"\u001bD\r","kcuf1":"\u001bC\r"} +{"name":"iris-ansi","aliases":["iris-ansi-net"],"cols":80,"lines":40,"bell":"\u0007","clear":"\u001b[H\u001b[2J","cnorm":"\u001b[9/y\u001b[12/y\u001b[=6l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[001q","kf2":"\u001b[002q","kf3":"\u001b[003q","kf4":"\u001b[004q","kf5":"\u001b[005q","kf6":"\u001b[006q","kf7":"\u001b[007q","kf8":"\u001b[008q","kf9":"\u001b[009q","kf10":"\u001b[010q","kf11":"\u001b[011q","kf12":"\u001b[012q","kich":"\u001b[139q","kdch":"","khome":"\u001b[H","kend":"\u001b[146q","kpp":"\u001b[150q","knp":"\u001b[154q","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kprt":"\u001b[209q","kRIT":"\u001b[167q","kLFT":"\u001b[158q","kHOM":"\u001b[143q","kEND":"\u001b[147q"} +{"name":"iris-ansi-ap","cols":80,"lines":40,"bell":"\u0007","clear":"\u001b[H\u001b[2J","cnorm":"\u001b[9/y\u001b[12/y\u001b[=6l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[001q","kf2":"\u001b[002q","kf3":"\u001b[003q","kf4":"\u001b[004q","kf5":"\u001b[005q","kf6":"\u001b[006q","kf7":"\u001b[007q","kf8":"\u001b[008q","kf9":"\u001b[009q","kf10":"\u001b[010q","kf11":"\u001b[011q","kf12":"\u001b[012q","kich":"\u001b[139q","kdch":"","khome":"\u001b[H","kend":"\u001b[146q","kpp":"\u001b[150q","knp":"\u001b[154q","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kprt":"\u001b[209q","kRIT":"\u001b[167q","kLFT":"\u001b[158q","kHOM":"\u001b[143q","kEND":"\u001b[147q"} +{"name":"iris-color","aliases":["xwsh"],"cols":80,"lines":40,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","cnorm":"\u001b[9/y\u001b[12/y\u001b[=6l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","dim":"\u001b[2m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[001q","kf2":"\u001b[002q","kf3":"\u001b[003q","kf4":"\u001b[004q","kf5":"\u001b[005q","kf6":"\u001b[006q","kf7":"\u001b[007q","kf8":"\u001b[008q","kf9":"\u001b[009q","kf10":"\u001b[010q","kf11":"\u001b[011q","kf12":"\u001b[012q","kich":"\u001b[139q","kdch":"","khome":"\u001b[H","kend":"\u001b[146q","kpp":"\u001b[150q","knp":"\u001b[154q","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kprt":"\u001b[209q","kRIT":"\u001b[167q","kLFT":"\u001b[158q","kHOM":"\u001b[143q","kEND":"\u001b[147q","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"jaixterm","cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0;10m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[001q","kf2":"\u001b[002q","kf3":"\u001b[003q","kf4":"\u001b[004q","kf5":"\u001b[005q","kf6":"\u001b[006q","kf7":"\u001b[007q","kf8":"\u001b[008q","kf9":"\u001b[009q","kf10":"\u001b[010q","kf11":"\u001b[011q","kf12":"\u001b[012q","kf13":"\u001b[013q","kf14":"\u001b[014q","kf15":"\u001b[015q","kf16":"\u001b[016q","kf17":"\u001b[017q","kf18":"\u001b[018q","kf19":"\u001b[019q","kf20":"\u001b[020q","kf21":"\u001b[021q","kf22":"\u001b[022q","kf23":"\u001b[023q","kf24":"\u001b[024q","kf25":"\u001b[025q","kf26":"\u001b[026q","kf27":"\u001b[027q","kf28":"\u001b[028q","kf29":"\u001b[029q","kf30":"\u001b[030q","kf31":"\u001b[031q","kf32":"\u001b[032q","kf33":"\u001b[033q","kf34":"\u001b[034q","kf35":"\u001b[035q","kf36":"\u001b[036q","kich":"\u001b[139q","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[146q","kpp":"\u001b[150q","knp":"\u001b[154q","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[144q","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"jaixterm-m","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0;10m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[001q","kf2":"\u001b[002q","kf3":"\u001b[003q","kf4":"\u001b[004q","kf5":"\u001b[005q","kf6":"\u001b[006q","kf7":"\u001b[007q","kf8":"\u001b[008q","kf9":"\u001b[009q","kf10":"\u001b[010q","kf11":"\u001b[011q","kf12":"\u001b[012q","kf13":"\u001b[013q","kf14":"\u001b[014q","kf15":"\u001b[015q","kf16":"\u001b[016q","kf17":"\u001b[017q","kf18":"\u001b[018q","kf19":"\u001b[019q","kf20":"\u001b[020q","kf21":"\u001b[021q","kf22":"\u001b[022q","kf23":"\u001b[023q","kf24":"\u001b[024q","kf25":"\u001b[025q","kf26":"\u001b[026q","kf27":"\u001b[027q","kf28":"\u001b[028q","kf29":"\u001b[029q","kf30":"\u001b[030q","kf31":"\u001b[031q","kf32":"\u001b[032q","kf33":"\u001b[033q","kf34":"\u001b[034q","kf35":"\u001b[035q","kf36":"\u001b[036q","kich":"\u001b[139q","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[146q","kpp":"\u001b[150q","knp":"\u001b[154q","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[144q"} +{"name":"kaypro","aliases":["kaypro2"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001a$\u003c1/\u003e","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cuu1":"\u000b","pad":"\u0000","kcuu1":"\u000b","kcud1":"\n","kcuf1":"\u000c"} +{"name":"kermit","cols":80,"lines":24,"clear":"\u001bE","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"kermit-am","cols":80,"lines":24,"clear":"\u001bE","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"kon","aliases":["jfbterm","kon2"],"cols":-1,"lines":-1,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001b[[A","kf2":"\u001b[[B","kf3":"\u001b[[C","kf4":"\u001b[[D","kf5":"\u001b[[E","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdi\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"konsole","cols":80,"lines":24,"colors":8,"clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001bO2P","kf14":"\u001bO2Q","kf15":"\u001bO2R","kf16":"\u001bO2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001bO5P","kf26":"\u001bO5Q","kf27":"\u001bO5R","kf28":"\u001bO5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001bO6P","kf38":"\u001bO6Q","kf39":"\u001bO6R","kf40":"\u001bO6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kf49":"\u001bO3P","kf50":"\u001bO3Q","kf51":"\u001bO3R","kf52":"\u001bO3S","kf53":"\u001b[15;3~","kf54":"\u001b[17;3~","kf55":"\u001b[18;3~","kf56":"\u001b[19;3~","kf57":"\u001b[20;3~","kf58":"\u001b[21;3~","kf59":"\u001b[23;3~","kf60":"\u001b[24;3~","kf61":"\u001bO4P","kf62":"\u001bO4Q","kf63":"\u001bO4R","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"konsole-16color","cols":80,"lines":24,"colors":16,"clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%dm","setbg":"\u001b[%?%p1%{8}%\u003c%t%p1%'('%+%e%p1%{92}%+%;%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001bO2P","kf14":"\u001bO2Q","kf15":"\u001bO2R","kf16":"\u001bO2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001bO5P","kf26":"\u001bO5Q","kf27":"\u001bO5R","kf28":"\u001bO5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001bO6P","kf38":"\u001bO6Q","kf39":"\u001bO6R","kf40":"\u001bO6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kf49":"\u001bO3P","kf50":"\u001bO3Q","kf51":"\u001bO3R","kf52":"\u001bO3S","kf53":"\u001b[15;3~","kf54":"\u001b[17;3~","kf55":"\u001b[18;3~","kf56":"\u001b[19;3~","kf57":"\u001b[20;3~","kf58":"\u001b[21;3~","kf59":"\u001b[23;3~","kf60":"\u001b[24;3~","kf61":"\u001bO4P","kf62":"\u001bO4Q","kf63":"\u001bO4R","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%d;%?%p2%{8}%\u003c%t%p2%'('%+%e%p2%{92}%+%;%dm"} +{"name":"konsole-256color","cols":80,"lines":24,"colors":256,"clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[%?%p1%{8}%\u003c%t3%p1%d%e%p1%{16}%\u003c%t9%p1%{8}%-%d%e38;5;%p1%d%;m","setbg":"\u001b[%?%p1%{8}%\u003c%t4%p1%d%e%p1%{16}%\u003c%t10%p1%{8}%-%d%e48;5;%p1%d%;m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001bO2P","kf14":"\u001bO2Q","kf15":"\u001bO2R","kf16":"\u001bO2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001bO5P","kf26":"\u001bO5Q","kf27":"\u001bO5R","kf28":"\u001bO5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001bO6P","kf38":"\u001bO6Q","kf39":"\u001bO6R","kf40":"\u001bO6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kf49":"\u001bO3P","kf50":"\u001bO3Q","kf51":"\u001bO3R","kf52":"\u001bO3S","kf53":"\u001b[15;3~","kf54":"\u001b[17;3~","kf55":"\u001b[18;3~","kf56":"\u001b[19;3~","kf57":"\u001b[20;3~","kf58":"\u001b[21;3~","kf59":"\u001b[23;3~","kf60":"\u001b[24;3~","kf61":"\u001bO4P","kf62":"\u001bO4Q","kf63":"\u001bO4R","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t3%p1%d%e%p1%{16}%\u003c%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%\u003c%t4%p2%d%e%p2%{16}%\u003c%t10%p2%{8}%-%d%e48;5;%p2%d%;m"} +{"name":"konsole-base","cols":80,"lines":24,"colors":8,"clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"","kich":"\u001b[2~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"konsole-linux","cols":80,"lines":24,"colors":8,"clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"","kf1":"\u001b[[A","kf2":"\u001b[[B","kf3":"\u001b[[C","kf4":"\u001b[[D","kf5":"\u001b[[E","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"konsole-solaris","cols":80,"lines":24,"colors":8,"clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"konsole-vt100","cols":80,"lines":24,"colors":8,"clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"konsole-vt420pc","cols":80,"lines":24,"colors":8,"clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kich":"\u001b[2~","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"konsole-xf3x","cols":80,"lines":24,"colors":8,"clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"konsole-xf4x","cols":80,"lines":24,"colors":8,"clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001bO2P","kf14":"\u001bO2Q","kf15":"\u001bO2R","kf16":"\u001bO2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001bO5P","kf26":"\u001bO5Q","kf27":"\u001bO5R","kf28":"\u001bO5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001bO6P","kf38":"\u001bO6Q","kf39":"\u001bO6R","kf40":"\u001bO6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kf49":"\u001bO3P","kf50":"\u001bO3Q","kf51":"\u001bO3R","kf52":"\u001bO3S","kf53":"\u001b[15;3~","kf54":"\u001b[17;3~","kf55":"\u001b[18;3~","kf56":"\u001b[19;3~","kf57":"\u001b[20;3~","kf58":"\u001b[21;3~","kf59":"\u001b[23;3~","kf60":"\u001b[24;3~","kf61":"\u001bO4P","kf62":"\u001bO4Q","kf63":"\u001bO4R","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"kt7","cols":80,"lines":24,"clear":"\u001a","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kclr":"\u001a"} +{"name":"kt7ix","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b*","cnorm":"\u001b.3","civis":"\u001b.0","sgr0":"\u001bG0","smul":"\u001bG8","blink":"\u001bG2","dim":"\u001bG@","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kich":"\u001bQ","khome":"\u001e","kend":"\u001bY","knp":"\u001bJ","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001bI","kclr":"\u001b*","acsc":"jYk?lZm@nEqDt4uCvAwBx3","smacs":"\u001b$","rmacs":"\u001b%%"} +{"name":"kterm","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aajjkkllmmnnooppqqrrssttuuvvwwxx~~","smacs":"\u001b(0","rmacs":"\u001b(B","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"kterm-color","aliases":["kterm-co"],"cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aajjkkllmmnnooppqqrrssttuuvvwwxx~~","smacs":"\u001b(0","rmacs":"\u001b(B","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"kvt","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"lft","aliases":["LFT-PC850","lft-pc850"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[001q","kf2":"\u001b[002q","kf3":"\u001b[003q","kf4":"\u001b[004q","kf5":"\u001b[005q","kf6":"\u001b[006q","kf7":"\u001b[007q","kf8":"\u001b[008q","kf9":"\u001b[009q","kf10":"\u001b[010q","kf11":"\u001b[011q","kf12":"\u001b[012q","kf13":"\u001b[013q","kf14":"\u001b[014q","kf15":"\u001b[015q","kf16":"\u001b[016q","kf17":"\u001b[017q","kf18":"\u001b[018q","kf19":"\u001b[019q","kf20":"\u001b[020q","kf21":"\u001b[021q","kf22":"\u001b[022q","kf23":"\u001b[023q","kf24":"\u001b[024q","kf25":"\u001b[025q","kf26":"\u001b[026q","kf27":"\u001b[027q","kf28":"\u001b[028q","kf29":"\u001b[029q","kf30":"\u001b[030q","kf31":"\u001b[031q","kf32":"\u001b[032q","kf33":"\u001b[033q","kf34":"\u001b[034q","kf35":"\u001b[035q","kf36":"\u001b[036q","kich":"\u001b[139q","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[146q","kpp":"\u001b[150q","knp":"\u001b[154q","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kclr":"\u001b[144q","acsc":"j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffd","smacs":"\u001b(0","rmacs":"\u001b(B"} +{"name":"linux","cols":-1,"lines":-1,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h\u001b[?0c","civis":"\u001b[?25l\u001b[?1c","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001b[[A","kf2":"\u001b[[B","kf3":"\u001b[[C","kf4":"\u001b[[D","kf5":"\u001b[[E","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdi\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"linux-basic","cols":-1,"lines":-1,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001b[[A","kf2":"\u001b[[B","kf3":"\u001b[[C","kf4":"\u001b[[D","kf5":"\u001b[[E","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdi\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"linux-c","cols":-1,"lines":-1,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001b[[A","kf2":"\u001b[[B","kf3":"\u001b[[C","kf4":"\u001b[[D","kf5":"\u001b[[E","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdi\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"linux-c-nc","cols":-1,"lines":-1,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001b[[A","kf2":"\u001b[[B","kf3":"\u001b[[C","kf4":"\u001b[[D","kf5":"\u001b[[E","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdi\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"linux-koi8","cols":-1,"lines":-1,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h\u001b[?0c","civis":"\u001b[?25l\u001b[?1c","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001b[[A","kf2":"\u001b[[B","kf3":"\u001b[[C","kf4":"\u001b[[D","kf5":"\u001b[[E","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdi\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"linux-koi8r","cols":-1,"lines":-1,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h\u001b[?0c","civis":"\u001b[?25l\u001b[?1c","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001b[[A","kf2":"\u001b[[B","kf3":"\u001b[[C","kf4":"\u001b[[D","kf5":"\u001b[[E","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdi\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"linux-lat","cols":-1,"lines":-1,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h\u001b[?0c","civis":"\u001b[?25l\u001b[?1c","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001b[[A","kf2":"\u001b[[B","kf3":"\u001b[[C","kf4":"\u001b[[D","kf5":"\u001b[[E","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\u000bf\ufffdg\ufffdh\ufffdi\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"linux-m","cols":-1,"lines":-1,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h\u001b[?0c","civis":"\u001b[?25l\u001b[?1c","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001b[[A","kf2":"\u001b[[B","kf3":"\u001b[[C","kf4":"\u001b[[D","kf5":"\u001b[[E","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdi\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m"} +{"name":"linux-nic","cols":-1,"lines":-1,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h\u001b[?0c","civis":"\u001b[?25l\u001b[?1c","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001b[[A","kf2":"\u001b[[B","kf3":"\u001b[[C","kf4":"\u001b[[D","kf5":"\u001b[[E","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdi\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"linux-vt","cols":-1,"lines":-1,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h\u001b[?0c","civis":"\u001b[?25l\u001b[?1c","sgr0":"\u001b[0m\u001b(K\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001b[[A","kf2":"\u001b[[B","kf3":"\u001b[[C","kf4":"\u001b[[D","kf5":"\u001b[[E","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz~~","smacs":"\u001b(0","rmacs":"\u001b(K","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"linux2.6.26","cols":-1,"lines":-1,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h\u001b[?0c","civis":"\u001b[?25l\u001b[?1c","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001b[[A","kf2":"\u001b[[B","kf3":"\u001b[[C","kf4":"\u001b[[D","kf5":"\u001b[[E","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdi\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"lisa","cols":88,"lines":32,"clear":"\u000c","cnorm":"\u001b[5l","civis":"\u001b[5h","sgr0":"\u001b[m","smul":"\u001b[4m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"jdkclfmenbqattuvvuwsx`","smacs":"\u001b[11m","rmacs":"\u001b[10m"} +{"name":"lisaterm","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOQ","kf2":"\u001bOR","kf3":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"lisaterm-w","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOQ","kf2":"\u001bOR","kf3":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u001bOC"} +{"name":"liswb","cols":88,"lines":32,"clear":"\u000c","cnorm":"\u001b[5l","civis":"\u001b[5h","sgr0":"\u001b[m","smul":"\u001b[4m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"jdkclfmenbqattuvvuwsx`","smacs":"\u001b[11m","rmacs":"\u001b[10m"} +{"name":"luna","aliases":["luna68k"],"cols":88,"lines":46,"bell":"\u0007","clear":"\u001b[H\u001b[J","cup":"\u001b[%i%p1%d;%p2%dH","pad":"\u0000"} +{"name":"m2-nam","aliases":["minitel","minitel-2","minitel-2-nam"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[\u003c1l","civis":"\u001b[\u003c1h","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001bOq","kf2":"\u001bOr","kf3":"\u001bOs","kf4":"\u001bOt","kf5":"\u001bOu","kf6":"\u001bOv","kf7":"\u001bOw","kf8":"\u001bOx","kf9":"\u001bOy","kf10":"\u001bOp","kich":"\u001b[4h","kdch":"\u001b[P","khome":"\u001b[H","kpp":"\u001bOR","knp":"\u001bOn","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u001b[2J","acsc":"aaffggjjkkllmmnnooqqssttuuvvwwxx","smacs":"\u000e","rmacs":"\u000f"} +{"name":"mac","aliases":["macintosh"],"cols":88,"lines":32,"clear":"\u000c","cnorm":"\u001b[5l","civis":"\u001b[5h","sgr0":"\u001b[m","smul":"\u001b[4m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"jdkclfmenbqattuvvuwsx`","smacs":"\u001b[11m","rmacs":"\u001b[10m"} +{"name":"mac-w","aliases":["macterminal-w"],"cols":132,"lines":32,"clear":"\u000c","cnorm":"\u001b[5l","civis":"\u001b[5h","sgr0":"\u001b[m","smul":"\u001b[4m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"jdkclfmenbqattuvvuwsx`","smacs":"\u001b[11m","rmacs":"\u001b[10m"} +{"name":"mach","cols":80,"lines":25,"bell":"\u0007","clear":"\u001bc","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOT","kf6":"\u001bOU","kf7":"\u001bOV","kf8":"\u001bOW","kf9":"\u001bOX","kf10":"\u001bOY","kich":"\u001b[@","kdch":"\u001b[9","khome":"\u001b[H","kend":"\u001b[Y","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"mach-bold","cols":80,"lines":25,"bell":"\u0007","clear":"\u001bc","sgr0":"\u001b[0m","smul":"\u001b[1m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOT","kf6":"\u001bOU","kf7":"\u001bOV","kf8":"\u001bOW","kf9":"\u001bOX","kf10":"\u001bOY","kich":"\u001b[@","kdch":"\u001b[9","khome":"\u001b[H","kend":"\u001b[Y","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"mach-color","cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001bc","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOT","kf6":"\u001bOU","kf7":"\u001bOV","kf8":"\u001bOW","kf9":"\u001bOX","kf10":"\u001bOY","kich":"\u001b[@","kdch":"\u001b[9","khome":"\u001b[H","kend":"\u001b[Y","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"mai","aliases":["basic4"],"cols":82,"lines":25,"bell":"\u0007","clear":"\u001d\u001f","cnorm":"\u001b[?7h","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOT","kf6":"\u001bOU","kf7":"\u001bOV","kf8":"\u001bOW","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"masscomp","cols":80,"lines":24,"clear":"\u001b[2J","smul":"\u001bGu","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"masscomp1","cols":104,"lines":36,"clear":"\u001b[2J","smul":"\u001bGu","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"masscomp2","cols":64,"lines":21,"clear":"\u001b[2J","smul":"\u001bGu","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"memhp","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ$\u003c40\u003e","sgr0":"\u001b\u0026d@\u000f","smul":"\u001b\u0026dD","bold":"\u001b\u0026dF","blink":"\u001b\u0026dA","rev":"\u001b\u0026dB","dim":"\u001b\u0026dH","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p1%dr%p2%dC","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp","kf2":"\u001bq","kf3":"\u001br","kf4":"\u001bs","kf5":"\u001bt","kf6":"\u001bu","kf7":"\u001bv","kf8":"\u001bw","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001bi","kclr":"\u001bJ","acsc":"2[3@4\u003e5I9(:'JSKWLQMAO#P$Q;R!S\"T1U2V4W3X:Y+Z*dHjGkTlRmFn/q,t5u6v8w7x.","smacs":"\u000e","rmacs":"\u000f"} +{"name":"mgr","cols":-1,"lines":-1,"bell":"\u0007","clear":"\u000c","cnorm":"\u001bh","civis":"\u001b9h","sgr0":"\u001b0n","smul":"\u001b4n","bold":"\u001b2n","rev":"\u001b1n","cup":"\u001b%p2%d;%p1%dM","cub1":"\u0008","cuu1":"\u001bu","pad":"\u0000","kbs":"\u0008","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"mgr-linux","cols":-1,"lines":-1,"bell":"\u0007","clear":"\u000c","cnorm":"\u001bh","civis":"\u001b9h","sgr0":"\u001b0n","smul":"\u001b4n","bold":"\u001b2n","rev":"\u001b1n","cup":"\u001b%p2%d;%p1%dM","cub1":"\u0008","cuu1":"\u001bu","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[[A","kf2":"\u001b[[B","kf3":"\u001b[[C","kf4":"\u001b[[D","kf5":"\u001b[[E","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"mgr-sun","cols":-1,"lines":-1,"bell":"\u0007","clear":"\u000c","cnorm":"\u001bh","civis":"\u001b9h","sgr0":"\u001b0n","smul":"\u001b4n","bold":"\u001b2n","rev":"\u001b1n","cup":"\u001b%p2%d;%p1%dM","cub1":"\u0008","cuu1":"\u001bu","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[224z","kf2":"\u001b[225z","kf3":"\u001b[226z","kf4":"\u001b[227z","kf5":"\u001b[228z","kf6":"\u001b[229z","kf7":"\u001b[230z","kf8":"\u001b[231z","kf9":"\u001b[232z","kf10":"\u001b[233z","kf11":"\u001b[234z","kf12":"\u001b[235z","khome":"\u001b[214z","kend":"\u001b[220z","khlp":"\u001b[207z","kpp":"\u001b[216z","knp":"\u001b[222z","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"mgt","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1048h\u001b[?1047h","rmcup":"\u001b[?1047l\u001b[?1048l","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"microb","aliases":["microbee"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bE","sgr0":"\u001bd@","smul":"\u001bd`","cup":"\u001bF%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kf1":"\u001bp","kf2":"\u001bq","kf3":"\u001br","kf4":"\u001bs","kf5":"\u001bt","kf6":"\u001bu","kf7":"\u001bv","kf8":"\u001bw","kf9":"\u001bx","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"mime","aliases":["mime1","mime2","mimei","mimeii"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001d\u0003","cup":"\u0014%p1%{24}%+%c%p2%p2%?%' '%\u003e%t%'0'%+%;%'P'%+%c","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","kcuu1":"\u001a","kcud1":"\u000b","kcub1":"\u0008","kcuf1":"\u0018"} +{"name":"mime-fb","cols":80,"lines":24,"bell":"\u0007","clear":"\u001d\u0003","cup":"\u0014%p1%{24}%+%c%p2%p2%?%' '%\u003e%t%'0'%+%;%'P'%+%c","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","kcuu1":"\u001a","kcud1":"\u000b","kcub1":"\u0008","kcuf1":"\u0018"} +{"name":"mime-hb","cols":80,"lines":24,"bell":"\u0007","clear":"\u001d\u0003","cup":"\u0014%p1%{24}%+%c%p2%p2%?%' '%\u003e%t%'0'%+%;%'P'%+%c","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","kcuu1":"\u001a","kcud1":"\u000b","kcub1":"\u0008","kcuf1":"\u0018"} +{"name":"mime2a","aliases":["mime2a-v"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bL","smul":"\u001b4","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"mime2a-s","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bL","smul":"\u001b6","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bI","pad":"\u0000","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"mime314","aliases":["mm314"],"cols":80,"lines":24,"clear":"\u000c","cup":"\u0014%p1%c%p2%c","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","kcuu1":"\u001a","kcud1":"\u000b","kcub1":"\u0008","kcuf1":"\u0018"} +{"name":"mime3a","cols":80,"lines":24,"bell":"\u0007","clear":"\u001a$\u003c1/\u003e","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kcuu1":"\u001a","kcud1":"\u000b","kcub1":"\u0008","kcuf1":"\u0018"} +{"name":"mime3ax","aliases":["mime-3ax"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001a$\u003c1/\u003e","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kcuu1":"\u001a","kcud1":"\u000b","kcub1":"\u0008","kcuf1":"\u0018"} +{"name":"minitel1","cols":40,"lines":24,"bell":"\u0007","clear":"\u000c","cnorm":"\u0011","civis":"\u0014","sgr0":"\u001bI\u001b\\","blink":"\u001bH","rev":"\u001b]","cup":"\u001f%p1%'A'%+%c%p2%'A'%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","acsc":"+.,,./f0g1","enacs":"\u0019"} +{"name":"minitel1b","cols":40,"lines":24,"bell":"\u0007","clear":"\u000c","cnorm":"\u0011","civis":"\u0014","sgr0":"\u001bI\u001b\\","blink":"\u001bH","rev":"\u001b]","smkx":"\u001b;iYA\u001b;jYC","cup":"\u001f%p1%'A'%+%c%p2%'A'%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kich":"\u001b[4h","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u001b[2J","acsc":"+.,,./f0g1","enacs":"\u0019"} +{"name":"minitel1b-80","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J","cnorm":"\u001f@A\u0011\n","civis":"\u001f@A\u0014\n","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001bOq","kf2":"\u001bOr","kf3":"\u001bOs","kf4":"\u001bOt","kf5":"\u001bOu","kf6":"\u001bOv","kf7":"\u001bOw","kf8":"\u001bOx","kf9":"\u001bOy","kich":"\u001b[4h","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u001b[2J","acsc":"+.,,./f0g1","enacs":"\u0019"} +{"name":"minix","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[H\u001b[0J","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[V","kf2":"\u001b[U","kf3":"\u001b[T","kf4":"\u001b[S","kf5":"\u001b[G","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"minix-old","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[H\u001b[0J","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[V","kf2":"\u001b[U","kf3":"\u001b[T","kf4":"\u001b[S","kf5":"\u001b[G","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"minix-old-am","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[H\u001b[0J","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[V","kf2":"\u001b[U","kf3":"\u001b[T","kf4":"\u001b[S","kf5":"\u001b[G","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"mlterm","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[11;2~","kf14":"\u001b[12;2~","kf15":"\u001b[13;2~","kf16":"\u001b[14;2~","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001b[11;5~","kf26":"\u001b[12;5~","kf27":"\u001b[13;5~","kf28":"\u001b[14;5~","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001b[11;6~","kf38":"\u001b[12;6~","kf39":"\u001b[13;6~","kf40":"\u001b[14;6~","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kf49":"\u001b[11;3~","kf50":"\u001b[12;3~","kf51":"\u001b[13;3~","kf52":"\u001b[14;3~","kf53":"\u001b[15;3~","kf54":"\u001b[17;3~","kf55":"\u001b[18;3~","kf56":"\u001b[19;3~","kf57":"\u001b[20;3~","kf58":"\u001b[21;3~","kf59":"\u001b[23;3~","kf60":"\u001b[24;3~","kf61":"\u001b[11;4~","kf62":"\u001b[12;4~","kf63":"\u001b[13;4~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"00``aaffgghhjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","kRIT":"\u001bO1;2C","kLFT":"\u001bO1;2D","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"mm340","aliases":["mime340"],"cols":80,"lines":24,"clear":"\u001a$\u003c12/\u003e","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008"} +{"name":"modgraph","aliases":["mod24"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"modgraph2","cols":80,"lines":24,"clear":"\u001bH\u001bJ$\u003c50/\u003e","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c$\u003c5/\u003e","cub1":"\u0008","cuu1":"\u001bA$\u003c2/\u003e","pad":"\u0000"} +{"name":"modgraph48","aliases":["mod"],"cols":80,"lines":48,"bell":"\u0007","clear":"\u001b[;H\u001b[2J","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"mono-emx","cols":80,"lines":24,"clear":"\u001b[H\u001b[2J$\u003c50\u003e","sgr0":"\u001b[0m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\ufffd;","kf2":"\ufffd\u003c","kf3":"\ufffd=","kf4":"\ufffd\u003e","kf5":"\ufffd?","kf6":"\ufffd@","kf7":"\ufffdA","kf8":"\ufffdB","kf9":"\ufffdC","kich":"\ufffdR","khome":"\ufffdG","kpp":"\ufffdI","knp":"\ufffdQ","kcuu1":"\ufffdH","kcud1":"\ufffdP","kcub1":"\ufffdK","kcuf1":"\ufffdM"} +{"name":"mrxvt","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[11;2~","kf14":"\u001b[12;2~","kf15":"\u001b[13;2~","kf16":"\u001b[14;2~","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001b[11;5~","kf26":"\u001b[12;5~","kf27":"\u001b[13;5~","kf28":"\u001b[14;5~","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001b[11;6~","kf38":"\u001b[12;6~","kf39":"\u001b[13;6~","kf40":"\u001b[14;6~","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kf49":"\u001b[11;3~","kf50":"\u001b[12;3~","kf51":"\u001b[13;3~","kf52":"\u001b[14;3~","kf53":"\u001b[15;3~","kf54":"\u001b[17;3~","kf55":"\u001b[18;3~","kf56":"\u001b[19;3~","kf57":"\u001b[20;3~","kf58":"\u001b[21;3~","kf59":"\u001b[23;3~","kf60":"\u001b[24;3~","kf61":"\u001b[11;4~","kf62":"\u001b[12;4~","kf63":"\u001b[13;4~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[7~","kend":"\u001b[8~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","kRIT":"\u001b[1;2C","kLFT":"\u001b[1;2D","kHOM":"\u001b[7$","kEND":"\u001b[8$","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kscu1":"\u001b[1;2A","_kscud1":"\u001b[1;2B","_kccu1":"\u001b[1;5A","_kccud1":"\u001b[1;5B","_kccuf1":"\u001b[1;5C","_kccub1":"\u001b[1;5D","_kmcu1":"\u001b[1;9A","_kmcud1":"\u001b[1;9B","_kmcuf1":"\u001b[1;9C","_kmcub1":"\u001b[1;9D","_kacu1":"\u001b[1;3A","_kacud1":"\u001b[1;3B","_kacuf1":"\u001b[1;3C","_kacub1":"\u001b[1;3D","_kchome":"\u001b[7^","_kcend":"\u001b[8^","_kascu1":"\u001b[1;4A","_kascud1":"\u001b[1;4B","_kascub1":"\u001b[1;4D","_kascuf1":"\u001b[1;4C","_kmscu1":"\u001b[1;10A","_kmscud1":"\u001b[1;10B","_kmscub1":"\u001b[1;10D","_kmscuf1":"\u001b[1;10C","_kcscu1":"\u001b[1;6A","_kcscud1":"\u001b[1;6B","_kcscub1":"\u001b[1;6D","_kcscuf1":"\u001b[1;6C"} +{"name":"ms-vt-utf8","aliases":["vt-utf8"],"cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001b1","kf2":"\u001b2","kf3":"\u001b3","kf4":"\u001b4","kf5":"\u001b5","kf6":"\u001b6","kf7":"\u001b7","kf8":"\u001b8","kf9":"\u001b9","kf10":"\u001b0","kf11":"\u001b!","kf12":"\u001b@","kf13":"\u001b\u0013\u001b1","kf14":"\u001b\u0013\u001b2","kf15":"\u001b\u0013\u001b3","kf16":"\u001b\u0013\u001b4","kf17":"\u001b\u0013\u001b5","kf18":"\u001b\u0013\u001b6","kf19":"\u001b\u0013\u001b7","kf20":"\u001b\u0013\u001b8","kf21":"\u001b\u0013\u001b9","kf22":"\u001b\u0013\u001b0","kf23":"\u001b\u0013\u001b!","kf24":"\u001b\u0013\u001b@","kf25":"\u001b\u0003\u001b1","kf26":"\u001b\u0003\u001b2","kf27":"\u001b\u0003\u001b3","kf28":"\u001b\u0003\u001b4","kf29":"\u001b\u0003\u001b5","kf30":"\u001b\u0003\u001b6","kf31":"\u001b\u0003\u001b7","kf32":"\u001b\u0003\u001b8","kf33":"\u001b\u0003\u001b9","kf34":"\u001b\u0003\u001b0","kf35":"\u001b\u0003\u001b!","kf36":"\u001b\u0003\u001b@","kf37":"\u001b\u0001\u001b1","kf38":"\u001b\u0001\u001b2","kf39":"\u001b\u0001\u001b3","kf40":"\u001b\u0001\u001b4","kf41":"\u001b\u0001\u001b5","kf42":"\u001b\u0001\u001b6","kf43":"\u001b\u0001\u001b7","kf44":"\u001b\u0001\u001b8","kf45":"\u001b\u0001\u001b9","kf46":"\u001b\u0001\u001b0","kf47":"\u001b\u0001\u001b!","kf48":"\u001b\u0001\u001b@","kich":"\u001b+","kdch":"\u001b-","khome":"\u001bh","kend":"\u001bk","kpp":"\u001b?","knp":"\u001b/","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdi\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"ms-vt100","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdi\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"ms-vt100+","aliases":["vt100+"],"cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001b1","kf2":"\u001b2","kf3":"\u001b3","kf4":"\u001b4","kf5":"\u001b5","kf6":"\u001b6","kf7":"\u001b7","kf8":"\u001b8","kf9":"\u001b9","kf10":"\u001b0","kf11":"\u001b!","kf12":"\u001b@","kf13":"\u001b\u0013\u001b1","kf14":"\u001b\u0013\u001b2","kf15":"\u001b\u0013\u001b3","kf16":"\u001b\u0013\u001b4","kf17":"\u001b\u0013\u001b5","kf18":"\u001b\u0013\u001b6","kf19":"\u001b\u0013\u001b7","kf20":"\u001b\u0013\u001b8","kf21":"\u001b\u0013\u001b9","kf22":"\u001b\u0013\u001b0","kf23":"\u001b\u0013\u001b!","kf24":"\u001b\u0013\u001b@","kf25":"\u001b\u0003\u001b1","kf26":"\u001b\u0003\u001b2","kf27":"\u001b\u0003\u001b3","kf28":"\u001b\u0003\u001b4","kf29":"\u001b\u0003\u001b5","kf30":"\u001b\u0003\u001b6","kf31":"\u001b\u0003\u001b7","kf32":"\u001b\u0003\u001b8","kf33":"\u001b\u0003\u001b9","kf34":"\u001b\u0003\u001b0","kf35":"\u001b\u0003\u001b!","kf36":"\u001b\u0003\u001b@","kf37":"\u001b\u0001\u001b1","kf38":"\u001b\u0001\u001b2","kf39":"\u001b\u0001\u001b3","kf40":"\u001b\u0001\u001b4","kf41":"\u001b\u0001\u001b5","kf42":"\u001b\u0001\u001b6","kf43":"\u001b\u0001\u001b7","kf44":"\u001b\u0001\u001b8","kf45":"\u001b\u0001\u001b9","kf46":"\u001b\u0001\u001b0","kf47":"\u001b\u0001\u001b!","kf48":"\u001b\u0001\u001b@","kich":"\u001b+","kdch":"\u001b-","khome":"\u001bh","kend":"\u001bk","kpp":"\u001b?","knp":"\u001b/","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdi\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"ms-vt100-color","aliases":["vtnt"],"cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdi\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"msk227","aliases":["mskermit227"],"cols":80,"lines":24,"clear":"\u001bE","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"msk22714","aliases":["mskermit22714"],"cols":80,"lines":24,"clear":"\u001bE","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kf1":"\u001b1","kf2":"\u001b2","kf3":"\u001b3","kf4":"\u001b4","kf5":"\u001b5","kf6":"\u001b6","kf7":"\u001b7","kf8":"\u001b8","kf9":"\u001b9","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"msk227am","aliases":["mskermit227am"],"cols":80,"lines":24,"clear":"\u001bE","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"mt4520-rv","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[0V\u001b8","sgr0":"\u001b[m","smul":"\u001b[4m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"mt70","aliases":["mt-70"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001a","smcup":"\u001b\"2\u001bG0\u001b]","cnorm":"\u001b\"2","civis":"\u001b\"0","sgr0":"\u001bG0","smul":"\u001bG1","rev":"\u001bG4","dim":"\u001bG2","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c$\u003c1\u003e","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001`\r","kf12":"\u0001a\r","kf13":"\u0001b\r","kf14":"\u0001c\r","kf15":"\u0001d\r","kf16":"\u0001e\r","kf17":"\u0001f\r","kf18":"\u0001g\r","kf19":"\u0001h\r","kf20":"\u0001i\r","kdch":"","khome":"\u0001N\r","khlp":"\u0001O\r","kcuu1":"\u0001J\r","kcud1":"\u0001K\r","kcub1":"\u0001L\r","kcuf1":"\u0001M\r","kcbt":"\u0001\u001a\r","kclr":"\u0001n\r","acsc":"+z,{-x.yOi`|jGkFlEmDnHqJtLuKvNwMxI","smacs":"\u001b$","rmacs":"\u001b%%"} +{"name":"mterm","aliases":["mouse-sun"],"cols":-1,"lines":-1,"bell":"\u0007","clear":"\u000c","cup":"\u0006%p1%d.%p2%d.","cub1":"\u0008","cuu1":"\u0018","pad":"\u0000","kbs":"\u0008"} +{"name":"mterm-ansi","cols":-1,"lines":-1,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"mvterm","aliases":["vv100"],"cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"nansi.sys","aliases":["nansisys"],"cols":80,"lines":25,"colors":8,"clear":"\u001b[2J","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"nansi.sysk","aliases":["nansisysk"],"cols":80,"lines":25,"colors":8,"clear":"\u001b[2J","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[;71;30p\u001b[;72;11p\u001b[;73;27;21p\u001b[;77;12p\u001b[;80;10p\u001b[;81;27;4p\u001b[;82;27;27;105p\u001b[;83;127p","rmkx":"\u001b[;71;0;71p\u001b[;72;0;72p\u001b[;73;0;73p\u001b[;77;0;77p\u001b[;80;0;80p\u001b[;81;0;81p\u001b[;82;0;82p\u001b[;83;0;83p","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"ncr160vppp","cols":80,"lines":24,"bell":"\u0007","clear":"\u000c$\u003c40\u003e","cnorm":"\u001b`5","civis":"\u001b`0","sgr0":"\u001bG0\u001bH\u0003","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c$\u003c5\u003e","cub1":"\u0008$\u003c2\u003e","cuu1":"\u001a$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u00021\r","kf2":"\u00022\r","kf3":"\u00023\r","kf4":"\u00024\r","kf5":"\u00025\r","kf6":"\u00026\r","kf7":"\u00027\r","kf8":"\u00028\r","kf9":"\u00029\r","kf10":"\u0002:\r","kf11":"\u0002;\r","kf12":"\u0002\u003c\r","kf13":"\u0002=\r","kf14":"\u0002\u003e\r","kf15":"\u0002?\r","kf16":"\u0002@\r","kf17":"\u0002!\r","kf18":"\u0002\"\r","kf19":"\u0002#\r","kf20":"\u0002$\r","kf21":"\u0002%^M","kf22":"\u0002\u0026\r","kf23":"\u0002'\r","kf24":"\u0002(\r","kf25":"\u0002)\r","kf26":"\u0002*\r","kf27":"\u0002+\r","kf28":"\u0002,\r","kf29":"\u0002-\r","kf30":"\u0002.\r","kf31":"\u0002/\r","kf32":"\u00020\r","kich":"\u001bq","kdch":"\u001bW","khome":"\u0001","kend":"\u001bK","kpp":"\u001bJ","knp":"\u001bJ","kcuu1":"\u001a","kcud1":"\n","kcub1":"\u0015","kcuf1":"\u0006","kprt":"\u001bP","acsc":"07a?h;j5k3l2m1n8q:t4u9v=w0x6","smacs":"\u001bcB1\u001bH\u0002","rmacs":"\u001bcB0\u001bH\u0003","kRIT":"\u0006","kHOM":"\u0001","kEND":"\u001bk"} +{"name":"ncr160vpwpp","cols":132,"lines":24,"bell":"\u0007","clear":"\u000c$\u003c40\u003e","cnorm":"\u001b`5","civis":"\u001b`0","sgr0":"\u001bG0\u001bH\u0003","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC$\u003c30\u003e","cub1":"\u0008$\u003c2\u003e","cuu1":"\u001a$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u00021\r","kf2":"\u00022\r","kf3":"\u00023\r","kf4":"\u00024\r","kf5":"\u00025\r","kf6":"\u00026\r","kf7":"\u00027\r","kf8":"\u00028\r","kf9":"\u00029\r","kf10":"\u0002:\r","kf11":"\u0002;\r","kf12":"\u0002\u003c\r","kf13":"\u0002=\r","kf14":"\u0002\u003e\r","kf15":"\u0002?\r","kf16":"\u0002@\r","kf17":"\u0002!\r","kf18":"\u0002\"\r","kf19":"\u0002#\r","kf20":"\u0002$\r","kf21":"\u0002%^M","kf22":"\u0002\u0026\r","kf23":"\u0002'\r","kf24":"\u0002(\r","kf25":"\u0002)\r","kf26":"\u0002*\r","kf27":"\u0002+\r","kf28":"\u0002,\r","kf29":"\u0002-\r","kf30":"\u0002.\r","kf31":"\u0002/\r","kf32":"\u00020\r","kich":"\u001bq","kdch":"\u001bW","khome":"\u0001","kend":"\u001bK","kpp":"\u001bJ","knp":"\u001bJ","kcuu1":"\u001a","kcud1":"\n","kcub1":"\u0015","kcuf1":"\u0006","kprt":"\u001bP","acsc":"07a?h;j5k3l2m1n8q:t4u9v=w0x6","smacs":"\u001bcB1\u001bH\u0002","rmacs":"\u001bcB0\u001bH\u0003","kRIT":"\u0006","kHOM":"\u0001","kEND":"\u001bk"} +{"name":"ncr160vt100an","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c20\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f$\u003c20\u003e","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c10\u003e","cub1":"\u001b[D$\u003c5\u003e","cuu1":"\u001b[A$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kich":"\u001b[2~","kdch":"\u001b[3~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"ncr160vt100pp","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c20\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f$\u003c20\u003e","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c10\u003e","cub1":"\u001b[D$\u003c5\u003e","cuu1":"\u001b[A$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kich":"\u001b[1~","kdch":"\u001b[4~","khome":"\u001b[2~","kend":"\u001b[5~","khlp":"\u001b[28~","kpp":"\u001b[3~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"ncr160vt100wan","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c20\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f$\u003c20\u003e","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c30\u003e","cub1":"\u001b[D$\u003c5\u003e","cuu1":"\u001b[A$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kich":"\u001b[2~","kdch":"\u001b[3~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"ncr160vt100wpp","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c20\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f$\u003c20\u003e","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c30\u003e","cub1":"\u001b[D$\u003c5\u003e","cuu1":"\u001b[A$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kich":"\u001b[1~","kdch":"\u001b[4~","khome":"\u001b[2~","kend":"\u001b[5~","khlp":"\u001b[28~","kpp":"\u001b[3~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"ncr160vt200an","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c20\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f$\u003c20\u003e","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c10\u003e","cub1":"\u001b[D$\u003c5\u003e","cuu1":"\u001b[A$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[31~","kf22":"\u001b[32~","kf23":"\u001b[33~","kf24":"\u001b[34~","kf25":"\u001b[35~","kf26":"\u001b[1~","kf27":"\u001b[2~","kf28":"\u001b[3~","kf29":"\u001b[4~","kf30":"\u001b[5~","kf31":"\u001b[6~","kf32":"\u001b[7~","kf33":"\u001b[8~","kf34":"\u001b[9~","kf35":"\u001b[10~","kich":"\u001b[2~","kdch":"\u001b[3~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e$\u003c20\u003e","rmacs":"\u000f$\u003c20\u003e"} +{"name":"ncr160vt200pp","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c20\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f$\u003c20\u003e","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c10\u003e","cub1":"\u001b[D$\u003c5\u003e","cuu1":"\u001b[A$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[31~","kf22":"\u001b[32~","kf23":"\u001b[33~","kf24":"\u001b[34~","kf25":"\u001b[35~","kf26":"\u001b[1~","kf27":"\u001b[2~","kf28":"\u001b[3~","kf29":"\u001b[4~","kf30":"\u001b[5~","kf31":"\u001b[6~","kf32":"\u001b[7~","kf33":"\u001b[8~","kf34":"\u001b[9~","kf35":"\u001b[10~","kich":"\u001b[2~","kdch":"\u001b[4~","khome":"\u001b[H","kend":"\u001b[1~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e$\u003c20\u003e","rmacs":"\u000f$\u003c20\u003e"} +{"name":"ncr160vt200wan","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c20\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f$\u003c20\u003e","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c30\u003e","cub1":"\u001b[D$\u003c5\u003e","cuu1":"\u001b[A$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[31~","kf22":"\u001b[32~","kf23":"\u001b[33~","kf24":"\u001b[34~","kf25":"\u001b[35~","kf26":"\u001b[1~","kf27":"\u001b[2~","kf28":"\u001b[3~","kf29":"\u001b[4~","kf30":"\u001b[5~","kf31":"\u001b[6~","kf32":"\u001b[7~","kf33":"\u001b[8~","kf34":"\u001b[9~","kf35":"\u001b[10~","kich":"\u001b[2~","kdch":"\u001b[3~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e$\u003c20\u003e","rmacs":"\u000f$\u003c20\u003e"} +{"name":"ncr160vt200wpp","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c20\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f$\u003c20\u003e","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c30\u003e","cub1":"\u001b[D$\u003c5\u003e","cuu1":"\u001b[A$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[31~","kf22":"\u001b[32~","kf23":"\u001b[33~","kf24":"\u001b[34~","kf25":"\u001b[35~","kf26":"\u001b[1~","kf27":"\u001b[2~","kf28":"\u001b[3~","kf29":"\u001b[4~","kf30":"\u001b[5~","kf31":"\u001b[6~","kf32":"\u001b[7~","kf33":"\u001b[8~","kf34":"\u001b[9~","kf35":"\u001b[10~","kich":"\u001b[2~","kdch":"\u001b[4~","khome":"\u001b[H","kend":"\u001b[1~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e$\u003c20\u003e","rmacs":"\u000f$\u003c20\u003e"} +{"name":"ncr160vt300an","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c20\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f$\u003c20\u003e","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c10\u003e","cub1":"\u001b[D$\u003c5\u003e","cuu1":"\u001b[A$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[31~","kf22":"\u001b[32~","kf23":"\u001b[33~","kf24":"\u001b[34~","kf25":"\u001b[35~","kf26":"\u001b[1~","kf27":"\u001b[2~","kf28":"\u001b[3~","kf29":"\u001b[4~","kf30":"\u001b[5~","kf31":"\u001b[6~","kf32":"\u001b[7~","kf33":"\u001b[8~","kf34":"\u001b[9~","kf35":"\u001b[10~","kich":"\u001b[2~","kdch":"\u001b[3~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e$\u003c20\u003e","rmacs":"\u000f$\u003c20\u003e"} +{"name":"ncr160vt300pp","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c20\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f$\u003c20\u003e","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c10\u003e","cub1":"\u001b[D$\u003c5\u003e","cuu1":"\u001b[A$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[31~","kf22":"\u001b[32~","kf23":"\u001b[33~","kf24":"\u001b[34~","kf25":"\u001b[35~","kf26":"\u001b[1~","kf27":"\u001b[2~","kf28":"\u001b[3~","kf29":"\u001b[4~","kf30":"\u001b[5~","kf31":"\u001b[6~","kf32":"\u001b[7~","kf33":"\u001b[8~","kf34":"\u001b[9~","kf35":"\u001b[10~","kich":"\u001b[2~","kdch":"\u001b[4~","khome":"\u001b[H","kend":"\u001b[1~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e$\u003c20\u003e","rmacs":"\u000f$\u003c20\u003e"} +{"name":"ncr160vt300wan","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c20\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f$\u003c20\u003e","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c30\u003e","cub1":"\u001b[D$\u003c5\u003e","cuu1":"\u001b[A$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[31~","kf22":"\u001b[32~","kf23":"\u001b[33~","kf24":"\u001b[34~","kf25":"\u001b[35~","kf26":"\u001b[1~","kf27":"\u001b[2~","kf28":"\u001b[3~","kf29":"\u001b[4~","kf30":"\u001b[5~","kf31":"\u001b[6~","kf32":"\u001b[7~","kf33":"\u001b[8~","kf34":"\u001b[9~","kf35":"\u001b[10~","kich":"\u001b[2~","kdch":"\u001b[3~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e$\u003c20\u003e","rmacs":"\u000f$\u003c20\u003e"} +{"name":"ncr160vt300wpp","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c20\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f$\u003c20\u003e","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c30\u003e","cub1":"\u001b[D$\u003c5\u003e","cuu1":"\u001b[A$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[31~","kf22":"\u001b[32~","kf23":"\u001b[33~","kf24":"\u001b[34~","kf25":"\u001b[35~","kf26":"\u001b[1~","kf27":"\u001b[2~","kf28":"\u001b[3~","kf29":"\u001b[4~","kf30":"\u001b[5~","kf31":"\u001b[6~","kf32":"\u001b[7~","kf33":"\u001b[8~","kf34":"\u001b[9~","kf35":"\u001b[10~","kich":"\u001b[2~","kdch":"\u001b[4~","khome":"\u001b[H","kend":"\u001b[1~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e$\u003c20\u003e","rmacs":"\u000f$\u003c20\u003e"} +{"name":"ncr160wy50+pp","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b+$\u003c20\u003e","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001bG0\u001bH\u0003$\u003c15\u003e","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c$\u003c30\u003e","cub1":"\u0008$\u003c5\u003e","cuu1":"\u000b$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kf17":"\u0001`\r","kf18":"\u0001a\r","kf19":"\u0001b\r","kf20":"\u0001c\r","kf21":"\u0001d\r","kf22":"\u0001e\r","kf23":"\u0001f\r","kf24":"\u0001g\r","kf25":"\u0001h\r","kf26":"\u0001i\r","kf27":"\u0001j\r","kf28":"\u0001k\r","kf29":"\u0001l\r","kf30":"\u0001m\r","kf31":"\u0001n\r","kf32":"\u0001o\r","kich":"\u001bq","kdch":"\u001bW","khome":"\u001e","kend":"\u001bT","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"0wa_h[jukslrmqnxqzttuyv]wpxv","smacs":"\u001bH\u0002","rmacs":"\u001bH\u0003","kRIT":"\u000c","kHOM":"\u001b{","kEND":"\u001bY"} +{"name":"ncr160wy50+wpp","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b+$\u003c20\u003e","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001bG0\u001bH\u0003$\u003c15\u003e","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC$\u003c30\u003e","cub1":"\u0008$\u003c5\u003e","cuu1":"\u000b$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kf17":"\u0001`\r","kf18":"\u0001a\r","kf19":"\u0001b\r","kf20":"\u0001c\r","kf21":"\u0001d\r","kf22":"\u0001e\r","kf23":"\u0001f\r","kf24":"\u0001g\r","kf25":"\u0001h\r","kf26":"\u0001i\r","kf27":"\u0001j\r","kf28":"\u0001k\r","kf29":"\u0001l\r","kf30":"\u0001m\r","kf31":"\u0001n\r","kf32":"\u0001o\r","kich":"\u001bq","kdch":"\u001bW","khome":"\u001e","kend":"\u001bT","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"0wa_h[jukslrmqnxqzttuyv]wpxv","smacs":"\u001bH\u0002","rmacs":"\u001bH\u0003","kRIT":"\u000c","kHOM":"\u001b{","kEND":"\u001bY"} +{"name":"ncr160wy60pp","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*$\u003c100\u003e","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001bG0\u001bcB0\u001bcD$\u003c15\u003e","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c$\u003c10\u003e","cub1":"\u0008$\u003c5\u003e","cuu1":"\u000b$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kf17":"\u0001`\r","kf18":"\u0001a\r","kf19":"\u0001b\r","kf20":"\u0001c\r","kf21":"\u0001d\r","kf22":"\u0001e\r","kf23":"\u0001f\r","kf24":"\u0001g\r","kf25":"\u0001h\r","kf26":"\u0001i\r","kf27":"\u0001j\r","kf28":"\u0001k\r","kf29":"\u0001l\r","kf30":"\u0001m\r","kf31":"\u0001n\r","kf32":"\u0001o\r","kich":"\u001bq","kdch":"\u001bW","khome":"\u001e","kend":"\u001bT","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI$\u003c15\u003e","kprt":"\u001bP","acsc":"07a?h;j5k3l2m1n8q:t4u9v=w0x6","smacs":"\u001bH\u0002","rmacs":"\u001bH\u0003","kRIT":"\u000c","kHOM":"\u001b{","kEND":"\u001bY"} +{"name":"ncr160wy60wpp","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b*$\u003c100\u003e","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001bG0\u001bcB0\u001bcD$\u003c15\u003e","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","cup":"\u001ba%i%p1%dR%p2%dC$\u003c30\u003e","cub1":"\u0008$\u003c5\u003e","cuu1":"\u000b$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kf17":"\u0001`\r","kf18":"\u0001a\r","kf19":"\u0001b\r","kf20":"\u0001c\r","kf21":"\u0001d\r","kf22":"\u0001e\r","kf23":"\u0001f\r","kf24":"\u0001g\r","kf25":"\u0001h\r","kf26":"\u0001i\r","kf27":"\u0001j\r","kf28":"\u0001k\r","kf29":"\u0001l\r","kf30":"\u0001m\r","kf31":"\u0001n\r","kf32":"\u0001o\r","kich":"\u001bq","kdch":"\u001bW","khome":"\u001e","kend":"\u001bT","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI$\u003c15\u003e","kprt":"\u001bP","acsc":"07a?h;j5k3l2m1n8q:t4u9v=w0x6","smacs":"\u001bH\u0002","rmacs":"\u001bH\u0003","kRIT":"\u000c","kHOM":"\u001b{","kEND":"\u001bY"} +{"name":"ncr260intan","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c20\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f$\u003c20\u003e","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH$\u003c10\u003e","cub1":"\u001b[D$\u003c5\u003e","cuu1":"\u001b[A$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[31~","kf22":"\u001b[32~","kf23":"\u001b[33~","kf24":"\u001b[34~","kf25":"\u001b[35~","kf26":"\u001b[1~","kf27":"\u001b[2~","kf28":"\u001b[3~","kf29":"\u001b[4~","kf30":"\u001b[5~","kf31":"\u001b[6~","kf32":"\u001b[7~","kf33":"\u001b[8~","kf34":"\u001b[9~","kf35":"\u001b[10~","kich":"\u001b[2~","kdch":"\u001b[3~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e$\u003c20\u003e","rmacs":"\u000f$\u003c20\u003e","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"ncr260intpp","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c20\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f$\u003c20\u003e","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH$\u003c10\u003e","cub1":"\u001b[D$\u003c5\u003e","cuu1":"\u001b[A$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[31~","kf22":"\u001b[32~","kf23":"\u001b[33~","kf24":"\u001b[34~","kf25":"\u001b[35~","kf26":"\u001b[1~","kf27":"\u001b[2~","kf28":"\u001b[3~","kf29":"\u001b[4~","kf30":"\u001b[5~","kf31":"\u001b[6~","kf32":"\u001b[7~","kf33":"\u001b[8~","kf34":"\u001b[9~","kf35":"\u001b[10~","kich":"\u001b[2~","kdch":"\u001b[4~","khome":"\u001b[H","kend":"\u001b[1~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e$\u003c20\u003e","rmacs":"\u000f$\u003c20\u003e","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"ncr260intwan","cols":132,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c20\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f$\u003c20\u003e","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH$\u003c30\u003e","cub1":"\u001b[D$\u003c5\u003e","cuu1":"\u001b[A$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[31~","kf22":"\u001b[32~","kf23":"\u001b[33~","kf24":"\u001b[34~","kf25":"\u001b[35~","kf26":"\u001b[1~","kf27":"\u001b[2~","kf28":"\u001b[3~","kf29":"\u001b[4~","kf30":"\u001b[5~","kf31":"\u001b[6~","kf32":"\u001b[7~","kf33":"\u001b[8~","kf34":"\u001b[9~","kf35":"\u001b[10~","kich":"\u001b[2~","kdch":"\u001b[3~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e$\u003c20\u003e","rmacs":"\u000f$\u003c20\u003e","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"ncr260intwpp","cols":132,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c20\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f$\u003c20\u003e","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH$\u003c30\u003e","cub1":"\u001b[D$\u003c5\u003e","cuu1":"\u001b[A$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[31~","kf22":"\u001b[32~","kf23":"\u001b[33~","kf24":"\u001b[34~","kf25":"\u001b[35~","kf26":"\u001b[1~","kf27":"\u001b[2~","kf28":"\u001b[3~","kf29":"\u001b[4~","kf30":"\u001b[5~","kf31":"\u001b[6~","kf32":"\u001b[7~","kf33":"\u001b[8~","kf34":"\u001b[9~","kf35":"\u001b[10~","kich":"\u001b[2~","kdch":"\u001b[4~","khome":"\u001b[H","kend":"\u001b[1~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e$\u003c20\u003e","rmacs":"\u000f$\u003c20\u003e","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"ncr260vppp","cols":80,"lines":24,"bell":"\u0007","clear":"\u000c$\u003c40\u003e","cnorm":"\u001b`5","civis":"\u001b`0","sgr0":"\u001bG0\u001bH\u0003","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c$\u003c5\u003e","cub1":"\u0008$\u003c2\u003e","cuu1":"\u001a$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u00021\r","kf2":"\u00022\r","kf3":"\u00023\r","kf4":"\u00024\r","kf5":"\u00025\r","kf6":"\u00026\r","kf7":"\u00027\r","kf8":"\u00028\r","kf9":"\u00029\r","kf10":"\u0002:\r","kf11":"\u0002;\r","kf12":"\u0002\u003c\r","kf13":"\u0002=\r","kf14":"\u0002\u003e\r","kf15":"\u0002?\r","kf16":"\u0002@\r","kf17":"\u0002!\r","kf18":"\u0002\"\r","kf19":"\u0002#\r","kf20":"\u0002$\r","kf21":"\u0002%^M","kf22":"\u0002\u0026\r","kf23":"\u0002'\r","kf24":"\u0002(\r","kf25":"\u0002)\r","kf26":"\u0002*\r","kf27":"\u0002+\r","kf28":"\u0002,\r","kf29":"\u0002-\r","kf30":"\u0002.\r","kf31":"\u0002/\r","kf32":"\u00020\r","kich":"\u001bq","kdch":"\u001bW","khome":"\u0001","kend":"\u001bK","kpp":"\u001bJ","knp":"\u001bJ","kcuu1":"\u001a","kcud1":"\n","kcub1":"\u0015","kcuf1":"\u0006","kprt":"\u001bP","acsc":"07a?h;j5k3l2m1n8q:t4u9v=w0x6","smacs":"\u001bcB1\u001bH\u0002","rmacs":"\u001bcB0\u001bH\u0003","kRIT":"\u0006","kHOM":"\u0001","kEND":"\u001bk"} +{"name":"ncr260vpwpp","cols":132,"lines":24,"bell":"\u0007","clear":"\u000c$\u003c40\u003e","cnorm":"\u001b`5","civis":"\u001b`0","sgr0":"\u001bG0\u001bH\u0003","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC$\u003c30\u003e","cub1":"\u0008$\u003c2\u003e","cuu1":"\u001a$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u00021\r","kf2":"\u00022\r","kf3":"\u00023\r","kf4":"\u00024\r","kf5":"\u00025\r","kf6":"\u00026\r","kf7":"\u00027\r","kf8":"\u00028\r","kf9":"\u00029\r","kf10":"\u0002:\r","kf11":"\u0002;\r","kf12":"\u0002\u003c\r","kf13":"\u0002=\r","kf14":"\u0002\u003e\r","kf15":"\u0002?\r","kf16":"\u0002@\r","kf17":"\u0002!\r","kf18":"\u0002\"\r","kf19":"\u0002#\r","kf20":"\u0002$\r","kf21":"\u0002%^M","kf22":"\u0002\u0026\r","kf23":"\u0002'\r","kf24":"\u0002(\r","kf25":"\u0002)\r","kf26":"\u0002*\r","kf27":"\u0002+\r","kf28":"\u0002,\r","kf29":"\u0002-\r","kf30":"\u0002.\r","kf31":"\u0002/\r","kf32":"\u00020\r","kich":"\u001bq","kdch":"\u001bW","khome":"\u0001","kend":"\u001bK","kpp":"\u001bJ","knp":"\u001bJ","kcuu1":"\u001a","kcud1":"\n","kcub1":"\u0015","kcuf1":"\u0006","kprt":"\u001bP","acsc":"07a?h;j5k3l2m1n8q:t4u9v=w0x6","smacs":"\u001bcB1\u001bH\u0002","rmacs":"\u001bcB0\u001bH\u0003","kRIT":"\u0006","kHOM":"\u0001","kEND":"\u001bk"} +{"name":"ncr260vt100an","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c20\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f$\u003c20\u003e","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c10\u003e","cub1":"\u001b[D$\u003c5\u003e","cuu1":"\u001b[A$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kich":"\u001b[2~","kdch":"\u001b[3~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"ncr260vt100pp","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c20\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f$\u003c20\u003e","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c10\u003e","cub1":"\u001b[D$\u003c5\u003e","cuu1":"\u001b[A$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kich":"\u001b[1~","kdch":"\u001b[4~","khome":"\u001b[2~","kend":"\u001b[5~","khlp":"\u001b[28~","kpp":"\u001b[3~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"ncr260vt100wan","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c20\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f$\u003c20\u003e","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c30\u003e","cub1":"\u001b[D$\u003c5\u003e","cuu1":"\u001b[A$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kich":"\u001b[2~","kdch":"\u001b[3~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"ncr260vt100wpp","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c20\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f$\u003c20\u003e","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c30\u003e","cub1":"\u001b[D$\u003c5\u003e","cuu1":"\u001b[A$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kich":"\u001b[1~","kdch":"\u001b[4~","khome":"\u001b[2~","kend":"\u001b[5~","khlp":"\u001b[28~","kpp":"\u001b[3~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"ncr260vt200an","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c20\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f$\u003c20\u003e","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c10\u003e","cub1":"\u001b[D$\u003c5\u003e","cuu1":"\u001b[A$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[31~","kf22":"\u001b[32~","kf23":"\u001b[33~","kf24":"\u001b[34~","kf25":"\u001b[35~","kf26":"\u001b[1~","kf27":"\u001b[2~","kf28":"\u001b[3~","kf29":"\u001b[4~","kf30":"\u001b[5~","kf31":"\u001b[6~","kf32":"\u001b[7~","kf33":"\u001b[8~","kf34":"\u001b[9~","kf35":"\u001b[10~","kich":"\u001b[2~","kdch":"\u001b[3~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e$\u003c20\u003e","rmacs":"\u000f$\u003c20\u003e"} +{"name":"ncr260vt200pp","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c20\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f$\u003c20\u003e","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c10\u003e","cub1":"\u001b[D$\u003c5\u003e","cuu1":"\u001b[A$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[31~","kf22":"\u001b[32~","kf23":"\u001b[33~","kf24":"\u001b[34~","kf25":"\u001b[35~","kf26":"\u001b[1~","kf27":"\u001b[2~","kf28":"\u001b[3~","kf29":"\u001b[4~","kf30":"\u001b[5~","kf31":"\u001b[6~","kf32":"\u001b[7~","kf33":"\u001b[8~","kf34":"\u001b[9~","kf35":"\u001b[10~","kich":"\u001b[2~","kdch":"\u001b[4~","khome":"\u001b[H","kend":"\u001b[1~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e$\u003c20\u003e","rmacs":"\u000f$\u003c20\u003e"} +{"name":"ncr260vt200wan","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c20\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f$\u003c20\u003e","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c30\u003e","cub1":"\u001b[D$\u003c5\u003e","cuu1":"\u001b[A$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[31~","kf22":"\u001b[32~","kf23":"\u001b[33~","kf24":"\u001b[34~","kf25":"\u001b[35~","kf26":"\u001b[1~","kf27":"\u001b[2~","kf28":"\u001b[3~","kf29":"\u001b[4~","kf30":"\u001b[5~","kf31":"\u001b[6~","kf32":"\u001b[7~","kf33":"\u001b[8~","kf34":"\u001b[9~","kf35":"\u001b[10~","kich":"\u001b[2~","kdch":"\u001b[3~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e$\u003c20\u003e","rmacs":"\u000f$\u003c20\u003e"} +{"name":"ncr260vt200wpp","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c20\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f$\u003c20\u003e","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c30\u003e","cub1":"\u001b[D$\u003c5\u003e","cuu1":"\u001b[A$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[31~","kf22":"\u001b[32~","kf23":"\u001b[33~","kf24":"\u001b[34~","kf25":"\u001b[35~","kf26":"\u001b[1~","kf27":"\u001b[2~","kf28":"\u001b[3~","kf29":"\u001b[4~","kf30":"\u001b[5~","kf31":"\u001b[6~","kf32":"\u001b[7~","kf33":"\u001b[8~","kf34":"\u001b[9~","kf35":"\u001b[10~","kich":"\u001b[2~","kdch":"\u001b[4~","khome":"\u001b[H","kend":"\u001b[1~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e$\u003c20\u003e","rmacs":"\u000f$\u003c20\u003e"} +{"name":"ncr260vt300an","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c20\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f$\u003c20\u003e","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c10\u003e","cub1":"\u001b[D$\u003c5\u003e","cuu1":"\u001b[A$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[31~","kf22":"\u001b[32~","kf23":"\u001b[33~","kf24":"\u001b[34~","kf25":"\u001b[35~","kf26":"\u001b[1~","kf27":"\u001b[2~","kf28":"\u001b[3~","kf29":"\u001b[4~","kf30":"\u001b[5~","kf31":"\u001b[6~","kf32":"\u001b[7~","kf33":"\u001b[8~","kf34":"\u001b[9~","kf35":"\u001b[10~","kich":"\u001b[2~","kdch":"\u001b[3~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e$\u003c20\u003e","rmacs":"\u000f$\u003c20\u003e"} +{"name":"ncr260vt300pp","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c20\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f$\u003c20\u003e","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c10\u003e","cub1":"\u001b[D$\u003c5\u003e","cuu1":"\u001b[A$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[31~","kf22":"\u001b[32~","kf23":"\u001b[33~","kf24":"\u001b[34~","kf25":"\u001b[35~","kf26":"\u001b[1~","kf27":"\u001b[2~","kf28":"\u001b[3~","kf29":"\u001b[4~","kf30":"\u001b[5~","kf31":"\u001b[6~","kf32":"\u001b[7~","kf33":"\u001b[8~","kf34":"\u001b[9~","kf35":"\u001b[10~","kich":"\u001b[2~","kdch":"\u001b[4~","khome":"\u001b[H","kend":"\u001b[1~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e$\u003c20\u003e","rmacs":"\u000f$\u003c20\u003e"} +{"name":"ncr260vt300wan","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c20\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f$\u003c20\u003e","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c30\u003e","cub1":"\u001b[D$\u003c5\u003e","cuu1":"\u001b[A$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[31~","kf22":"\u001b[32~","kf23":"\u001b[33~","kf24":"\u001b[34~","kf25":"\u001b[35~","kf26":"\u001b[1~","kf27":"\u001b[2~","kf28":"\u001b[3~","kf29":"\u001b[4~","kf30":"\u001b[5~","kf31":"\u001b[6~","kf32":"\u001b[7~","kf33":"\u001b[8~","kf34":"\u001b[9~","kf35":"\u001b[10~","kich":"\u001b[2~","kdch":"\u001b[3~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u000e$\u003c20\u003e","rmacs":"\u000f$\u003c20\u003e"} +{"name":"ncr260wy325pp","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*$\u003c10\u003e","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001bG0\u001bcB0\u001bcD$\u003c15\u003e","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c$\u003c10\u003e","cub1":"\u0008$\u003c5\u003e","cuu1":"\u000b$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kf17":"\u0001`\r","kf18":"\u0001a\r","kf19":"\u0001b\r","kf20":"\u0001c\r","kf21":"\u0001d\r","kf22":"\u0001e\r","kf23":"\u0001f\r","kf24":"\u0001g\r","kf25":"\u0001h\r","kf26":"\u0001i\r","kf27":"\u0001j\r","kf28":"\u0001k\r","kf29":"\u0001l\r","kf30":"\u0001m\r","kf31":"\u0001n\r","kf32":"\u0001o\r","kich":"\u001bq","kdch":"\u001bW","khome":"\u001e","kend":"\u001bT","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"07a?h;j5k3l2m1n8q:t4u9v=w0x6","smacs":"\u001bH\u0002\u001bcB1","rmacs":"\u001bH\u0003\u001bcB0","kRIT":"\u000c","kHOM":"\u001b{","kEND":"\u001bY"} +{"name":"ncr260wy325wpp","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b*$\u003c10\u003e","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001bG0\u001bcB0\u001bcD$\u003c15\u003e","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","cup":"\u001ba%i%p1%dR%p2%dC$\u003c30\u003e","cub1":"\u0008$\u003c5\u003e","cuu1":"\u000b$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kf17":"\u0001`\r","kf18":"\u0001a\r","kf19":"\u0001b\r","kf20":"\u0001c\r","kf21":"\u0001d\r","kf22":"\u0001e\r","kf23":"\u0001f\r","kf24":"\u0001g\r","kf25":"\u0001h\r","kf26":"\u0001i\r","kf27":"\u0001j\r","kf28":"\u0001k\r","kf29":"\u0001l\r","kf30":"\u0001m\r","kf31":"\u0001n\r","kf32":"\u0001o\r","kich":"\u001bq","kdch":"\u001bW","khome":"\u001e","kend":"\u001bT","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"07a?h;j5k3l2m1n8q:t4u9v=w0x6","smacs":"\u001bH\u0002\u001bcB1","rmacs":"\u001bH\u0003\u001bcB0","kRIT":"\u000c","kHOM":"\u001b{","kEND":"\u001bY"} +{"name":"ncr260wy350pp","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b+$\u003c20\u003e","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001bG0\u001bH\u0003\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c$\u003c40\u003e","cub1":"\u0008$\u003c5\u003e","cuu1":"\u000b$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kf17":"\u0001`\r","kf18":"\u0001a\r","kf19":"\u0001b\r","kf20":"\u0001c\r","kf21":"\u0001d\r","kf22":"\u0001e\r","kf23":"\u0001f\r","kf24":"\u0001g\r","kf25":"\u0001h\r","kf26":"\u0001i\r","kf27":"\u0001j\r","kf28":"\u0001k\r","kf29":"\u0001l\r","kf30":"\u0001m\r","kf31":"\u0001n\r","kf32":"\u0001o\r","kich":"\u001bq","kdch":"\u001bW","khome":"\u001e","kend":"\u001bT","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"07a?h;j5k3l2m1n8q:t4u9v=w0x6","smacs":"\u001bH\u0002\u001bcB1","rmacs":"\u001bH\u0003\u001bcB0","kRIT":"\u000c","kHOM":"\u001b{","kEND":"\u001bY"} +{"name":"ncr260wy350wpp","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b+$\u003c20\u003e","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001bG0\u001bH\u0003\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC$\u003c30\u003e","cub1":"\u0008$\u003c5\u003e","cuu1":"\u000b$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kf17":"\u0001`\r","kf18":"\u0001a\r","kf19":"\u0001b\r","kf20":"\u0001c\r","kf21":"\u0001d\r","kf22":"\u0001e\r","kf23":"\u0001f\r","kf24":"\u0001g\r","kf25":"\u0001h\r","kf26":"\u0001i\r","kf27":"\u0001j\r","kf28":"\u0001k\r","kf29":"\u0001l\r","kf30":"\u0001m\r","kf31":"\u0001n\r","kf32":"\u0001o\r","kich":"\u001bq","kdch":"\u001bW","khome":"\u001e","kend":"\u001bT","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"07a?h;j5k3l2m1n8q:t4u9v=w0x6","smacs":"\u001bH\u0002\u001bcB1","rmacs":"\u001bH\u0003\u001bcB0","kRIT":"\u000c","kHOM":"\u001b{","kEND":"\u001bY"} +{"name":"ncr260wy50+pp","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b+$\u003c20\u003e","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001bG0\u001bH\u0003$\u003c15\u003e","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c$\u003c30\u003e","cub1":"\u0008$\u003c5\u003e","cuu1":"\u000b$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kf17":"\u0001`\r","kf18":"\u0001a\r","kf19":"\u0001b\r","kf20":"\u0001c\r","kf21":"\u0001d\r","kf22":"\u0001e\r","kf23":"\u0001f\r","kf24":"\u0001g\r","kf25":"\u0001h\r","kf26":"\u0001i\r","kf27":"\u0001j\r","kf28":"\u0001k\r","kf29":"\u0001l\r","kf30":"\u0001m\r","kf31":"\u0001n\r","kf32":"\u0001o\r","kich":"\u001bq","kdch":"\u001bW","khome":"\u001e","kend":"\u001bT","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"0wa_h[jukslrmqnxqzttuyv]wpxv","smacs":"\u001bH\u0002","rmacs":"\u001bH\u0003","kRIT":"\u000c","kHOM":"\u001b{","kEND":"\u001bY"} +{"name":"ncr260wy50+wpp","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b+$\u003c20\u003e","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001bG0\u001bH\u0003$\u003c15\u003e","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC$\u003c30\u003e","cub1":"\u0008$\u003c5\u003e","cuu1":"\u000b$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kf17":"\u0001`\r","kf18":"\u0001a\r","kf19":"\u0001b\r","kf20":"\u0001c\r","kf21":"\u0001d\r","kf22":"\u0001e\r","kf23":"\u0001f\r","kf24":"\u0001g\r","kf25":"\u0001h\r","kf26":"\u0001i\r","kf27":"\u0001j\r","kf28":"\u0001k\r","kf29":"\u0001l\r","kf30":"\u0001m\r","kf31":"\u0001n\r","kf32":"\u0001o\r","kich":"\u001bq","kdch":"\u001bW","khome":"\u001e","kend":"\u001bT","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"0wa_h[jukslrmqnxqzttuyv]wpxv","smacs":"\u001bH\u0002","rmacs":"\u001bH\u0003","kRIT":"\u000c","kHOM":"\u001b{","kEND":"\u001bY"} +{"name":"ncr260wy60pp","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*$\u003c100\u003e","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001bG0\u001bcB0\u001bcD$\u003c15\u003e","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c$\u003c10\u003e","cub1":"\u0008$\u003c5\u003e","cuu1":"\u000b$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kf17":"\u0001`\r","kf18":"\u0001a\r","kf19":"\u0001b\r","kf20":"\u0001c\r","kf21":"\u0001d\r","kf22":"\u0001e\r","kf23":"\u0001f\r","kf24":"\u0001g\r","kf25":"\u0001h\r","kf26":"\u0001i\r","kf27":"\u0001j\r","kf28":"\u0001k\r","kf29":"\u0001l\r","kf30":"\u0001m\r","kf31":"\u0001n\r","kf32":"\u0001o\r","kich":"\u001bq","kdch":"\u001bW","khome":"\u001e","kend":"\u001bT","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI$\u003c15\u003e","kprt":"\u001bP","acsc":"07a?h;j5k3l2m1n8q:t4u9v=w0x6","smacs":"\u001bH\u0002","rmacs":"\u001bH\u0003","kRIT":"\u000c","kHOM":"\u001b{","kEND":"\u001bY"} +{"name":"ncr260wy60wpp","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b*$\u003c100\u003e","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001bG0\u001bcB0\u001bcD$\u003c15\u003e","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","cup":"\u001ba%i%p1%dR%p2%dC$\u003c30\u003e","cub1":"\u0008$\u003c5\u003e","cuu1":"\u000b$\u003c5\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kf17":"\u0001`\r","kf18":"\u0001a\r","kf19":"\u0001b\r","kf20":"\u0001c\r","kf21":"\u0001d\r","kf22":"\u0001e\r","kf23":"\u0001f\r","kf24":"\u0001g\r","kf25":"\u0001h\r","kf26":"\u0001i\r","kf27":"\u0001j\r","kf28":"\u0001k\r","kf29":"\u0001l\r","kf30":"\u0001m\r","kf31":"\u0001n\r","kf32":"\u0001o\r","kich":"\u001bq","kdch":"\u001bW","khome":"\u001e","kend":"\u001bT","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI$\u003c15\u003e","kprt":"\u001bP","acsc":"07a?h;j5k3l2m1n8q:t4u9v=w0x6","smacs":"\u001bH\u0002","rmacs":"\u001bH\u0003","kRIT":"\u000c","kHOM":"\u001b{","kEND":"\u001bY"} +{"name":"ncr7900i","aliases":["ncr7900"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","sgr0":"\u001b0@","smul":"\u001b0`","blink":"\u001b0B","rev":"\u001b0P","dim":"\u001b0A","cup":"\u001b1%p2%c%p1%c","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","khome":"\u0001","kcuu1":"\u001a","kcud1":"\n","kcub1":"\u0015","kcuf1":"\u0006"} +{"name":"ncr7900iv","cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","cup":"\u000b%p1%'@'%+%c\u001b\u0005%p2%02d","cub1":"\u0008","pad":"\u0000","kbs":"\u0008","kf1":"\u001bS","kf2":"\u001bT","kf3":"\u001bU","kf4":"\u001bV","kf5":"\u001bW","kf6":"\u001bP","kf7":"\u001bQ","kf8":"\u001bR","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"ncr7901","cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","cnorm":"\u0018","civis":"\u0017","sgr0":"\u000f","smul":"\u001b0`\u000e","blink":"\u001b0B","rev":"\u001b0P","dim":"\u001b0A","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","khome":"\u0008","kcuu1":"\u001a","kcud1":"\n","kcub1":"\u0015","kcuf1":"\u0006","kclr":"\u000c"} +{"name":"ncrvt100an","aliases":["ncrvt100pp"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c300\u003e","sgr0":"\u000f\u001b[0m$\u003c120\u003e","smul":"\u001b[4m$\u003c30\u003e","bold":"\u001b[1m$\u003c30\u003e","blink":"\u001b[5m$\u003c30\u003e","rev":"\u001b[7m$\u003c30\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c100\u003e","cub1":"\u001b[D$\u003c2\u003e","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffgghhiijjkkllmmnnqqttuuvvwwxxyyzz~~","smacs":"\u000e$\u003c90\u003e","rmacs":"\u000f$\u003c90\u003e","enacs":"\u001b(B\u001b)0$\u003c40\u003e","kRIT":"\u001b[C","kLFT":"\u001b[D"} +{"name":"ncrvt100wan","aliases":["NCRVT100WPP","ncrvt100wpp"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[1;1H$\u003c300\u003e","sgr0":"\u000f\u001b[0m$\u003c120\u003e","smul":"\u001b[4m$\u003c30\u003e","bold":"\u001b[1m$\u003c30\u003e","blink":"\u001b[5m$\u003c30\u003e","rev":"\u001b[7m$\u003c30\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c100\u003e","cub1":"\u001b[D$\u003c2\u003e","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffgghhiijjkkllmmnnqqttuuvvwwxxyyzz~~","smacs":"\u000e$\u003c90\u003e","rmacs":"\u000f$\u003c90\u003e","enacs":"\u001b(B\u001b)0$\u003c40\u003e","kRIT":"\u001b[C","kLFT":"\u001b[D"} +{"name":"ncsa","cols":-1,"lines":-1,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7","rmcup":"\u001b[2J\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[17~","kf2":"\u001b[18","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kf9":"\u001b[26~","kf10":"\u001b[28~","kf11":"\u001b[29~","kf12":"\u001b[31~","kf13":"\u001b[32~","kf14":"\u001b[33~","kf15":"\u001b[34~","kdch":"\u001b[4~","khome":"\u001b[2~","kend":"\u001b[5~","khlp":"\u001b[1~","kpp":"\u001b[3~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","enacs":"\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"ncsa-m","aliases":["ncsa-vt220-8"],"cols":-1,"lines":-1,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7","rmcup":"\u001b[2J\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[17~","kf2":"\u001b[18","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kf9":"\u001b[26~","kf10":"\u001b[28~","kf11":"\u001b[29~","kf12":"\u001b[31~","kf13":"\u001b[32~","kf14":"\u001b[33~","kf15":"\u001b[34~","kdch":"\u001b[4~","khome":"\u001b[2~","kend":"\u001b[5~","khlp":"\u001b[1~","kpp":"\u001b[3~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","enacs":"\u001b)0"} +{"name":"ncsa-m-ns","cols":-1,"lines":-1,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7","rmcup":"\u001b[2J\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[17~","kf2":"\u001b[18","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kf9":"\u001b[26~","kf10":"\u001b[28~","kf11":"\u001b[29~","kf12":"\u001b[31~","kf13":"\u001b[32~","kf14":"\u001b[33~","kf15":"\u001b[34~","kdch":"\u001b[4~","khome":"\u001b[2~","kend":"\u001b[5~","khlp":"\u001b[1~","kpp":"\u001b[3~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","enacs":"\u001b)0"} +{"name":"ncsa-ns","cols":-1,"lines":-1,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7","rmcup":"\u001b[2J\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[17~","kf2":"\u001b[18","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kf9":"\u001b[26~","kf10":"\u001b[28~","kf11":"\u001b[29~","kf12":"\u001b[31~","kf13":"\u001b[32~","kf14":"\u001b[33~","kf15":"\u001b[34~","kdch":"\u001b[4~","khome":"\u001b[2~","kend":"\u001b[5~","khlp":"\u001b[1~","kpp":"\u001b[3~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","enacs":"\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"ncsa-vt220","cols":-1,"lines":-1,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7","rmcup":"\u001b[2J\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[21~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kdch":"\u001b[4~","khome":"\u001b[2~","kend":"\u001b[5~","khlp":"\u001b[1~","kpp":"\u001b[3~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","enacs":"\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"ndr9500","aliases":["nd9500"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b;","cnorm":"\u001b.1","civis":"\u001b.0","sgr0":"\u001bG0\u001b%%\u001b(","dim":"\u001b)","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001`\r","kf13":"\u0001a\r","kf14":"\u0001b\r","kf15":"\u0001c\r","kf16":"\u0001d\r","kf17":"\u0001e\r","kf18":"\u0001f\r","kf19":"\u0001g\r","kf20":"\u0001h\r","kf21":"\u0001i\r","kf22":"\u0001j\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kclr":"\u001a","kprt":"\u001bP","acsc":"qKnImAjDwNuLtMvOlBkCxJ","smacs":"\u001b$","rmacs":"\u001b%%"} +{"name":"ndr9500-25","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b;","cnorm":"\u001b.1","civis":"\u001b.0","sgr0":"\u001bG0\u001b%%\u001b(","dim":"\u001b)","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001`\r","kf13":"\u0001a\r","kf14":"\u0001b\r","kf15":"\u0001c\r","kf16":"\u0001d\r","kf17":"\u0001e\r","kf18":"\u0001f\r","kf19":"\u0001g\r","kf20":"\u0001h\r","kf21":"\u0001i\r","kf22":"\u0001j\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kclr":"\u001a","kprt":"\u001bP","acsc":"qKnImAjDwNuLtMvOlBkCxJ","smacs":"\u001b$","rmacs":"\u001b%%"} +{"name":"ndr9500-25-mc","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b;","cnorm":"\u001b.1","civis":"\u001b.0","sgr0":"\u001bG0\u001b%%\u001b(","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001b)","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001`\r","kf13":"\u0001a\r","kf14":"\u0001b\r","kf15":"\u0001c\r","kf16":"\u0001d\r","kf17":"\u0001e\r","kf18":"\u0001f\r","kf19":"\u0001g\r","kf20":"\u0001h\r","kf21":"\u0001i\r","kf22":"\u0001j\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kclr":"\u001a","kprt":"\u001bP","acsc":"qKnImAjDwNuLtMvOlBkCxJ","smacs":"\u001b$","rmacs":"\u001b%%"} +{"name":"ndr9500-25-mc-nl","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b;","cnorm":"\u001b.1","civis":"\u001b.0","sgr0":"\u001bG0\u001b%%\u001b(","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001b)","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001`\r","kf13":"\u0001a\r","kf14":"\u0001b\r","kf15":"\u0001c\r","kf16":"\u0001d\r","kf17":"\u0001e\r","kf18":"\u0001f\r","kf19":"\u0001g\r","kf20":"\u0001h\r","kf21":"\u0001i\r","kf22":"\u0001j\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kclr":"\u001a","kprt":"\u001bP","acsc":"qKnImAjDwNuLtMvOlBkCxJ","smacs":"\u001b$","rmacs":"\u001b%%"} +{"name":"ndr9500-25-nl","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b;","cnorm":"\u001b.1","civis":"\u001b.0","sgr0":"\u001bG0\u001b%%\u001b(","dim":"\u001b)","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001`\r","kf13":"\u0001a\r","kf14":"\u0001b\r","kf15":"\u0001c\r","kf16":"\u0001d\r","kf17":"\u0001e\r","kf18":"\u0001f\r","kf19":"\u0001g\r","kf20":"\u0001h\r","kf21":"\u0001i\r","kf22":"\u0001j\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kclr":"\u001a","kprt":"\u001bP","acsc":"qKnImAjDwNuLtMvOlBkCxJ","smacs":"\u001b$","rmacs":"\u001b%%"} +{"name":"ndr9500-mc","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b;","cnorm":"\u001b.1","civis":"\u001b.0","sgr0":"\u001bG0\u001b%%\u001b(","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001b)","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001`\r","kf13":"\u0001a\r","kf14":"\u0001b\r","kf15":"\u0001c\r","kf16":"\u0001d\r","kf17":"\u0001e\r","kf18":"\u0001f\r","kf19":"\u0001g\r","kf20":"\u0001h\r","kf21":"\u0001i\r","kf22":"\u0001j\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kclr":"\u001a","kprt":"\u001bP","acsc":"qKnImAjDwNuLtMvOlBkCxJ","smacs":"\u001b$","rmacs":"\u001b%%"} +{"name":"ndr9500-mc-nl","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b;","cnorm":"\u001b.1","civis":"\u001b.0","sgr0":"\u001bG0\u001b%%\u001b(","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001b)","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001`\r","kf13":"\u0001a\r","kf14":"\u0001b\r","kf15":"\u0001c\r","kf16":"\u0001d\r","kf17":"\u0001e\r","kf18":"\u0001f\r","kf19":"\u0001g\r","kf20":"\u0001h\r","kf21":"\u0001i\r","kf22":"\u0001j\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kclr":"\u001a","kprt":"\u001bP","acsc":"qKnImAjDwNuLtMvOlBkCxJ","smacs":"\u001b$","rmacs":"\u001b%%"} +{"name":"ndr9500-nl","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b;","cnorm":"\u001b.1","civis":"\u001b.0","sgr0":"\u001bG0\u001b%%\u001b(","dim":"\u001b)","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001`\r","kf13":"\u0001a\r","kf14":"\u0001b\r","kf15":"\u0001c\r","kf16":"\u0001d\r","kf17":"\u0001e\r","kf18":"\u0001f\r","kf19":"\u0001g\r","kf20":"\u0001h\r","kf21":"\u0001i\r","kf22":"\u0001j\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kclr":"\u001a","kprt":"\u001bP","acsc":"qKnImAjDwNuLtMvOlBkCxJ","smacs":"\u001b$","rmacs":"\u001b%%"} +{"name":"news-old-unk","cols":80,"lines":-1,"bell":"\u0007","clear":"\u001b[;H\u001b[2J","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"news-unk","cols":80,"lines":-1,"bell":"\u0007","clear":"\u001b[H\u001b[2J","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOT","kf6":"\u001bOU","kf7":"\u001bOV","kf8":"\u001bOW","kf9":"\u001bOX","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"news28","cols":80,"lines":28,"bell":"\u0007","clear":"\u001b[;H\u001b[2J","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"news29","aliases":["news28-a"],"cols":80,"lines":29,"bell":"\u0007","clear":"\u001b[;H\u001b[2J","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"next","cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","sgr0":"\u001b[m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kcud1":"\n","kcub1":"\u0008"} +{"name":"northstar","cols":80,"lines":24,"clear":"\u0004$\u003c200/\u003e","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c$\u003c1/\u003e","pad":"\u0000"} +{"name":"nsterm","aliases":["Apple_Terminal"],"cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"0#`\ufffda:f\ufffdg\ufffdh#i\ufffdjjkkllmmnno\ufffdp\ufffdq\ufffdrrssttuuvvwwxxy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd+\ufffd-\ufffd,\ufffd.\ufffd","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"nsterm+7","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"nsterm+acs","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"nsterm+mac","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"0#`\ufffda:f\ufffdg\ufffdh#i\ufffdjjkkllmmnno\ufffdp\ufffdq\ufffdrrssttuuvvwwxxy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd+\ufffd-\ufffd,\ufffd.\ufffd","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"nsterm-16color","cols":80,"lines":24,"colors":16,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%dm","setbg":"\u001b[%?%p1%{8}%\u003c%t%p1%'('%+%e%p1%{92}%+%;%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kdch":"\u001b[3~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%d;%?%p2%{8}%\u003c%t%p2%'('%+%e%p2%{92}%+%;%dm"} +{"name":"nsterm-7","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"nsterm-7-c","aliases":["nsterm-c-7"],"cols":80,"lines":24,"colors":16,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%dm","setbg":"\u001b[%?%p1%{8}%\u003c%t%p1%'('%+%e%p1%{92}%+%;%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%d;%?%p2%{8}%\u003c%t%p2%'('%+%e%p2%{92}%+%;%dm"} +{"name":"nsterm-acs","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"nsterm-c","cols":80,"lines":24,"colors":16,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%dm","setbg":"\u001b[%?%p1%{8}%\u003c%t%p1%'('%+%e%p1%{92}%+%;%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"0#`\ufffda:f\ufffdg\ufffdh#i\ufffdjjkkllmmnno\ufffdp\ufffdq\ufffdrrssttuuvvwwxxy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd+\ufffd-\ufffd,\ufffd.\ufffd","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%d;%?%p2%{8}%\u003c%t%p2%'('%+%e%p2%{92}%+%;%dm"} +{"name":"nsterm-c-acs","aliases":["nsterm-acs-c"],"cols":80,"lines":24,"colors":16,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%dm","setbg":"\u001b[%?%p1%{8}%\u003c%t%p1%'('%+%e%p1%{92}%+%;%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%d;%?%p2%{8}%\u003c%t%p2%'('%+%e%p2%{92}%+%;%dm"} +{"name":"nsterm-c-s","cols":80,"lines":24,"colors":16,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%dm","setbg":"\u001b[%?%p1%{8}%\u003c%t%p1%'('%+%e%p1%{92}%+%;%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"0#`\ufffda:f\ufffdg\ufffdh#i\ufffdjjkkllmmnno\ufffdp\ufffdq\ufffdrrssttuuvvwwxxy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd+\ufffd-\ufffd,\ufffd.\ufffd","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%d;%?%p2%{8}%\u003c%t%p2%'('%+%e%p2%{92}%+%;%dm"} +{"name":"nsterm-c-s-7","aliases":["nsterm-7-c-s"],"cols":80,"lines":24,"colors":16,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%dm","setbg":"\u001b[%?%p1%{8}%\u003c%t%p1%'('%+%e%p1%{92}%+%;%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%d;%?%p2%{8}%\u003c%t%p2%'('%+%e%p2%{92}%+%;%dm"} +{"name":"nsterm-c-s-acs","aliases":["nsterm-acs-c-s"],"cols":80,"lines":24,"colors":16,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%dm","setbg":"\u001b[%?%p1%{8}%\u003c%t%p1%'('%+%e%p1%{92}%+%;%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%d;%?%p2%{8}%\u003c%t%p2%'('%+%e%p2%{92}%+%;%dm"} +{"name":"nsterm-m","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"0#`\ufffda:f\ufffdg\ufffdh#i\ufffdjjkkllmmnno\ufffdp\ufffdq\ufffdrrssttuuvvwwxxy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd+\ufffd-\ufffd,\ufffd.\ufffd","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"nsterm-m-7","aliases":["nsterm-7-m"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"nsterm-m-acs","aliases":["nsterm-acs-m"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"nsterm-m-s","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"0#`\ufffda:f\ufffdg\ufffdh#i\ufffdjjkkllmmnno\ufffdp\ufffdq\ufffdrrssttuuvvwwxxy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd+\ufffd-\ufffd,\ufffd.\ufffd","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"nsterm-m-s-7","aliases":["nsterm-7-m-s"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"nsterm-m-s-acs","aliases":["nsterm-acs-m-s"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"nsterm-s","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"0#`\ufffda:f\ufffdg\ufffdh#i\ufffdjjkkllmmnno\ufffdp\ufffdq\ufffdrrssttuuvvwwxxy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd+\ufffd-\ufffd,\ufffd.\ufffd","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"nsterm-s-7","aliases":["nsterm-7-s"],"cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"nsterm-s-acs","aliases":["nsterm-acs-s"],"cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"nwp511","aliases":["nwp-511"],"cols":80,"lines":24,"clear":"\u001b[;H\u001b[2J$\u003c20/\u003e","smul":"\u001b[4m$\u003c2/\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cuu1":"\u001b[A$\u003c2/\u003e","pad":"\u0000","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOT","kf6":"\u001b#W","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"nwp512","aliases":["news","news40","nwp514","vt100-bm"],"cols":80,"lines":40,"bell":"\u0007","clear":"\u001b[;H\u001b[2J","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"nwp512-a","aliases":["news-a","news40-a","news42","nwp514-a"],"cols":80,"lines":42,"bell":"\u0007","clear":"\u001b[;H\u001b[2J","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"nwp512-o","aliases":["news-o","news40-o","nwp514-o","vt100-bm-o"],"cols":80,"lines":40,"bell":"\u0007","clear":"\u001b[;H\u001b[2J","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"nwp513","aliases":["news31","newscbm","nwe501","nwp518"],"cols":80,"lines":31,"bell":"\u0007","clear":"\u001b[;H\u001b[2J","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"nwp513-a","aliases":["news31-a","news33","newscbm-a","newscbm33","nwe501-a","nwp251-a","nwp518-a"],"cols":80,"lines":33,"bell":"\u0007","clear":"\u001b[;H\u001b[2J","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"nwp513-o","aliases":["news31-o","newscbm-o","nwe501-o","nwp251-o","nwp518-o"],"cols":80,"lines":31,"bell":"\u0007","clear":"\u001b[;H\u001b[2J","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"nwp517","aliases":["nwp-517"],"cols":80,"lines":30,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0$\u003c2\u003e","rmacs":"\u001b(B$\u003c4\u003e","enacs":"\u001b)0"} +{"name":"nwp517-w","aliases":["nwp-517-w"],"cols":132,"lines":50,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0$\u003c2\u003e","rmacs":"\u001b(B$\u003c4\u003e","enacs":"\u001b)0"} +{"name":"oblit","aliases":["ojerq"],"cols":88,"lines":72,"bell":"\u0007","clear":"\u000c","cup":"\u001bY%p2%' '%+%c%p1%' '%+%c","cub1":"\u001bD","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008"} +{"name":"oc100","aliases":["c100-1p","oconcept"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b?\u001b\u0005$\u003c2*\u003e","smcup":"\u001bU\u001bv 8p\u001bp\r\u001b\u0015$\u003c16\u003e","rmcup":"\u001bv $\u003c6\u003e\u001bp\r\n","sgr0":"\u001bN@","smul":"\u001bG","blink":"\u001bC","rev":"\u001bD","dim":"\u001bE","smkx":"\u001bX","rmkx":"\u001bx","cup":"\u001ba%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001b;","pad":"\u0000","kbs":"\u0008","kf1":"\u001b5","kf2":"\u001b6","kf3":"\u001b7","kf4":"\u001b8","kf5":"\u001b9","kf6":"\u001b:a","kf7":"\u001b:b","kf8":"\u001b:c","kich":"\u001b\u0010","kdch":"\u001b\u0011","khome":"\u001b?","kpp":"\u001b.","knp":"\u001b-","kcuu1":"\u001b;","kcud1":"\u001b\u003c","kcub1":"\u001b\u003e","kcuf1":"\u001b=","kcbt":"\u001b'"} +{"name":"ofcons","cols":80,"lines":30,"bell":"\u0007","clear":"\u000c","sgr0":"\ufffd0m","bold":"\ufffd1m","blink":"\ufffd7;2m","rev":"\ufffd7m","dim":"\ufffd2m","cup":"\ufffd%i%p1%d;%p2%dH","cub1":"\ufffdD","cuu1":"\ufffdA","pad":"\u0000","kbs":"\u0008","kf1":"\ufffd0P","kf2":"\ufffd0Q","kf3":"\ufffd0W","kf4":"\ufffd0x","kf5":"\ufffd0t","kf6":"\ufffd0u","kf7":"\ufffd0q","kf8":"\ufffd0r","kf9":"\ufffd0p","kf10":"\ufffd0M","kdch":"\ufffdP","kpp":"\ufffd?","knp":"\ufffd/","kcuu1":"\ufffdA","kcud1":"\ufffdB","kcub1":"\ufffdD","kcuf1":"\ufffdC"} +{"name":"oldsun","cols":80,"lines":34,"bell":"\u0007","clear":"\u000c","sgr0":"\u001b[m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"opennt-100","aliases":["ntconsole-100"],"cols":80,"lines":100,"colors":8,"bell":"\u0007","clear":"\u001b[2J","smcup":"\u001b[s\u001b[1b","rmcup":"\u001b[2b\u001b[u\r\u001b[K","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bF1","kf2":"\u001bF2","kf3":"\u001bF3","kf4":"\u001bF4","kf5":"\u001bF5","kf6":"\u001bF6","kf7":"\u001bF7","kf8":"\u001bF8","kf9":"\u001bF9","kf10":"\u001bFA","kf11":"\u001bFB","kf12":"\u001bFC","kf13":"\u001bFD","kf14":"\u001bFE","kf15":"\u001bFF","kf16":"\u001bFG","kf17":"\u001bFH","kf18":"\u001bFI","kf19":"\u001bFJ","kf20":"\u001bFK","kf21":"\u001bFL","kf22":"\u001bFM","kf23":"\u001bFN","kf24":"\u001bFO","kf25":"\u001bFP","kf26":"\u001bFQ","kf27":"\u001bFR","kf28":"\u001bFS","kf29":"\u001bFT","kf30":"\u001bFU","kf31":"\u001bFV","kf32":"\u001bFW","kf33":"\u001bFX","kf34":"\u001bFY","kf35":"\u001bFZ","kf36":"\u001bFa","kf37":"\u001bFb","kf38":"\u001bFc","kf39":"\u001bFd","kf40":"\u001bFe","kf41":"\u001bFf","kf42":"\u001bFg","kf43":"\u001bFh","kf44":"\u001bFi","kf45":"\u001bFj","kf46":"\u001bFk","kf47":"\u001bFm","kf48":"\u001bFn","kf49":"\u001bFo","kf50":"\u001bFp","kf51":"\u001bFq","kf52":"\u001bFr","kf53":"\u001bFs","kf54":"\u001bFt","kf55":"\u001bFu","kf56":"\u001bFv","kf57":"\u001bFw","kf58":"\u001bFx","kf59":"\u001bFy","kf60":"\u001bFz","kf61":"\u001bF+","kf62":"\u001bF-","kf63":"\u001bF\u000c kf64=\u001bF$","kich":"\u001b[L","kdch":"\u001b[M","kend":"\u001b[U","kpp":"\u001b[S","knp":"\u001b[T","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~q\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd.\u0019-\u0018,\u0011+\u00100\ufffdp\ufffdr\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"opennt-100-nti","aliases":["ntconsole-100-nti"],"cols":80,"lines":100,"colors":8,"bell":"\u0007","clear":"\u001b[2J","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bF1","kf2":"\u001bF2","kf3":"\u001bF3","kf4":"\u001bF4","kf5":"\u001bF5","kf6":"\u001bF6","kf7":"\u001bF7","kf8":"\u001bF8","kf9":"\u001bF9","kf10":"\u001bFA","kf11":"\u001bFB","kf12":"\u001bFC","kf13":"\u001bFD","kf14":"\u001bFE","kf15":"\u001bFF","kf16":"\u001bFG","kf17":"\u001bFH","kf18":"\u001bFI","kf19":"\u001bFJ","kf20":"\u001bFK","kf21":"\u001bFL","kf22":"\u001bFM","kf23":"\u001bFN","kf24":"\u001bFO","kf25":"\u001bFP","kf26":"\u001bFQ","kf27":"\u001bFR","kf28":"\u001bFS","kf29":"\u001bFT","kf30":"\u001bFU","kf31":"\u001bFV","kf32":"\u001bFW","kf33":"\u001bFX","kf34":"\u001bFY","kf35":"\u001bFZ","kf36":"\u001bFa","kf37":"\u001bFb","kf38":"\u001bFc","kf39":"\u001bFd","kf40":"\u001bFe","kf41":"\u001bFf","kf42":"\u001bFg","kf43":"\u001bFh","kf44":"\u001bFi","kf45":"\u001bFj","kf46":"\u001bFk","kf47":"\u001bFm","kf48":"\u001bFn","kf49":"\u001bFo","kf50":"\u001bFp","kf51":"\u001bFq","kf52":"\u001bFr","kf53":"\u001bFs","kf54":"\u001bFt","kf55":"\u001bFu","kf56":"\u001bFv","kf57":"\u001bFw","kf58":"\u001bFx","kf59":"\u001bFy","kf60":"\u001bFz","kf61":"\u001bF+","kf62":"\u001bF-","kf63":"\u001bF\u000c kf64=\u001bF$","kich":"\u001b[L","kdch":"\u001b[M","kend":"\u001b[U","kpp":"\u001b[S","knp":"\u001b[T","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~q\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd.\u0019-\u0018,\u0011+\u00100\ufffdp\ufffdr\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"opennt-35","aliases":["ntconsole-35"],"cols":80,"lines":35,"colors":8,"bell":"\u0007","clear":"\u001b[2J","smcup":"\u001b[s\u001b[1b","rmcup":"\u001b[2b\u001b[u\r\u001b[K","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bF1","kf2":"\u001bF2","kf3":"\u001bF3","kf4":"\u001bF4","kf5":"\u001bF5","kf6":"\u001bF6","kf7":"\u001bF7","kf8":"\u001bF8","kf9":"\u001bF9","kf10":"\u001bFA","kf11":"\u001bFB","kf12":"\u001bFC","kf13":"\u001bFD","kf14":"\u001bFE","kf15":"\u001bFF","kf16":"\u001bFG","kf17":"\u001bFH","kf18":"\u001bFI","kf19":"\u001bFJ","kf20":"\u001bFK","kf21":"\u001bFL","kf22":"\u001bFM","kf23":"\u001bFN","kf24":"\u001bFO","kf25":"\u001bFP","kf26":"\u001bFQ","kf27":"\u001bFR","kf28":"\u001bFS","kf29":"\u001bFT","kf30":"\u001bFU","kf31":"\u001bFV","kf32":"\u001bFW","kf33":"\u001bFX","kf34":"\u001bFY","kf35":"\u001bFZ","kf36":"\u001bFa","kf37":"\u001bFb","kf38":"\u001bFc","kf39":"\u001bFd","kf40":"\u001bFe","kf41":"\u001bFf","kf42":"\u001bFg","kf43":"\u001bFh","kf44":"\u001bFi","kf45":"\u001bFj","kf46":"\u001bFk","kf47":"\u001bFm","kf48":"\u001bFn","kf49":"\u001bFo","kf50":"\u001bFp","kf51":"\u001bFq","kf52":"\u001bFr","kf53":"\u001bFs","kf54":"\u001bFt","kf55":"\u001bFu","kf56":"\u001bFv","kf57":"\u001bFw","kf58":"\u001bFx","kf59":"\u001bFy","kf60":"\u001bFz","kf61":"\u001bF+","kf62":"\u001bF-","kf63":"\u001bF\u000c kf64=\u001bF$","kich":"\u001b[L","kdch":"\u001b[M","kend":"\u001b[U","kpp":"\u001b[S","knp":"\u001b[T","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~q\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd.\u0019-\u0018,\u0011+\u00100\ufffdp\ufffdr\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"opennt-35-nti","aliases":["ntconsole-35-nti"],"cols":80,"lines":35,"colors":8,"bell":"\u0007","clear":"\u001b[2J","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bF1","kf2":"\u001bF2","kf3":"\u001bF3","kf4":"\u001bF4","kf5":"\u001bF5","kf6":"\u001bF6","kf7":"\u001bF7","kf8":"\u001bF8","kf9":"\u001bF9","kf10":"\u001bFA","kf11":"\u001bFB","kf12":"\u001bFC","kf13":"\u001bFD","kf14":"\u001bFE","kf15":"\u001bFF","kf16":"\u001bFG","kf17":"\u001bFH","kf18":"\u001bFI","kf19":"\u001bFJ","kf20":"\u001bFK","kf21":"\u001bFL","kf22":"\u001bFM","kf23":"\u001bFN","kf24":"\u001bFO","kf25":"\u001bFP","kf26":"\u001bFQ","kf27":"\u001bFR","kf28":"\u001bFS","kf29":"\u001bFT","kf30":"\u001bFU","kf31":"\u001bFV","kf32":"\u001bFW","kf33":"\u001bFX","kf34":"\u001bFY","kf35":"\u001bFZ","kf36":"\u001bFa","kf37":"\u001bFb","kf38":"\u001bFc","kf39":"\u001bFd","kf40":"\u001bFe","kf41":"\u001bFf","kf42":"\u001bFg","kf43":"\u001bFh","kf44":"\u001bFi","kf45":"\u001bFj","kf46":"\u001bFk","kf47":"\u001bFm","kf48":"\u001bFn","kf49":"\u001bFo","kf50":"\u001bFp","kf51":"\u001bFq","kf52":"\u001bFr","kf53":"\u001bFs","kf54":"\u001bFt","kf55":"\u001bFu","kf56":"\u001bFv","kf57":"\u001bFw","kf58":"\u001bFx","kf59":"\u001bFy","kf60":"\u001bFz","kf61":"\u001bF+","kf62":"\u001bF-","kf63":"\u001bF\u000c kf64=\u001bF$","kich":"\u001b[L","kdch":"\u001b[M","kend":"\u001b[U","kpp":"\u001b[S","knp":"\u001b[T","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~q\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd.\u0019-\u0018,\u0011+\u00100\ufffdp\ufffdr\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"opennt-35-w","aliases":["ntconsole-35-w"],"cols":125,"lines":35,"colors":8,"bell":"\u0007","clear":"\u001b[2J","smcup":"\u001b[s\u001b[1b","rmcup":"\u001b[2b\u001b[u\r\u001b[K","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bF1","kf2":"\u001bF2","kf3":"\u001bF3","kf4":"\u001bF4","kf5":"\u001bF5","kf6":"\u001bF6","kf7":"\u001bF7","kf8":"\u001bF8","kf9":"\u001bF9","kf10":"\u001bFA","kf11":"\u001bFB","kf12":"\u001bFC","kf13":"\u001bFD","kf14":"\u001bFE","kf15":"\u001bFF","kf16":"\u001bFG","kf17":"\u001bFH","kf18":"\u001bFI","kf19":"\u001bFJ","kf20":"\u001bFK","kf21":"\u001bFL","kf22":"\u001bFM","kf23":"\u001bFN","kf24":"\u001bFO","kf25":"\u001bFP","kf26":"\u001bFQ","kf27":"\u001bFR","kf28":"\u001bFS","kf29":"\u001bFT","kf30":"\u001bFU","kf31":"\u001bFV","kf32":"\u001bFW","kf33":"\u001bFX","kf34":"\u001bFY","kf35":"\u001bFZ","kf36":"\u001bFa","kf37":"\u001bFb","kf38":"\u001bFc","kf39":"\u001bFd","kf40":"\u001bFe","kf41":"\u001bFf","kf42":"\u001bFg","kf43":"\u001bFh","kf44":"\u001bFi","kf45":"\u001bFj","kf46":"\u001bFk","kf47":"\u001bFm","kf48":"\u001bFn","kf49":"\u001bFo","kf50":"\u001bFp","kf51":"\u001bFq","kf52":"\u001bFr","kf53":"\u001bFs","kf54":"\u001bFt","kf55":"\u001bFu","kf56":"\u001bFv","kf57":"\u001bFw","kf58":"\u001bFx","kf59":"\u001bFy","kf60":"\u001bFz","kf61":"\u001bF+","kf62":"\u001bF-","kf63":"\u001bF\u000c kf64=\u001bF$","kich":"\u001b[L","kdch":"\u001b[M","kend":"\u001b[U","kpp":"\u001b[S","knp":"\u001b[T","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~q\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd.\u0019-\u0018,\u0011+\u00100\ufffdp\ufffdr\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"opennt-50","aliases":["ntconsole-50"],"cols":80,"lines":50,"colors":8,"bell":"\u0007","clear":"\u001b[2J","smcup":"\u001b[s\u001b[1b","rmcup":"\u001b[2b\u001b[u\r\u001b[K","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bF1","kf2":"\u001bF2","kf3":"\u001bF3","kf4":"\u001bF4","kf5":"\u001bF5","kf6":"\u001bF6","kf7":"\u001bF7","kf8":"\u001bF8","kf9":"\u001bF9","kf10":"\u001bFA","kf11":"\u001bFB","kf12":"\u001bFC","kf13":"\u001bFD","kf14":"\u001bFE","kf15":"\u001bFF","kf16":"\u001bFG","kf17":"\u001bFH","kf18":"\u001bFI","kf19":"\u001bFJ","kf20":"\u001bFK","kf21":"\u001bFL","kf22":"\u001bFM","kf23":"\u001bFN","kf24":"\u001bFO","kf25":"\u001bFP","kf26":"\u001bFQ","kf27":"\u001bFR","kf28":"\u001bFS","kf29":"\u001bFT","kf30":"\u001bFU","kf31":"\u001bFV","kf32":"\u001bFW","kf33":"\u001bFX","kf34":"\u001bFY","kf35":"\u001bFZ","kf36":"\u001bFa","kf37":"\u001bFb","kf38":"\u001bFc","kf39":"\u001bFd","kf40":"\u001bFe","kf41":"\u001bFf","kf42":"\u001bFg","kf43":"\u001bFh","kf44":"\u001bFi","kf45":"\u001bFj","kf46":"\u001bFk","kf47":"\u001bFm","kf48":"\u001bFn","kf49":"\u001bFo","kf50":"\u001bFp","kf51":"\u001bFq","kf52":"\u001bFr","kf53":"\u001bFs","kf54":"\u001bFt","kf55":"\u001bFu","kf56":"\u001bFv","kf57":"\u001bFw","kf58":"\u001bFx","kf59":"\u001bFy","kf60":"\u001bFz","kf61":"\u001bF+","kf62":"\u001bF-","kf63":"\u001bF\u000c kf64=\u001bF$","kich":"\u001b[L","kdch":"\u001b[M","kend":"\u001b[U","kpp":"\u001b[S","knp":"\u001b[T","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~q\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd.\u0019-\u0018,\u0011+\u00100\ufffdp\ufffdr\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"opennt-50-nti","aliases":["ntconsole-50-nti"],"cols":80,"lines":50,"colors":8,"bell":"\u0007","clear":"\u001b[2J","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bF1","kf2":"\u001bF2","kf3":"\u001bF3","kf4":"\u001bF4","kf5":"\u001bF5","kf6":"\u001bF6","kf7":"\u001bF7","kf8":"\u001bF8","kf9":"\u001bF9","kf10":"\u001bFA","kf11":"\u001bFB","kf12":"\u001bFC","kf13":"\u001bFD","kf14":"\u001bFE","kf15":"\u001bFF","kf16":"\u001bFG","kf17":"\u001bFH","kf18":"\u001bFI","kf19":"\u001bFJ","kf20":"\u001bFK","kf21":"\u001bFL","kf22":"\u001bFM","kf23":"\u001bFN","kf24":"\u001bFO","kf25":"\u001bFP","kf26":"\u001bFQ","kf27":"\u001bFR","kf28":"\u001bFS","kf29":"\u001bFT","kf30":"\u001bFU","kf31":"\u001bFV","kf32":"\u001bFW","kf33":"\u001bFX","kf34":"\u001bFY","kf35":"\u001bFZ","kf36":"\u001bFa","kf37":"\u001bFb","kf38":"\u001bFc","kf39":"\u001bFd","kf40":"\u001bFe","kf41":"\u001bFf","kf42":"\u001bFg","kf43":"\u001bFh","kf44":"\u001bFi","kf45":"\u001bFj","kf46":"\u001bFk","kf47":"\u001bFm","kf48":"\u001bFn","kf49":"\u001bFo","kf50":"\u001bFp","kf51":"\u001bFq","kf52":"\u001bFr","kf53":"\u001bFs","kf54":"\u001bFt","kf55":"\u001bFu","kf56":"\u001bFv","kf57":"\u001bFw","kf58":"\u001bFx","kf59":"\u001bFy","kf60":"\u001bFz","kf61":"\u001bF+","kf62":"\u001bF-","kf63":"\u001bF\u000c kf64=\u001bF$","kich":"\u001b[L","kdch":"\u001b[M","kend":"\u001b[U","kpp":"\u001b[S","knp":"\u001b[T","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~q\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd.\u0019-\u0018,\u0011+\u00100\ufffdp\ufffdr\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"opennt-50-w","aliases":["ntconsole-50-w"],"cols":125,"lines":50,"colors":8,"bell":"\u0007","clear":"\u001b[2J","smcup":"\u001b[s\u001b[1b","rmcup":"\u001b[2b\u001b[u\r\u001b[K","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bF1","kf2":"\u001bF2","kf3":"\u001bF3","kf4":"\u001bF4","kf5":"\u001bF5","kf6":"\u001bF6","kf7":"\u001bF7","kf8":"\u001bF8","kf9":"\u001bF9","kf10":"\u001bFA","kf11":"\u001bFB","kf12":"\u001bFC","kf13":"\u001bFD","kf14":"\u001bFE","kf15":"\u001bFF","kf16":"\u001bFG","kf17":"\u001bFH","kf18":"\u001bFI","kf19":"\u001bFJ","kf20":"\u001bFK","kf21":"\u001bFL","kf22":"\u001bFM","kf23":"\u001bFN","kf24":"\u001bFO","kf25":"\u001bFP","kf26":"\u001bFQ","kf27":"\u001bFR","kf28":"\u001bFS","kf29":"\u001bFT","kf30":"\u001bFU","kf31":"\u001bFV","kf32":"\u001bFW","kf33":"\u001bFX","kf34":"\u001bFY","kf35":"\u001bFZ","kf36":"\u001bFa","kf37":"\u001bFb","kf38":"\u001bFc","kf39":"\u001bFd","kf40":"\u001bFe","kf41":"\u001bFf","kf42":"\u001bFg","kf43":"\u001bFh","kf44":"\u001bFi","kf45":"\u001bFj","kf46":"\u001bFk","kf47":"\u001bFm","kf48":"\u001bFn","kf49":"\u001bFo","kf50":"\u001bFp","kf51":"\u001bFq","kf52":"\u001bFr","kf53":"\u001bFs","kf54":"\u001bFt","kf55":"\u001bFu","kf56":"\u001bFv","kf57":"\u001bFw","kf58":"\u001bFx","kf59":"\u001bFy","kf60":"\u001bFz","kf61":"\u001bF+","kf62":"\u001bF-","kf63":"\u001bF\u000c kf64=\u001bF$","kich":"\u001b[L","kdch":"\u001b[M","kend":"\u001b[U","kpp":"\u001b[S","knp":"\u001b[T","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~q\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd.\u0019-\u0018,\u0011+\u00100\ufffdp\ufffdr\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"opennt-60","aliases":["ntconsole-60"],"cols":80,"lines":60,"colors":8,"bell":"\u0007","clear":"\u001b[2J","smcup":"\u001b[s\u001b[1b","rmcup":"\u001b[2b\u001b[u\r\u001b[K","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bF1","kf2":"\u001bF2","kf3":"\u001bF3","kf4":"\u001bF4","kf5":"\u001bF5","kf6":"\u001bF6","kf7":"\u001bF7","kf8":"\u001bF8","kf9":"\u001bF9","kf10":"\u001bFA","kf11":"\u001bFB","kf12":"\u001bFC","kf13":"\u001bFD","kf14":"\u001bFE","kf15":"\u001bFF","kf16":"\u001bFG","kf17":"\u001bFH","kf18":"\u001bFI","kf19":"\u001bFJ","kf20":"\u001bFK","kf21":"\u001bFL","kf22":"\u001bFM","kf23":"\u001bFN","kf24":"\u001bFO","kf25":"\u001bFP","kf26":"\u001bFQ","kf27":"\u001bFR","kf28":"\u001bFS","kf29":"\u001bFT","kf30":"\u001bFU","kf31":"\u001bFV","kf32":"\u001bFW","kf33":"\u001bFX","kf34":"\u001bFY","kf35":"\u001bFZ","kf36":"\u001bFa","kf37":"\u001bFb","kf38":"\u001bFc","kf39":"\u001bFd","kf40":"\u001bFe","kf41":"\u001bFf","kf42":"\u001bFg","kf43":"\u001bFh","kf44":"\u001bFi","kf45":"\u001bFj","kf46":"\u001bFk","kf47":"\u001bFm","kf48":"\u001bFn","kf49":"\u001bFo","kf50":"\u001bFp","kf51":"\u001bFq","kf52":"\u001bFr","kf53":"\u001bFs","kf54":"\u001bFt","kf55":"\u001bFu","kf56":"\u001bFv","kf57":"\u001bFw","kf58":"\u001bFx","kf59":"\u001bFy","kf60":"\u001bFz","kf61":"\u001bF+","kf62":"\u001bF-","kf63":"\u001bF\u000c kf64=\u001bF$","kich":"\u001b[L","kdch":"\u001b[M","kend":"\u001b[U","kpp":"\u001b[S","knp":"\u001b[T","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~q\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd.\u0019-\u0018,\u0011+\u00100\ufffdp\ufffdr\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"opennt-60-nti","aliases":["ntconsole-60-nti"],"cols":80,"lines":60,"colors":8,"bell":"\u0007","clear":"\u001b[2J","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bF1","kf2":"\u001bF2","kf3":"\u001bF3","kf4":"\u001bF4","kf5":"\u001bF5","kf6":"\u001bF6","kf7":"\u001bF7","kf8":"\u001bF8","kf9":"\u001bF9","kf10":"\u001bFA","kf11":"\u001bFB","kf12":"\u001bFC","kf13":"\u001bFD","kf14":"\u001bFE","kf15":"\u001bFF","kf16":"\u001bFG","kf17":"\u001bFH","kf18":"\u001bFI","kf19":"\u001bFJ","kf20":"\u001bFK","kf21":"\u001bFL","kf22":"\u001bFM","kf23":"\u001bFN","kf24":"\u001bFO","kf25":"\u001bFP","kf26":"\u001bFQ","kf27":"\u001bFR","kf28":"\u001bFS","kf29":"\u001bFT","kf30":"\u001bFU","kf31":"\u001bFV","kf32":"\u001bFW","kf33":"\u001bFX","kf34":"\u001bFY","kf35":"\u001bFZ","kf36":"\u001bFa","kf37":"\u001bFb","kf38":"\u001bFc","kf39":"\u001bFd","kf40":"\u001bFe","kf41":"\u001bFf","kf42":"\u001bFg","kf43":"\u001bFh","kf44":"\u001bFi","kf45":"\u001bFj","kf46":"\u001bFk","kf47":"\u001bFm","kf48":"\u001bFn","kf49":"\u001bFo","kf50":"\u001bFp","kf51":"\u001bFq","kf52":"\u001bFr","kf53":"\u001bFs","kf54":"\u001bFt","kf55":"\u001bFu","kf56":"\u001bFv","kf57":"\u001bFw","kf58":"\u001bFx","kf59":"\u001bFy","kf60":"\u001bFz","kf61":"\u001bF+","kf62":"\u001bF-","kf63":"\u001bF\u000c kf64=\u001bF$","kich":"\u001b[L","kdch":"\u001b[M","kend":"\u001b[U","kpp":"\u001b[S","knp":"\u001b[T","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~q\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd.\u0019-\u0018,\u0011+\u00100\ufffdp\ufffdr\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"opennt-60-w","aliases":["ntconsole-60-w"],"cols":125,"lines":60,"colors":8,"bell":"\u0007","clear":"\u001b[2J","smcup":"\u001b[s\u001b[1b","rmcup":"\u001b[2b\u001b[u\r\u001b[K","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bF1","kf2":"\u001bF2","kf3":"\u001bF3","kf4":"\u001bF4","kf5":"\u001bF5","kf6":"\u001bF6","kf7":"\u001bF7","kf8":"\u001bF8","kf9":"\u001bF9","kf10":"\u001bFA","kf11":"\u001bFB","kf12":"\u001bFC","kf13":"\u001bFD","kf14":"\u001bFE","kf15":"\u001bFF","kf16":"\u001bFG","kf17":"\u001bFH","kf18":"\u001bFI","kf19":"\u001bFJ","kf20":"\u001bFK","kf21":"\u001bFL","kf22":"\u001bFM","kf23":"\u001bFN","kf24":"\u001bFO","kf25":"\u001bFP","kf26":"\u001bFQ","kf27":"\u001bFR","kf28":"\u001bFS","kf29":"\u001bFT","kf30":"\u001bFU","kf31":"\u001bFV","kf32":"\u001bFW","kf33":"\u001bFX","kf34":"\u001bFY","kf35":"\u001bFZ","kf36":"\u001bFa","kf37":"\u001bFb","kf38":"\u001bFc","kf39":"\u001bFd","kf40":"\u001bFe","kf41":"\u001bFf","kf42":"\u001bFg","kf43":"\u001bFh","kf44":"\u001bFi","kf45":"\u001bFj","kf46":"\u001bFk","kf47":"\u001bFm","kf48":"\u001bFn","kf49":"\u001bFo","kf50":"\u001bFp","kf51":"\u001bFq","kf52":"\u001bFr","kf53":"\u001bFs","kf54":"\u001bFt","kf55":"\u001bFu","kf56":"\u001bFv","kf57":"\u001bFw","kf58":"\u001bFx","kf59":"\u001bFy","kf60":"\u001bFz","kf61":"\u001bF+","kf62":"\u001bF-","kf63":"\u001bF\u000c kf64=\u001bF$","kich":"\u001b[L","kdch":"\u001b[M","kend":"\u001b[U","kpp":"\u001b[S","knp":"\u001b[T","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~q\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd.\u0019-\u0018,\u0011+\u00100\ufffdp\ufffdr\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"opennt-w","aliases":["ntconsole-25-w","ntconsole-w","opennt-25-w"],"cols":125,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[2J","smcup":"\u001b[s\u001b[1b","rmcup":"\u001b[2b\u001b[u\r\u001b[K","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bF1","kf2":"\u001bF2","kf3":"\u001bF3","kf4":"\u001bF4","kf5":"\u001bF5","kf6":"\u001bF6","kf7":"\u001bF7","kf8":"\u001bF8","kf9":"\u001bF9","kf10":"\u001bFA","kf11":"\u001bFB","kf12":"\u001bFC","kf13":"\u001bFD","kf14":"\u001bFE","kf15":"\u001bFF","kf16":"\u001bFG","kf17":"\u001bFH","kf18":"\u001bFI","kf19":"\u001bFJ","kf20":"\u001bFK","kf21":"\u001bFL","kf22":"\u001bFM","kf23":"\u001bFN","kf24":"\u001bFO","kf25":"\u001bFP","kf26":"\u001bFQ","kf27":"\u001bFR","kf28":"\u001bFS","kf29":"\u001bFT","kf30":"\u001bFU","kf31":"\u001bFV","kf32":"\u001bFW","kf33":"\u001bFX","kf34":"\u001bFY","kf35":"\u001bFZ","kf36":"\u001bFa","kf37":"\u001bFb","kf38":"\u001bFc","kf39":"\u001bFd","kf40":"\u001bFe","kf41":"\u001bFf","kf42":"\u001bFg","kf43":"\u001bFh","kf44":"\u001bFi","kf45":"\u001bFj","kf46":"\u001bFk","kf47":"\u001bFm","kf48":"\u001bFn","kf49":"\u001bFo","kf50":"\u001bFp","kf51":"\u001bFq","kf52":"\u001bFr","kf53":"\u001bFs","kf54":"\u001bFt","kf55":"\u001bFu","kf56":"\u001bFv","kf57":"\u001bFw","kf58":"\u001bFx","kf59":"\u001bFy","kf60":"\u001bFz","kf61":"\u001bF+","kf62":"\u001bF-","kf63":"\u001bF\u000c kf64=\u001bF$","kich":"\u001b[L","kdch":"\u001b[M","kend":"\u001b[U","kpp":"\u001b[S","knp":"\u001b[T","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~q\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd.\u0019-\u0018,\u0011+\u00100\ufffdp\ufffdr\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"opennt-w-vt","aliases":["ntconsole-25-w-vt","ntconsole-w-vt","opennt-25-w-vt"],"cols":132,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[2J","smcup":"\u001b[s\u001b[1b","rmcup":"\u001b[2b\u001b[u\r\u001b[K","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bF1","kf2":"\u001bF2","kf3":"\u001bF3","kf4":"\u001bF4","kf5":"\u001bF5","kf6":"\u001bF6","kf7":"\u001bF7","kf8":"\u001bF8","kf9":"\u001bF9","kf10":"\u001bFA","kf11":"\u001bFB","kf12":"\u001bFC","kf13":"\u001bFD","kf14":"\u001bFE","kf15":"\u001bFF","kf16":"\u001bFG","kf17":"\u001bFH","kf18":"\u001bFI","kf19":"\u001bFJ","kf20":"\u001bFK","kf21":"\u001bFL","kf22":"\u001bFM","kf23":"\u001bFN","kf24":"\u001bFO","kf25":"\u001bFP","kf26":"\u001bFQ","kf27":"\u001bFR","kf28":"\u001bFS","kf29":"\u001bFT","kf30":"\u001bFU","kf31":"\u001bFV","kf32":"\u001bFW","kf33":"\u001bFX","kf34":"\u001bFY","kf35":"\u001bFZ","kf36":"\u001bFa","kf37":"\u001bFb","kf38":"\u001bFc","kf39":"\u001bFd","kf40":"\u001bFe","kf41":"\u001bFf","kf42":"\u001bFg","kf43":"\u001bFh","kf44":"\u001bFi","kf45":"\u001bFj","kf46":"\u001bFk","kf47":"\u001bFm","kf48":"\u001bFn","kf49":"\u001bFo","kf50":"\u001bFp","kf51":"\u001bFq","kf52":"\u001bFr","kf53":"\u001bFs","kf54":"\u001bFt","kf55":"\u001bFu","kf56":"\u001bFv","kf57":"\u001bFw","kf58":"\u001bFx","kf59":"\u001bFy","kf60":"\u001bFz","kf61":"\u001bF+","kf62":"\u001bF-","kf63":"\u001bF\u000c kf64=\u001bF$","kich":"\u001b[L","kdch":"\u001b[M","kend":"\u001b[U","kpp":"\u001b[S","knp":"\u001b[T","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~q\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd.\u0019-\u0018,\u0011+\u00100\ufffdp\ufffdr\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"opus3n1+","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*$\u003c100\u003e","smcup":"\u001bzz\u0026\u001b[A\u001bzz'\u001b[B\u001bzz(\u001b[D\u001bzz)\u001b[C\u001bzz\u003c\u001b[Q","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kend":"\u001b[F","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001bI","kprt":"\u001bP","acsc":"0wa_h[jukslrmqnxqzttuyv]wpxv","smacs":"\u001bH\u0002","rmacs":"\u001bH\u0003","kHOM":"\u001b{"} +{"name":"origpc3","aliases":["origibmpc3"],"cols":80,"lines":25,"clear":"\u001bc","sgr0":"\u001b[m\u001b[1;0x\u001b[2;7x","smul":"\u001b[1;7x\u001b[2;0x","bold":"\u001b[7m","cup":"\u001b[%i%p1%2d;%p2%2dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","khome":"\u001b[Y","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"j\ufffdk\ufffdl\ufffdm\ufffdn\ufffdq\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffd"} +{"name":"osborne","aliases":["osborne1"],"cols":80,"lines":24,"clear":"\u001a","smul":"\u001bl","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008$\u003c4\u003e","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"osborne-w","aliases":["osborne1-w"],"cols":104,"lines":24,"bell":"\u0007","clear":"\u001a","smul":"\u001bl","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"osexec","cols":80,"lines":24,"bell":"\u0007","clear":"\u001a","smul":"\u001bl","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001A\r","kf2":"\u0001B\r","kf3":"\u0001C\r","kf4":"\u0001D\r","kf5":"\u0001E\r","kf6":"\u0001F\r","kf7":"\u0001G\r","kf8":"\u0001H\r","kf9":"\u0001I\r","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"otek4115","cols":80,"lines":34,"clear":"\u001b[H\u001b[2J","smcup":"\u001b%!0\u001bLBB2\u001b%!1","rmcup":"\u001b%!0\u001bLBG8\u001b%!1\u001b[34;1H\u001b[J","cnorm":"\u001b%!0\u001bLBG8\u001b%!1\u001b[34;1H","sgr0":"\u001b[m","smul":"\u001b[4m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008"} +{"name":"owl","aliases":["pe1200"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ$\u003c132\u003e","sgr0":"\u001b!\ufffd","cup":"\u001bX%p1%' '%+%c\u001bY%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bRA","kf2":"\u001bRB","kf3":"\u001bRC","kf4":"\u001bRD","kf5":"\u001bRE","kf6":"\u001bRF","kf7":"\u001bRG","kf8":"\u001bRH","kf9":"\u001bRI"} +{"name":"p19","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bE","cnorm":"\u001by4","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bS","kf2":"\u001bT","kf3":"\u001bU","kf4":"\u001bV","kf5":"\u001bW","kf6":"\u001bP","kf7":"\u001bQ","kf8":"\u001bR","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","acsc":"~^x`qanbkcjdmelfgg+hai.kwsutvutvozs{","smacs":"\u001bF","rmacs":"\u001bG"} +{"name":"p8gl","aliases":["prism8gl"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","sgr0":"\u0003 ","smul":"\u00030","blink":"\u0003B","rev":"\u0003D","dim":"\u0003A","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0015","cuu1":"\u001a","pad":"\ufffd","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf12":"\u0001J\r","kf13":"\u0001K\r","kf14":"\u0001L\r","kf15":"\u0001M\r","kf16":"\u0001N\r","kf17":"\u0001O\r","kdch":" \u0008","khome":"\u0001","kcuu1":"\u001a","kcud1":"\n","kcub1":"\u0015","kcuf1":"\u0006"} +{"name":"pc-coherent","aliases":["coherent","pcz19"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001bE","sgr0":"\u001bq","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"pc-minix","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[H\u001b[0J","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[V","kf2":"\u001b[U","kf3":"\u001b[T","kf4":"\u001b[S","kf5":"\u001b[G","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m"} +{"name":"pc-venix","aliases":["venix"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001bH\u001bJ","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","khome":"\u001bG","kcuu1":"\u001bH","kcud1":"\u001bP","kcub1":"\u001bK","kcuf1":"\u001bM"} +{"name":"pc3","cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001bc","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kich":"\u001b[L","khome":"\u001b[H","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"pc6300plus","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[H","cnorm":"\u001b[=1C","civis":"\u001b[=C","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%2d;%p2%2dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOc","kf2":"\u001bOd","kf3":"\u001bOe","kf4":"\u001bOf","kf5":"\u001bOg","kf6":"\u001bOh","kf7":"\u001bOi","kf8":"\u001bOj","kf9":"\u001bOk","kf10":"\u001bOu","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"pcansi","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[12m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"pcansi-25","aliases":["pcansi25"],"cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[12m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"pcansi-25-m","aliases":["pcansi25m"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[12m","rmacs":"\u001b[10m"} +{"name":"pcansi-33","aliases":["pcansi33"],"cols":80,"lines":33,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[12m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"pcansi-33-m","aliases":["pcansi33m"],"cols":80,"lines":33,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[12m","rmacs":"\u001b[10m"} +{"name":"pcansi-43","aliases":["pcansi43"],"cols":80,"lines":43,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[12m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"pcansi-43-m","aliases":["ansi43m"],"cols":80,"lines":43,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[12m","rmacs":"\u001b[10m"} +{"name":"pcansi-m","aliases":["pcansi-mono"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[12m","rmacs":"\u001b[10m"} +{"name":"pccons","aliases":["pcconsole"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[H\u001b[2J","sgr0":"\u001b[m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"pcix","cols":80,"lines":24,"clear":"\u001bc","sgr0":"\u001b[m","smul":"\u001b[4m","cup":"\u001b[%i%p1%2d;%p2%2dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000"} +{"name":"pckermit","aliases":["pckermit12"],"cols":80,"lines":25,"clear":"\u001bH\u001bJ","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"pckermit120","cols":80,"lines":24,"clear":"\u001bE","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"pcmw","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[;H\u001b[2J$\u003c50/\u003e","sgr0":"\u001b[m$\u003c2/\u003e","smul":"\u001b[4m$\u003c2/\u003e","bold":"\u001b[1m$\u003c2/\u003e","blink":"\u001b[5m$\u003c2/\u003e","rev":"\u001b[7m$\u003c2/\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5/\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2/\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"pcplot","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"pcvt25","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001b[17~","kf2":"\u001b[18~","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz~~","smacs":"\u001b(0","rmacs":"\u001b(B"} +{"name":"pcvt25-color","cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[17~","kf6":"\u001b[18~","kf7":"\u001b[19~","kf8":"\u001b[20~","kf9":"\u001b[21~","kf10":"\u001b[29~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz~~","smacs":"\u001b(0","rmacs":"\u001b(B","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"pcvt25w","cols":132,"lines":25,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001b[17~","kf2":"\u001b[18~","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz~~","smacs":"\u001b(0","rmacs":"\u001b(B"} +{"name":"pcvt28","cols":80,"lines":28,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001b[17~","kf2":"\u001b[18~","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz~~","smacs":"\u001b(0","rmacs":"\u001b(B"} +{"name":"pcvt28w","cols":132,"lines":28,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001b[17~","kf2":"\u001b[18~","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz~~","smacs":"\u001b(0","rmacs":"\u001b(B"} +{"name":"pcvt35","cols":80,"lines":35,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001b[17~","kf2":"\u001b[18~","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz~~","smacs":"\u001b(0","rmacs":"\u001b(B"} +{"name":"pcvt35w","cols":132,"lines":35,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001b[17~","kf2":"\u001b[18~","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz~~","smacs":"\u001b(0","rmacs":"\u001b(B"} +{"name":"pcvt40","cols":80,"lines":40,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001b[17~","kf2":"\u001b[18~","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz~~","smacs":"\u001b(0","rmacs":"\u001b(B"} +{"name":"pcvt40w","cols":132,"lines":40,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001b[17~","kf2":"\u001b[18~","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz~~","smacs":"\u001b(0","rmacs":"\u001b(B"} +{"name":"pcvt43","cols":80,"lines":43,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001b[17~","kf2":"\u001b[18~","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz~~","smacs":"\u001b(0","rmacs":"\u001b(B"} +{"name":"pcvt43w","cols":132,"lines":43,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001b[17~","kf2":"\u001b[18~","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz~~","smacs":"\u001b(0","rmacs":"\u001b(B"} +{"name":"pcvt50","cols":80,"lines":50,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001b[17~","kf2":"\u001b[18~","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz~~","smacs":"\u001b(0","rmacs":"\u001b(B"} +{"name":"pcvt50w","cols":132,"lines":50,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001b[17~","kf2":"\u001b[18~","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz~~","smacs":"\u001b(0","rmacs":"\u001b(B"} +{"name":"pcvtXX","cols":-1,"lines":-1,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001b[17~","kf2":"\u001b[18~","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz~~","smacs":"\u001b(0","rmacs":"\u001b(B"} +{"name":"pe1251","aliases":["pe6300","pe6312"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bK$\u003c332\u003e","cup":"\u001bX%p1%' '%+%c\u001bY%p2%' '%+%c","cub1":"\u001bD","cuu1":"\u001bA","pad":"\u0000","kf1":"\u001bRB","kf2":"\u001bRC","kf3":"\u001bRD","kf4":"\u001bRE","kf5":"\u001bRF","kf6":"\u001bRG","kf7":"\u001bRH","kf8":"\u001bRI","kf9":"\u001bRJ","kf10":"\u001bRK"} +{"name":"pe7000c","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bK","smul":"\u001b! ","cup":"\u001bS%p1%' '%+%c%p2%' '%+%c","cub1":"\u001bD","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001b!\u0001","kf2":"\u001b!\u0002","kf3":"\u001b!\u0003","kf4":"\u001b!\u0004","kf5":"\u001b!\u0005","kf6":"\u001b!\u0006","kf7":"\u001b!\u0007","kf8":"\u001b!\u0008","kf9":"\u001b!\t","kf10":"\u001b!\n","khome":"\u001b!S","kcuu1":"\u001b!T","kcud1":"\u001b!U","kcub1":"\u001b!V","kcuf1":"\u001b!W"} +{"name":"pe7000m","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bK","cup":"\u001bS%p1%' '%+%c%p2%' '%+%c","cub1":"\u001bD","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001b!\u0001","kf2":"\u001b!\u0002","kf3":"\u001b!\u0003","kf4":"\u001b!\u0004","kf5":"\u001b!\u0005","kf6":"\u001b!\u0006","kf7":"\u001b!\u0007","kf8":"\u001b!\u0008","kf9":"\u001b!\t","kf10":"\u001b!\n","khome":"\u001b!S","kcuu1":"\u001b!T","kcud1":"\u001b!U","kcub1":"\u001b!V","kcuf1":"\u001b!W"} +{"name":"pilot","aliases":["tgtelnet"],"cols":39,"lines":16,"bell":"\u0007","clear":"\u001bc","cup":"\u001bm%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","pad":"\u0000","kbs":"\u0008","kpp":"\u000b","knp":"\u000c","kcud1":"\n","kcub1":"\u0008"} +{"name":"prism12","aliases":["P12","p12"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","cnorm":"\u001b[\u003c4h","civis":"\u001b[\u003c4l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u000c"} +{"name":"prism12-m","aliases":["P12-M","p12-m"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c$\u003c20\u003e","cnorm":"\u001d\ufffd","civis":"\u001d\ufffd","sgr0":"\u0003 ","smul":"\u0003P","blink":"\u0003B","rev":"\u0003D","dim":"\u0003A","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","kbs":"\u0008","khome":"\u0001"} +{"name":"prism12-m-w","aliases":["P12-M-W","p12-m-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u000c$\u003c20\u003e","cnorm":"\u001d\ufffd","civis":"\u001d\ufffd","sgr0":"\u0003 ","smul":"\u0003P","blink":"\u0003B","rev":"\u0003D","dim":"\u0003A","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","kbs":"\u0008","khome":"\u0001"} +{"name":"prism12-w","aliases":["P12-W","p12-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u000c","cnorm":"\u001b[\u003c4h","civis":"\u001b[\u003c4l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u000c"} +{"name":"prism14","aliases":["P14","p14"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","cnorm":"\u001b[\u003c4h","civis":"\u001b[\u003c4l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u000c"} +{"name":"prism14-m","aliases":["P14-M","p14-m"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c$\u003c20\u003e","cnorm":"\u001d\ufffd","civis":"\u001d\ufffd","sgr0":"\u0003 ","smul":"\u0003P","blink":"\u0003B","rev":"\u0003D","dim":"\u0003A","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","kbs":"\u0008","khome":"\u0001"} +{"name":"prism14-m-w","aliases":["P14-M-W","p14-m-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u000c$\u003c20\u003e","cnorm":"\u001d\ufffd","civis":"\u001d\ufffd","sgr0":"\u0003 ","smul":"\u0003P","blink":"\u0003B","rev":"\u0003D","dim":"\u0003A","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","kbs":"\u0008","khome":"\u0001"} +{"name":"prism14-w","aliases":["P14-W","p14-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u000c","cnorm":"\u001b[\u003c4h","civis":"\u001b[\u003c4l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u000c"} +{"name":"prism2","cols":80,"lines":24,"bell":"\u0007","clear":"\u000c$\u003c20\u003e","cup":"\u000b%p1%' '%+%c\u0010%p2%{10}%/%{16}%*%p2%{10}%m%+%Pc%?%{17}%gc%=%{19}%gc%=%|%gc%!%|%t%{1}%gc%+%c%{8}%e%gc%;%c","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","kbs":"\u0008","khome":"\u0001"} +{"name":"prism4","aliases":["P4","p4"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c$\u003c20\u003e","cnorm":"\u001d\ufffd","civis":"\u001d\ufffd","sgr0":"\u0003 ","smul":"\u0003P","blink":"\u0003B","rev":"\u0003D","dim":"\u0003A","cup":"\u000b%p1%' '%+%c\u0010%p2%{10}%/%{16}%*%p2%{10}%m%+%Pc%?%{17}%gc%=%{19}%gc%=%|%gc%!%|%t%{1}%gc%+%c%{8}%e%gc%;%c","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","kbs":"\u0008","khome":"\u0001"} +{"name":"prism5","aliases":["P5","p5"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c$\u003c20\u003e","cnorm":"\u001d\ufffd","civis":"\u001d\ufffd","sgr0":"\u0003 ","smul":"\u0003P","blink":"\u0003B","rev":"\u0003D","dim":"\u0003A","cup":"\u000b%p1%' '%+%c\u0010%p2%{10}%/%{16}%*%p2%{10}%m%+%Pc%?%{17}%gc%=%{19}%gc%=%|%gc%!%|%t%{1}%gc%+%c%{8}%e%gc%;%c","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","kbs":"\u0008","khome":"\u0001"} +{"name":"prism7","aliases":["P7","p7"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c$\u003c20\u003e","cnorm":"\u001d\ufffd","civis":"\u001d\ufffd","sgr0":"\u0003 ","smul":"\u0003P","blink":"\u0003B","rev":"\u0003D","dim":"\u0003A","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","kbs":"\u0008","khome":"\u0001"} +{"name":"prism8","aliases":["P8","p8"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c$\u003c20\u003e","cnorm":"\u001d\ufffd","civis":"\u001d\ufffd","sgr0":"\u0003 ","smul":"\u0003P","blink":"\u0003B","rev":"\u0003D","dim":"\u0003A","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","kbs":"\u0008","khome":"\u0001"} +{"name":"prism8-w","aliases":["P8-W","p8-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u000c$\u003c20\u003e","cnorm":"\u001d\ufffd","civis":"\u001d\ufffd","sgr0":"\u0003 ","smul":"\u0003P","blink":"\u0003B","rev":"\u0003D","dim":"\u0003A","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","kbs":"\u0008","khome":"\u0001"} +{"name":"prism9","aliases":["P9","p9"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","cnorm":"\u001b[\u003c4h","civis":"\u001b[\u003c4l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u000c"} +{"name":"prism9-8","aliases":["P9-8","p9-8"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c$\u003c20\u003e","cnorm":"\u001d\ufffd","civis":"\u001d\ufffd","sgr0":"\u0003 ","smul":"\u0003P","blink":"\u0003B","rev":"\u0003D","dim":"\u0003A","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","kbs":"\u0008","khome":"\u0001"} +{"name":"prism9-8-w","aliases":["P9-8-W","p9-8-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u000c$\u003c20\u003e","cnorm":"\u001d\ufffd","civis":"\u001d\ufffd","sgr0":"\u0003 ","smul":"\u0003P","blink":"\u0003B","rev":"\u0003D","dim":"\u0003A","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","kbs":"\u0008","khome":"\u0001"} +{"name":"prism9-w","aliases":["P9-W","p9-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u000c","cnorm":"\u001b[\u003c4h","civis":"\u001b[\u003c4l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u000c"} +{"name":"pro350","aliases":["decpro"],"cols":80,"lines":24,"clear":"\u001bH\u001bJ","smul":"\u001b\u0004","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kf1":"\u001bF","kf2":"\u001bG","kf3":"\u001bH","kf4":"\u001bI","kf5":"\u001bJ","kf6":"\u001bi","kf7":"\u001bj","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001bF","rmacs":"\u001bG"} +{"name":"ps300","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"psterm","aliases":["psterm-basic"],"cols":80,"lines":34,"clear":"\u000c","smcup":"\u001bOt","rmcup":"\u001bNt","sgr0":"\u001bN*","smul":"\u001bOu","bold":"\u001bOd","blink":"\u001bOb","rev":"\u001bOr","cup":"\u001b%p1%d;%p2%d;","cub1":"\u001bT","cuu1":"\u001bY","pad":"\u0000","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"psterm-80x24","cols":80,"lines":24,"clear":"\u000c","smcup":"\u001bOt","rmcup":"\u001bNt","sgr0":"\u001bN*","smul":"\u001bOu","bold":"\u001bOd","blink":"\u001bOb","rev":"\u001bOr","cup":"\u001b%p1%d;%p2%d;","cub1":"\u001bT","cuu1":"\u001bY","pad":"\u0000","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"psterm-90x28","cols":90,"lines":28,"clear":"\u000c","smcup":"\u001bOt","rmcup":"\u001bNt","sgr0":"\u001bN*","smul":"\u001bOu","bold":"\u001bOd","blink":"\u001bOb","rev":"\u001bOr","cup":"\u001b%p1%d;%p2%d;","cub1":"\u001bT","cuu1":"\u001bY","pad":"\u0000","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"psterm-96x48","cols":96,"lines":48,"clear":"\u000c","smcup":"\u001bOt","rmcup":"\u001bNt","sgr0":"\u001bN*","smul":"\u001bOu","bold":"\u001bOd","blink":"\u001bOb","rev":"\u001bOr","cup":"\u001b%p1%d;%p2%d;","cub1":"\u001bT","cuu1":"\u001bY","pad":"\u0000","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"psterm-fast","cols":80,"lines":34,"clear":"\u000c","smcup":"\u000ft","rmcup":"\u000et","sgr0":"\u000e*","smul":"\u000fu","bold":"\u000fd","blink":"\u000fb","rev":"\u000fr","cup":"\u0004%p1%d;%p2%d;","cub1":"\u0014","cuu1":"\u0019","pad":"\u0000","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"pt100","aliases":["fenix","pt200","wren"],"cols":80,"lines":24,"clear":"\u001b?","smcup":"\u001b[\u003e1l\u001b[\u003e2l\u001b[\u003e16l\u001b[4l\u001b[\u003e9l\u001b[20l\u001b[\u003e3l\u001b[\u003e7h\u001b[\u003e12l\u001b[1Q","sgr0":"\u001b[m","smul":"\u001b[4m","dim":"\u001b[2m","smkx":"\u001b[\u003e13h","rmkx":"\u001b[\u003e13l","cup":"\u001b0%p1%'!'%+%c%p2%'!'%+%c","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","khome":"\u001b$A","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"pt100w","aliases":["fenixw","pt200w","wrenw"],"cols":132,"lines":24,"clear":"\u001b?","smcup":"\u001b[\u003e1l\u001b[\u003e2l\u001b[\u003e16l\u001b[4l\u001b[\u003e9l\u001b[20l\u001b[\u003e3l\u001b[\u003e7h\u001b[\u003e12l\u001b[1Q","sgr0":"\u001b[m","smul":"\u001b[4m","dim":"\u001b[2m","smkx":"\u001b[\u003e13h","rmkx":"\u001b[\u003e13l","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","khome":"\u001b$A","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"pt250","cols":80,"lines":24,"clear":"\u001b?","smcup":"\u001b[\u003e1l\u001b[\u003e2l\u001b[\u003e16l\u001b[4l\u001b[\u003e9l\u001b[20l\u001b[\u003e3l\u001b[\u003e7h\u001b[\u003e12l\u001b[1Q","sgr0":"\u001b[m","smul":"\u001b[4m","dim":"\u001b[2m","smkx":"\u001b[\u003e13h","rmkx":"\u001b[\u003e13l","cup":"\u001b0%p1%'!'%+%c%p2%'!'%+%c","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","khome":"\u001b$A","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"pt250w","cols":132,"lines":24,"clear":"\u001b?","smcup":"\u001b[\u003e1l\u001b[\u003e2l\u001b[\u003e16l\u001b[4l\u001b[\u003e9l\u001b[20l\u001b[\u003e3l\u001b[\u003e7h\u001b[\u003e12l\u001b[1Q","sgr0":"\u001b[m","smul":"\u001b[4m","dim":"\u001b[2m","smkx":"\u001b[\u003e13h","rmkx":"\u001b[\u003e13l","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","khome":"\u001b$A","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"pty","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bL","smul":"\u001ba!","cup":"\u001bG%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","khome":"\u001bE","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"putty","cols":-1,"lines":-1,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kcan":"\u0003","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"putty-256color","cols":-1,"lines":-1,"colors":256,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[%?%p1%{8}%\u003c%t3%p1%d%e%p1%{16}%\u003c%t9%p1%{8}%-%d%e38;5;%p1%d%;m","setbg":"\u001b[%?%p1%{8}%\u003c%t4%p1%d%e%p1%{16}%\u003c%t10%p1%{8}%-%d%e48;5;%p1%d%;m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kcan":"\u0003","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t3%p1%d%e%p1%{16}%\u003c%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%\u003c%t4%p2%d%e%p2%{16}%\u003c%t10%p2%{8}%-%d%e48;5;%p2%d%;m"} +{"name":"putty-vt100","cols":-1,"lines":-1,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOT","kf6":"\u001bOU","kf7":"\u001bOV","kf8":"\u001bOW","kf9":"\u001bOX","kf10":"\u001bOY","kf11":"\u001bOZ","kf12":"\u001bO[","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kcan":"\u0003","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"qansi","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[2J\u001b[H","cnorm":"\u001b[?25h\u001b[?12l","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOT","kf6":"\u001bOU","kf7":"\u001bOV","kf8":"\u001bOW","kf9":"\u001bOX","kf10":"\u001bOY","kf11":"\u001bOZ","kf12":"\u001bOA","kf13":"\u001bOp","kf14":"\u001bOq","kf15":"\u001bOr","kf16":"\u001bOs","kf17":"\u001bOt","kf18":"\u001bOu","kf19":"\u001bOv","kf20":"\u001bOw","kf21":"\u001bOx","kf22":"\u001bOy","kf23":"\u001bOz","kf24":"\u001bOa","kf25":"\u001b[1~","kf26":"\u001b[2~","kf27":"\u001b[3~","kf28":"\u001b[4~","kf29":"\u001b[5~","kf30":"\u001b[6~","kf31":"\u001b[7~","kf32":"\u001b[8~","kf33":"\u001b[9~","kf34":"\u001b[10~","kf35":"\u001b[11~","kf36":"\u001b[12~","kf37":"\u001b[17~","kf38":"\u001b[18~","kf39":"\u001b[19~","kf40":"\u001b[20~","kf41":"\u001b[21~","kf42":"\u001b[22~","kf43":"\u001b[23~","kf44":"\u001b[24~","kf45":"\u001b[25~","kf46":"\u001b[26~","kf47":"\u001b[27~","kf48":"\u001b[28~","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[Y","khlp":"\u001bNh","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kext":"\u001b[y","kclr":"\u001bNa","kcan":"\u001b[S","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~Oa","smacs":"\u000e","rmacs":"\u000f","kRIT":"\u001b[c","kLFT":"\u001b[d","kHOM":"\u001b[h","_kscu1":"\u001b[a","_kscud1":"\u001b[b","_kccu1":"\u001b[Oa","_kccud1":"\u001b[Ob","_kccuf1":"\u001b[Oc","_kccub1":"\u001b[Od"} +{"name":"qansi-g","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[2J\u001b[H","cnorm":"\u001b[?25h\u001b[?12l","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOT","kf6":"\u001bOU","kf7":"\u001bOV","kf8":"\u001bOW","kf9":"\u001bOX","kf10":"\u001bOY","kf11":"\u001bOZ","kf12":"\u001bOA","kf13":"\u001bOp","kf14":"\u001bOq","kf15":"\u001bOr","kf16":"\u001bOs","kf17":"\u001bOt","kf18":"\u001bOu","kf19":"\u001bOv","kf20":"\u001bOw","kf21":"\u001bOx","kf22":"\u001bOy","kf23":"\u001bOz","kf24":"\u001bOa","kf25":"\u001b[1~","kf26":"\u001b[2~","kf27":"\u001b[3~","kf28":"\u001b[4~","kf29":"\u001b[5~","kf30":"\u001b[6~","kf31":"\u001b[7~","kf32":"\u001b[8~","kf33":"\u001b[9~","kf34":"\u001b[10~","kf35":"\u001b[11~","kf36":"\u001b[12~","kf37":"\u001b[17~","kf38":"\u001b[18~","kf39":"\u001b[19~","kf40":"\u001b[20~","kf41":"\u001b[21~","kf42":"\u001b[22~","kf43":"\u001b[23~","kf44":"\u001b[24~","kf45":"\u001b[25~","kf46":"\u001b[26~","kf47":"\u001b[27~","kf48":"\u001b[28~","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[Y","khlp":"\u001bNh","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kext":"\u001b[y","kclr":"\u001bNa","kcan":"\u001b[S","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~Oa","smacs":"\u000e","rmacs":"\u000f","kRIT":"\u001b[c","kLFT":"\u001b[d","kHOM":"\u001b[h","_kscu1":"\u001b[a","_kscud1":"\u001b[b","_kccu1":"\u001b[Oa","_kccud1":"\u001b[Ob","_kccuf1":"\u001b[Oc","_kccub1":"\u001b[Od"} +{"name":"qansi-m","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[2J\u001b[H","cnorm":"\u001b[?25h\u001b[?12l","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOT","kf6":"\u001bOU","kf7":"\u001bOV","kf8":"\u001bOW","kf9":"\u001bOX","kf10":"\u001bOY","kf11":"\u001bOZ","kf12":"\u001bOA","kf13":"\u001bOp","kf14":"\u001bOq","kf15":"\u001bOr","kf16":"\u001bOs","kf17":"\u001bOt","kf18":"\u001bOu","kf19":"\u001bOv","kf20":"\u001bOw","kf21":"\u001bOx","kf22":"\u001bOy","kf23":"\u001bOz","kf24":"\u001bOa","kf25":"\u001b[1~","kf26":"\u001b[2~","kf27":"\u001b[3~","kf28":"\u001b[4~","kf29":"\u001b[5~","kf30":"\u001b[6~","kf31":"\u001b[7~","kf32":"\u001b[8~","kf33":"\u001b[9~","kf34":"\u001b[10~","kf35":"\u001b[11~","kf36":"\u001b[12~","kf37":"\u001b[17~","kf38":"\u001b[18~","kf39":"\u001b[19~","kf40":"\u001b[20~","kf41":"\u001b[21~","kf42":"\u001b[22~","kf43":"\u001b[23~","kf44":"\u001b[24~","kf45":"\u001b[25~","kf46":"\u001b[26~","kf47":"\u001b[27~","kf48":"\u001b[28~","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[Y","khlp":"\u001bNh","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kext":"\u001b[y","kclr":"\u001bNa","kcan":"\u001b[S","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~Oa","smacs":"\u000e","rmacs":"\u000f","kRIT":"\u001b[c","kLFT":"\u001b[d","kHOM":"\u001b[h","_kscu1":"\u001b[a","_kscud1":"\u001b[b","_kccu1":"\u001b[Oa","_kccud1":"\u001b[Ob","_kccuf1":"\u001b[Oc","_kccub1":"\u001b[Od"} +{"name":"qansi-t","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[2J\u001b[H","cnorm":"\u001b[?25h\u001b[?12l","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOT","kf6":"\u001bOU","kf7":"\u001bOV","kf8":"\u001bOW","kf9":"\u001bOX","kf10":"\u001bOY","kf11":"\u001bOZ","kf12":"\u001bOA","kf13":"\u001bOp","kf14":"\u001bOq","kf15":"\u001bOr","kf16":"\u001bOs","kf17":"\u001bOt","kf18":"\u001bOu","kf19":"\u001bOv","kf20":"\u001bOw","kf21":"\u001bOx","kf22":"\u001bOy","kf23":"\u001bOz","kf24":"\u001bOa","kf25":"\u001b[1~","kf26":"\u001b[2~","kf27":"\u001b[3~","kf28":"\u001b[4~","kf29":"\u001b[5~","kf30":"\u001b[6~","kf31":"\u001b[7~","kf32":"\u001b[8~","kf33":"\u001b[9~","kf34":"\u001b[10~","kf35":"\u001b[11~","kf36":"\u001b[12~","kf37":"\u001b[17~","kf38":"\u001b[18~","kf39":"\u001b[19~","kf40":"\u001b[20~","kf41":"\u001b[21~","kf42":"\u001b[22~","kf43":"\u001b[23~","kf44":"\u001b[24~","kf45":"\u001b[25~","kf46":"\u001b[26~","kf47":"\u001b[27~","kf48":"\u001b[28~","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[Y","khlp":"\u001bNh","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kext":"\u001b[y","kclr":"\u001bNa","kcan":"\u001b[S","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~Oa","smacs":"\u000e","rmacs":"\u000f","kRIT":"\u001b[c","kLFT":"\u001b[d","kHOM":"\u001b[h","_kscu1":"\u001b[a","_kscud1":"\u001b[b","_kccu1":"\u001b[Oa","_kccud1":"\u001b[Ob","_kccuf1":"\u001b[Oc","_kccub1":"\u001b[Od"} +{"name":"qansi-w","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[2J\u001b[H","cnorm":"\u001b[?25h\u001b[?12l","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOT","kf6":"\u001bOU","kf7":"\u001bOV","kf8":"\u001bOW","kf9":"\u001bOX","kf10":"\u001bOY","kf11":"\u001bOZ","kf12":"\u001bOA","kf13":"\u001bOp","kf14":"\u001bOq","kf15":"\u001bOr","kf16":"\u001bOs","kf17":"\u001bOt","kf18":"\u001bOu","kf19":"\u001bOv","kf20":"\u001bOw","kf21":"\u001bOx","kf22":"\u001bOy","kf23":"\u001bOz","kf24":"\u001bOa","kf25":"\u001b[1~","kf26":"\u001b[2~","kf27":"\u001b[3~","kf28":"\u001b[4~","kf29":"\u001b[5~","kf30":"\u001b[6~","kf31":"\u001b[7~","kf32":"\u001b[8~","kf33":"\u001b[9~","kf34":"\u001b[10~","kf35":"\u001b[11~","kf36":"\u001b[12~","kf37":"\u001b[17~","kf38":"\u001b[18~","kf39":"\u001b[19~","kf40":"\u001b[20~","kf41":"\u001b[21~","kf42":"\u001b[22~","kf43":"\u001b[23~","kf44":"\u001b[24~","kf45":"\u001b[25~","kf46":"\u001b[26~","kf47":"\u001b[27~","kf48":"\u001b[28~","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b[Y","khlp":"\u001bNh","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kext":"\u001b[y","kclr":"\u001bNa","kcan":"\u001b[S","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~Oa","smacs":"\u000e","rmacs":"\u000f","kRIT":"\u001b[c","kLFT":"\u001b[d","kHOM":"\u001b[h","_kscu1":"\u001b[a","_kscud1":"\u001b[b","_kccu1":"\u001b[Oa","_kccud1":"\u001b[Ob","_kccuf1":"\u001b[Oc","_kccub1":"\u001b[Od"} +{"name":"qdss","aliases":["qdcons"],"cols":128,"lines":57,"clear":"\u001a$\u003c1/\u003e","cup":"\u001b=%p1%c%p2%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000"} +{"name":"qnx","aliases":["qnx4"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001bH\u001bJ","smcup":"\u001bi","rmcup":"\u001bh\u001bR","cnorm":"\u001by1","civis":"\u001by0","sgr0":"\u001b}\u001b]\u001b\u003e\u001b)","smul":"\u001b[","bold":"\u001b\u003c","blink":"\u001b{","rev":"\u001b(","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kf1":"\ufffd\ufffd","kf2":"\ufffd\ufffd","kf3":"\ufffd\ufffd","kf4":"\ufffd\ufffd","kf5":"\ufffd\ufffd","kf6":"\ufffd\ufffd","kf7":"\ufffd\ufffd","kf8":"\ufffd\ufffd","kf9":"\ufffd\ufffd","kf10":"\ufffd\ufffd","kf11":"\ufffd\ufffd","kf12":"\ufffd\ufffd","kf13":"\ufffd\ufffd","kf14":"\ufffd\ufffd","kf15":"\ufffd\ufffd","kf16":"\ufffd\ufffd","kf17":"\ufffd\ufffd","kf18":"\ufffd\ufffd","kf19":"\ufffd\ufffd","kf20":"\ufffd\ufffd","kf21":"\ufffd\ufffd","kf22":"\ufffd\ufffd","kf23":"\ufffd\ufffd","kf24":"\ufffd\ufffd","kf25":"\ufffd\ufffd","kf26":"\ufffd\ufffd","kf27":"\ufffd\ufffd","kf28":"\ufffd\ufffd","kf29":"\ufffd\ufffd","kf30":"\ufffd\ufffd","kf31":"\ufffd\ufffd","kf32":"\ufffd\ufffd","kf33":"\ufffd\ufffd","kf34":"\ufffd\ufffd","kf35":"\ufffd\ufffd","kf36":"\ufffd\ufffd","kf37":"\ufffd\ufffd","kf38":"\ufffd\ufffd","kf39":"\ufffd\ufffd","kf40":"\ufffd\ufffd","kf41":"\ufffd\ufffd","kf42":"\ufffd\ufffd","kf43":"\ufffd\ufffd","kf44":"\ufffd\ufffd","kf45":"\ufffd\ufffd","kf46":"\ufffd\ufffd","kf47":"\ufffd\ufffd","kf48":"\ufffd\ufffd","kich":"\ufffd\ufffd","kdch":"\ufffd\ufffd","khome":"\ufffd\ufffd","kend":"\ufffd\ufffd","khlp":"\ufffd\ufffd","kpp":"\ufffd\ufffd","knp":"\ufffd\ufffd","kcuu1":"\ufffd\ufffd","kcud1":"\ufffd\ufffd","kcub1":"\ufffd\ufffd","kcuf1":"\ufffd\ufffd","kcbt":"\ufffd\ufffd","kext":"\ufffd\ufffd","kclr":"\ufffd\ufffd","kprt":"\ufffd\ufffd","kcan":"\ufffd\ufffd","acsc":"O\ufffda\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo\ufffdq\ufffds\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffd","kRIT":"\ufffd\ufffd","kLFT":"\ufffd\ufffd","kHOM":"\ufffd\ufffd","kEND":"\ufffd\ufffd"} +{"name":"qnxm","cols":80,"lines":25,"bell":"\u0007","clear":"\u001bH\u001bJ","smcup":"\u001bi","rmcup":"\u001bh\u001bR","cnorm":"\u001by1","civis":"\u001by0","sgr0":"\u001b}\u001b]\u001b\u003e\u001b)","smul":"\u001b[","bold":"\u001b\u003c","blink":"\u001b{","rev":"\u001b(","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kf1":"\ufffd\ufffd","kf2":"\ufffd\ufffd","kf3":"\ufffd\ufffd","kf4":"\ufffd\ufffd","kf5":"\ufffd\ufffd","kf6":"\ufffd\ufffd","kf7":"\ufffd\ufffd","kf8":"\ufffd\ufffd","kf9":"\ufffd\ufffd","kf10":"\ufffd\ufffd","kf11":"\ufffd\ufffd","kf12":"\ufffd\ufffd","kf13":"\ufffd\ufffd","kf14":"\ufffd\ufffd","kf15":"\ufffd\ufffd","kf16":"\ufffd\ufffd","kf17":"\ufffd\ufffd","kf18":"\ufffd\ufffd","kf19":"\ufffd\ufffd","kf20":"\ufffd\ufffd","kf21":"\ufffd\ufffd","kf22":"\ufffd\ufffd","kf23":"\ufffd\ufffd","kf24":"\ufffd\ufffd","kf25":"\ufffd\ufffd","kf26":"\ufffd\ufffd","kf27":"\ufffd\ufffd","kf28":"\ufffd\ufffd","kf29":"\ufffd\ufffd","kf30":"\ufffd\ufffd","kf31":"\ufffd\ufffd","kf32":"\ufffd\ufffd","kf33":"\ufffd\ufffd","kf34":"\ufffd\ufffd","kf35":"\ufffd\ufffd","kf36":"\ufffd\ufffd","kf37":"\ufffd\ufffd","kf38":"\ufffd\ufffd","kf39":"\ufffd\ufffd","kf40":"\ufffd\ufffd","kf41":"\ufffd\ufffd","kf42":"\ufffd\ufffd","kf43":"\ufffd\ufffd","kf44":"\ufffd\ufffd","kf45":"\ufffd\ufffd","kf46":"\ufffd\ufffd","kf47":"\ufffd\ufffd","kf48":"\ufffd\ufffd","kich":"\ufffd\ufffd","kdch":"\ufffd\ufffd","khome":"\ufffd\ufffd","kend":"\ufffd\ufffd","khlp":"\ufffd\ufffd","kpp":"\ufffd\ufffd","knp":"\ufffd\ufffd","kcuu1":"\ufffd\ufffd","kcud1":"\ufffd\ufffd","kcub1":"\ufffd\ufffd","kcuf1":"\ufffd\ufffd","kcbt":"\ufffd\ufffd","kext":"\ufffd\ufffd","kclr":"\ufffd\ufffd","kprt":"\ufffd\ufffd","kcan":"\ufffd\ufffd","acsc":"O\ufffda\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo\ufffdq\ufffds\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffd","kRIT":"\ufffd\ufffd","kLFT":"\ufffd\ufffd","kHOM":"\ufffd\ufffd","kEND":"\ufffd\ufffd"} +{"name":"qnxt","aliases":["qnxt4"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001bH\u001bJ","smcup":"\u001bi","rmcup":"\u001bh\u001bR","cnorm":"\u001by1","civis":"\u001by0","sgr0":"\u001b}\u001b]\u001b\u003e\u001b)","smul":"\u001b[","bold":"\u001b\u003c","blink":"\u001b{","rev":"\u001b(","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kf1":"\ufffd\ufffd","kf2":"\ufffd\ufffd","kf3":"\ufffd\ufffd","kf4":"\ufffd\ufffd","kf5":"\ufffd\ufffd","kf6":"\ufffd\ufffd","kf7":"\ufffd\ufffd","kf8":"\ufffd\ufffd","kf9":"\ufffd\ufffd","kf10":"\ufffd\ufffd","kf11":"\ufffd\ufffd","kf12":"\ufffd\ufffd","kf13":"\ufffd\ufffd","kf14":"\ufffd\ufffd","kf15":"\ufffd\ufffd","kf16":"\ufffd\ufffd","kf17":"\ufffd\ufffd","kf18":"\ufffd\ufffd","kf19":"\ufffd\ufffd","kf20":"\ufffd\ufffd","kf21":"\ufffd\ufffd","kf22":"\ufffd\ufffd","kf23":"\ufffd\ufffd","kf24":"\ufffd\ufffd","kf25":"\ufffd\ufffd","kf26":"\ufffd\ufffd","kf27":"\ufffd\ufffd","kf28":"\ufffd\ufffd","kf29":"\ufffd\ufffd","kf30":"\ufffd\ufffd","kf31":"\ufffd\ufffd","kf32":"\ufffd\ufffd","kf33":"\ufffd\ufffd","kf34":"\ufffd\ufffd","kf35":"\ufffd\ufffd","kf36":"\ufffd\ufffd","kf37":"\ufffd\ufffd","kf38":"\ufffd\ufffd","kf39":"\ufffd\ufffd","kf40":"\ufffd\ufffd","kf41":"\ufffd\ufffd","kf42":"\ufffd\ufffd","kf43":"\ufffd\ufffd","kf44":"\ufffd\ufffd","kf45":"\ufffd\ufffd","kf46":"\ufffd\ufffd","kf47":"\ufffd\ufffd","kf48":"\ufffd\ufffd","kich":"\ufffd\ufffd","kdch":"\ufffd\ufffd","khome":"\ufffd\ufffd","kend":"\ufffd\ufffd","khlp":"\ufffd\ufffd","kpp":"\ufffd\ufffd","knp":"\ufffd\ufffd","kcuu1":"\ufffd\ufffd","kcud1":"\ufffd\ufffd","kcub1":"\ufffd\ufffd","kcuf1":"\ufffd\ufffd","kcbt":"\ufffd\ufffd","kext":"\ufffd\ufffd","kclr":"\ufffd\ufffd","kprt":"\ufffd\ufffd","kcan":"\ufffd\ufffd","acsc":"O\ufffda\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo\ufffdq\ufffds\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffd","kRIT":"\ufffd\ufffd","kLFT":"\ufffd\ufffd","kHOM":"\ufffd\ufffd","kEND":"\ufffd\ufffd"} +{"name":"qnxt2","cols":80,"lines":25,"bell":"\u0007","clear":"\u001bH\u001bJ","sgr0":"\u001b}\u001b]\u001b\u003e\u001b)","smul":"\u001b[","bold":"\u001b\u003c","blink":"\u001b{","rev":"\u001b(","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kf1":"\ufffd\ufffd","kf2":"\ufffd\ufffd","kf3":"\ufffd\ufffd","kf4":"\ufffd\ufffd","kf5":"\ufffd\ufffd","kf6":"\ufffd\ufffd","kf7":"\ufffd\ufffd","kf8":"\ufffd\ufffd","kf9":"\ufffd\ufffd","kf10":"\ufffd\ufffd","kf11":"\ufffd\ufffd","kf12":"\ufffd\ufffd","kf13":"\ufffd\ufffd","kf14":"\ufffd\ufffd","kf15":"\ufffd\ufffd","kf16":"\ufffd\ufffd","kf17":"\ufffd\ufffd","kf18":"\ufffd\ufffd","kf19":"\ufffd\ufffd","kf20":"\ufffd\ufffd","kf21":"\ufffd\ufffd","kf22":"\ufffd\ufffd","kf23":"\ufffd\ufffd","kf24":"\ufffd\ufffd","kf25":"\ufffd\ufffd","kf26":"\ufffd\ufffd","kf27":"\ufffd\ufffd","kf28":"\ufffd\ufffd","kf29":"\ufffd\ufffd","kf30":"\ufffd\ufffd","kf31":"\ufffd\ufffd","kf32":"\ufffd\ufffd","kf33":"\ufffd\ufffd","kf34":"\ufffd\ufffd","kf35":"\ufffd\ufffd","kf36":"\ufffd\ufffd","kf37":"\ufffd\ufffd","kf38":"\ufffd\ufffd","kf39":"\ufffd\ufffd","kf40":"\ufffd\ufffd","kf41":"\ufffd\ufffd","kf42":"\ufffd\ufffd","kf43":"\ufffd\ufffd","kf44":"\ufffd\ufffd","kf45":"\ufffd\ufffd","kf46":"\ufffd\ufffd","kf47":"\ufffd\ufffd","kf48":"\ufffd\ufffd","kich":"\ufffd\ufffd","kdch":"\ufffd\ufffd","khome":"\ufffd\ufffd","kend":"\ufffd\ufffd","khlp":"\ufffd\ufffd","kpp":"\ufffd\ufffd","knp":"\ufffd\ufffd","kcuu1":"\ufffd\ufffd","kcud1":"\ufffd\ufffd","kcub1":"\ufffd\ufffd","kcuf1":"\ufffd\ufffd","kcbt":"\ufffd\ufffd","kext":"\ufffd\ufffd","kclr":"\ufffd\ufffd","kprt":"\ufffd\ufffd","kcan":"\ufffd\ufffd","acsc":"O\ufffda\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo\ufffdq\ufffds\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffd","kRIT":"\ufffd\ufffd","kLFT":"\ufffd\ufffd","kHOM":"\ufffd\ufffd","kEND":"\ufffd\ufffd"} +{"name":"qnxtmono","cols":80,"lines":25,"bell":"\u0007","clear":"\u001bH\u001bJ","smcup":"\u001bi","rmcup":"\u001bh\u001bR","cnorm":"\u001by1","civis":"\u001by0","sgr0":"\u001b}\u001b]\u001b\u003e\u001b)","smul":"\u001b[","bold":"\u001b\u003c","blink":"\u001b{","rev":"\u001b(","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kf1":"\ufffd\ufffd","kf2":"\ufffd\ufffd","kf3":"\ufffd\ufffd","kf4":"\ufffd\ufffd","kf5":"\ufffd\ufffd","kf6":"\ufffd\ufffd","kf7":"\ufffd\ufffd","kf8":"\ufffd\ufffd","kf9":"\ufffd\ufffd","kf10":"\ufffd\ufffd","kf11":"\ufffd\ufffd","kf12":"\ufffd\ufffd","kf13":"\ufffd\ufffd","kf14":"\ufffd\ufffd","kf15":"\ufffd\ufffd","kf16":"\ufffd\ufffd","kf17":"\ufffd\ufffd","kf18":"\ufffd\ufffd","kf19":"\ufffd\ufffd","kf20":"\ufffd\ufffd","kf21":"\ufffd\ufffd","kf22":"\ufffd\ufffd","kf23":"\ufffd\ufffd","kf24":"\ufffd\ufffd","kf25":"\ufffd\ufffd","kf26":"\ufffd\ufffd","kf27":"\ufffd\ufffd","kf28":"\ufffd\ufffd","kf29":"\ufffd\ufffd","kf30":"\ufffd\ufffd","kf31":"\ufffd\ufffd","kf32":"\ufffd\ufffd","kf33":"\ufffd\ufffd","kf34":"\ufffd\ufffd","kf35":"\ufffd\ufffd","kf36":"\ufffd\ufffd","kf37":"\ufffd\ufffd","kf38":"\ufffd\ufffd","kf39":"\ufffd\ufffd","kf40":"\ufffd\ufffd","kf41":"\ufffd\ufffd","kf42":"\ufffd\ufffd","kf43":"\ufffd\ufffd","kf44":"\ufffd\ufffd","kf45":"\ufffd\ufffd","kf46":"\ufffd\ufffd","kf47":"\ufffd\ufffd","kf48":"\ufffd\ufffd","kich":"\ufffd\ufffd","kdch":"\ufffd\ufffd","khome":"\ufffd\ufffd","kend":"\ufffd\ufffd","khlp":"\ufffd\ufffd","kpp":"\ufffd\ufffd","knp":"\ufffd\ufffd","kcuu1":"\ufffd\ufffd","kcud1":"\ufffd\ufffd","kcub1":"\ufffd\ufffd","kcuf1":"\ufffd\ufffd","kcbt":"\ufffd\ufffd","kext":"\ufffd\ufffd","kclr":"\ufffd\ufffd","kprt":"\ufffd\ufffd","kcan":"\ufffd\ufffd","acsc":"O\ufffda\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo\ufffdq\ufffds\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffd","kRIT":"\ufffd\ufffd","kLFT":"\ufffd\ufffd","kHOM":"\ufffd\ufffd","kEND":"\ufffd\ufffd"} +{"name":"qnxw","cols":80,"lines":25,"bell":"\u0007","clear":"\u001bH\u001bJ","smcup":"\u001bi","rmcup":"\u001bh\u001bR","cnorm":"\u001by1","civis":"\u001by0","sgr0":"\u001b}\u001b]\u001b\u003e\u001b)","smul":"\u001b[","bold":"\u001b\u003c","blink":"\u001b{","rev":"\u001b(","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kf1":"\ufffd\ufffd","kf2":"\ufffd\ufffd","kf3":"\ufffd\ufffd","kf4":"\ufffd\ufffd","kf5":"\ufffd\ufffd","kf6":"\ufffd\ufffd","kf7":"\ufffd\ufffd","kf8":"\ufffd\ufffd","kf9":"\ufffd\ufffd","kf10":"\ufffd\ufffd","kf11":"\ufffd\ufffd","kf12":"\ufffd\ufffd","kf13":"\ufffd\ufffd","kf14":"\ufffd\ufffd","kf15":"\ufffd\ufffd","kf16":"\ufffd\ufffd","kf17":"\ufffd\ufffd","kf18":"\ufffd\ufffd","kf19":"\ufffd\ufffd","kf20":"\ufffd\ufffd","kf21":"\ufffd\ufffd","kf22":"\ufffd\ufffd","kf23":"\ufffd\ufffd","kf24":"\ufffd\ufffd","kf25":"\ufffd\ufffd","kf26":"\ufffd\ufffd","kf27":"\ufffd\ufffd","kf28":"\ufffd\ufffd","kf29":"\ufffd\ufffd","kf30":"\ufffd\ufffd","kf31":"\ufffd\ufffd","kf32":"\ufffd\ufffd","kf33":"\ufffd\ufffd","kf34":"\ufffd\ufffd","kf35":"\ufffd\ufffd","kf36":"\ufffd\ufffd","kf37":"\ufffd\ufffd","kf38":"\ufffd\ufffd","kf39":"\ufffd\ufffd","kf40":"\ufffd\ufffd","kf41":"\ufffd\ufffd","kf42":"\ufffd\ufffd","kf43":"\ufffd\ufffd","kf44":"\ufffd\ufffd","kf45":"\ufffd\ufffd","kf46":"\ufffd\ufffd","kf47":"\ufffd\ufffd","kf48":"\ufffd\ufffd","kich":"\ufffd\ufffd","kdch":"\ufffd\ufffd","khome":"\ufffd\ufffd","kend":"\ufffd\ufffd","khlp":"\ufffd\ufffd","kpp":"\ufffd\ufffd","knp":"\ufffd\ufffd","kcuu1":"\ufffd\ufffd","kcud1":"\ufffd\ufffd","kcub1":"\ufffd\ufffd","kcuf1":"\ufffd\ufffd","kcbt":"\ufffd\ufffd","kext":"\ufffd\ufffd","kclr":"\ufffd\ufffd","kprt":"\ufffd\ufffd","kcan":"\ufffd\ufffd","acsc":"O\ufffda\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo\ufffdq\ufffds\ufffdt\ufffdu\ufffdv\ufffdw\ufffdx\ufffd","kRIT":"\ufffd\ufffd","kLFT":"\ufffd\ufffd","kHOM":"\ufffd\ufffd","kEND":"\ufffd\ufffd"} +{"name":"qvt101","aliases":["qvt108"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001a","cnorm":"\u001b.4","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kich":"\u001bQ","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI"} +{"name":"qvt101+","aliases":["qvt101p"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001a","cnorm":"\u001b.4","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kich":"\u001bQ","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI"} +{"name":"qvt102","cols":80,"lines":24,"bell":"\u0007","clear":"\u001a","cnorm":"\u001b.","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kich":"\u001bQ","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI"} +{"name":"qvt103","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J$\u003c50\u003e","sgr0":"\u001b[m$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"qvt103-w","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J$\u003c50\u003e","sgr0":"\u001b[m$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"qvt119+","aliases":["qvt119","qvt119p"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*1","cnorm":"\u001b.4","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"qvt119+-25","aliases":["qvt119p-25"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001b*1","cnorm":"\u001b.4","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"qvt119+-25-w","aliases":["qvt119-25-w","qvt119p-25-w"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001b*1","cnorm":"\u001b.4","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"qvt119+-w","aliases":["qvt119-w","qvt119p-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b*1","cnorm":"\u001b.4","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"qvt203","aliases":["qvt203+"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J$\u003c50\u003e","sgr0":"\u001b[m$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[17~","kf2":"\u001b[18~","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kf9":"\u001b[28~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"qvt203-25","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[H\u001b[2J$\u003c50\u003e","sgr0":"\u001b[m$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[17~","kf2":"\u001b[18~","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kf9":"\u001b[28~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"qvt203-25-w","cols":132,"lines":25,"bell":"\u0007","clear":"\u001b[H\u001b[2J$\u003c50\u003e","sgr0":"\u001b[m$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[17~","kf2":"\u001b[18~","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kf9":"\u001b[28~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"qvt203-w","aliases":["qvt203-w-am"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J$\u003c50\u003e","sgr0":"\u001b[m$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[17~","kf2":"\u001b[18~","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kf9":"\u001b[28~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"rbcomm","cols":80,"lines":25,"bell":"\u0007","clear":"\u000c","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u0014","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u0012","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001f%p2%' '%+%c%p1%' '%+%c","cub1":"\u0008","cuu1":"\u001e","pad":"\u0000","kbs":"\u0008","khome":"\u0001","kcuu1":"\u0010","kcud1":"\u000e","kcub1":"\u0002","kcuf1":"\u0006"} +{"name":"rbcomm-nam","cols":80,"lines":25,"bell":"\u0007","clear":"\u000c","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u0014","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u0012","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001f%p2%' '%+%c%p1%' '%+%c","cub1":"\u0008","cuu1":"\u001e","pad":"\u0000","kbs":"\u0008","khome":"\u0001","kcuu1":"\u0010","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u0006"} +{"name":"rbcomm-w","cols":132,"lines":25,"bell":"\u0007","clear":"\u000c","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u0014","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u0012","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001f%p2%' '%+%c%p1%' '%+%c","cub1":"\u0008","cuu1":"\u001e","pad":"\u0000","kbs":"\u0008","khome":"\u0001","kcuu1":"\u0010","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u0006"} +{"name":"rca","cols":40,"lines":24,"clear":"\u000c","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cuu1":"\u000b","pad":"\u0000"} +{"name":"rcons","cols":80,"lines":34,"bell":"\u0007","clear":"\u000c","sgr0":"\u001b[m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[224z","kf2":"\u001b[225z","kf3":"\u001b[226z","kf4":"\u001b[227z","kf5":"\u001b[228z","kf6":"\u001b[229z","kf7":"\u001b[230z","kf8":"\u001b[231z","kf9":"\u001b[232z","kf10":"\u001b[233z","kf11":"\u001b[234z","kf12":"\u001b[235z","kdch":"","khome":"\u001b[214z","kend":"\u001b[220z","kpp":"\u001b[216z","knp":"\u001b[222z","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"rcons-color","cols":80,"lines":34,"colors":8,"bell":"\u0007","clear":"\u000c","sgr0":"\u001b[m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[224z","kf2":"\u001b[225z","kf3":"\u001b[226z","kf4":"\u001b[227z","kf5":"\u001b[228z","kf6":"\u001b[229z","kf7":"\u001b[230z","kf8":"\u001b[231z","kf9":"\u001b[232z","kf10":"\u001b[233z","kf11":"\u001b[234z","kf12":"\u001b[235z","kdch":"","khome":"\u001b[214z","kend":"\u001b[220z","kpp":"\u001b[216z","knp":"\u001b[222z","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"regent100","cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","sgr0":"\u001b0@","smul":"\u001b0`","cup":"\u000b%p1%' '%+%c\u0010%p2%{10}%/%{16}%*%p2%{10}%m%+%c","cub1":"\u0015","cuu1":"\u001a","pad":"\u0000","kf1":"\u00022\r","kf2":"\u00023\r","kf3":"\u00024\r","kf4":"\u00025\r","kf5":"\u00026\r","kf6":"\u00027\r","kf7":"\u00028\r"} +{"name":"regent20","cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0015","cuu1":"\u001a","pad":"\u0000"} +{"name":"regent25","cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0015","cuu1":"\u001a","pad":"\u0000","khome":"\u0001","kcuu1":"\u001a","kcud1":"\n","kcub1":"\u0015","kcuf1":"\u0006"} +{"name":"regent40","cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","sgr0":"\u001b0@","smul":"\u001b0`","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0015","cuu1":"\u001a","pad":"\u0000","kf1":"\u00022\r","kf2":"\u00023\r","kf3":"\u00024\r","kf4":"\u00025\r","kf5":"\u00026\r","kf6":"\u00027\r","kf7":"\u00028\r","khome":"\u0001","kcuu1":"\u001a","kcud1":"\n","kcub1":"\u0015","kcuf1":"\u0006"} +{"name":"regent40+","cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","sgr0":"\u001b0@","smul":"\u001b0`","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0015","cuu1":"\u001a","pad":"\u0000","kf1":"\u00022\r","kf2":"\u00023\r","kf3":"\u00024\r","kf4":"\u00025\r","kf5":"\u00026\r","kf6":"\u00027\r","kf7":"\u00028\r","khome":"\u0001","kcuu1":"\u001a","kcud1":"\n","kcub1":"\u0015","kcuf1":"\u0006"} +{"name":"regent60","aliases":["regent200"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","sgr0":"\u001b0@","smul":"\u001b0`","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0015","cuu1":"\u001a","pad":"\u0000","kf1":"\u00022\r","kf2":"\u00023\r","kf3":"\u00024\r","kf4":"\u00025\r","kf5":"\u00026\r","kf6":"\u00027\r","kf7":"\u00028\r","kich":"\u001bF","kdch":"\u001bE","khome":"\u0001","kcuu1":"\u001a","kcud1":"\n","kcub1":"\u0015","kcuf1":"\u0006"} +{"name":"rt6221","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[1;1H\u001b[J","cnorm":"\u001b[\u003e5h\u001b[\u003e9h","civis":"\u001b[\u003e5l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOQ","kf2":"\u001bOR","kf3":"\u001bOS","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","smacs":"\u000e","rmacs":"\u000f"} +{"name":"rt6221-w","cols":160,"lines":48,"bell":"\u0007","clear":"\u001b[1;1H\u001b[J","cnorm":"\u001b[\u003e5h\u001b[\u003e9h","civis":"\u001b[\u003e5l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOQ","kf2":"\u001bOR","kf3":"\u001bOS","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","smacs":"\u000e","rmacs":"\u000f"} +{"name":"rtpc","aliases":["ibmapa16"],"cols":80,"lines":32,"bell":"\u0007","clear":"\u001bK","sgr0":"\u001bw\u001bq\u001bz\u001bB","smul":"\u001bW","bold":"\u001bZ","rev":"\u001bp","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bS","kf2":"\u001bT","kf3":"\u001bU","kf4":"\u001bV","kf5":"\u001bW","kf6":"\u001bP","kf7":"\u001bQ","kf8":"\u001bR","kf9":"\u001bY","kich":"\ufffd","khome":"\u001bH","kpp":"\u001bg","knp":"\u001bE","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"rxvt","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[23$","kf22":"\u001b[24$","kf23":"\u001b[11^","kf24":"\u001b[12^","kf25":"\u001b[13^","kf26":"\u001b[14^","kf27":"\u001b[15^","kf28":"\u001b[17^","kf29":"\u001b[18^","kf30":"\u001b[19^","kf31":"\u001b[20^","kf32":"\u001b[21^","kf33":"\u001b[23^","kf34":"\u001b[24^","kf35":"\u001b[25^","kf36":"\u001b[26^","kf37":"\u001b[28^","kf38":"\u001b[29^","kf39":"\u001b[31^","kf40":"\u001b[32^","kf41":"\u001b[33^","kf42":"\u001b[34^","kf43":"\u001b[23@","kf44":"\u001b[24@","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[7~","kend":"\u001b[8~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","kRIT":"\u001b[c","kLFT":"\u001b[d","kHOM":"\u001b[7$","kEND":"\u001b[8$","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kscu1":"\u001b[a","_kscud1":"\u001b[b","_kccu1":"\u001b[Oa","_kccud1":"\u001b[Ob","_kccuf1":"\u001b[Oc","_kccub1":"\u001b[Od","_kchome":"\u001b[7^","_kcend":"\u001b[8^"} +{"name":"rxvt-16color","cols":80,"lines":24,"colors":16,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","setaf":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%dm","setbg":"\u001b[%?%p1%{8}%\u003c%t%p1%'('%+%e%p1%{92}%+%;%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[23$","kf22":"\u001b[24$","kf23":"\u001b[11^","kf24":"\u001b[12^","kf25":"\u001b[13^","kf26":"\u001b[14^","kf27":"\u001b[15^","kf28":"\u001b[17^","kf29":"\u001b[18^","kf30":"\u001b[19^","kf31":"\u001b[20^","kf32":"\u001b[21^","kf33":"\u001b[23^","kf34":"\u001b[24^","kf35":"\u001b[25^","kf36":"\u001b[26^","kf37":"\u001b[28^","kf38":"\u001b[29^","kf39":"\u001b[31^","kf40":"\u001b[32^","kf41":"\u001b[33^","kf42":"\u001b[34^","kf43":"\u001b[23@","kf44":"\u001b[24@","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[7~","kend":"\u001b[8~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","kRIT":"\u001b[c","kLFT":"\u001b[d","kHOM":"\u001b[7$","kEND":"\u001b[8$","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%d;%?%p2%{8}%\u003c%t%p2%'('%+%e%p2%{92}%+%;%dm","_kscu1":"\u001b[a","_kscud1":"\u001b[b","_kccu1":"\u001b[Oa","_kccud1":"\u001b[Ob","_kccuf1":"\u001b[Oc","_kccub1":"\u001b[Od","_kchome":"\u001b[7^","_kcend":"\u001b[8^"} +{"name":"rxvt-256color","cols":80,"lines":24,"colors":256,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","setaf":"\u001b[%?%p1%{8}%\u003c%t3%p1%d%e%p1%{16}%\u003c%t9%p1%{8}%-%d%e38;5;%p1%d%;m","setbg":"\u001b[%?%p1%{8}%\u003c%t4%p1%d%e%p1%{16}%\u003c%t10%p1%{8}%-%d%e48;5;%p1%d%;m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[23$","kf22":"\u001b[24$","kf23":"\u001b[11^","kf24":"\u001b[12^","kf25":"\u001b[13^","kf26":"\u001b[14^","kf27":"\u001b[15^","kf28":"\u001b[17^","kf29":"\u001b[18^","kf30":"\u001b[19^","kf31":"\u001b[20^","kf32":"\u001b[21^","kf33":"\u001b[23^","kf34":"\u001b[24^","kf35":"\u001b[25^","kf36":"\u001b[26^","kf37":"\u001b[28^","kf38":"\u001b[29^","kf39":"\u001b[31^","kf40":"\u001b[32^","kf41":"\u001b[33^","kf42":"\u001b[34^","kf43":"\u001b[23@","kf44":"\u001b[24@","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[7~","kend":"\u001b[8~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","kRIT":"\u001b[c","kLFT":"\u001b[d","kHOM":"\u001b[7$","kEND":"\u001b[8$","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t3%p1%d%e%p1%{16}%\u003c%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%\u003c%t4%p2%d%e%p2%{16}%\u003c%t10%p2%{8}%-%d%e48;5;%p2%d%;m","_kscu1":"\u001b[a","_kscud1":"\u001b[b","_kccu1":"\u001b[Oa","_kccud1":"\u001b[Ob","_kccuf1":"\u001b[Oc","_kccub1":"\u001b[Od","_kchome":"\u001b[7^","_kcend":"\u001b[8^"} +{"name":"rxvt-88color","cols":80,"lines":24,"colors":88,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","setaf":"\u001b[%?%p1%{8}%\u003c%t3%p1%d%e%p1%{16}%\u003c%t9%p1%{8}%-%d%e38;5;%p1%d%;m","setbg":"\u001b[%?%p1%{8}%\u003c%t4%p1%d%e%p1%{16}%\u003c%t10%p1%{8}%-%d%e48;5;%p1%d%;m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[23$","kf22":"\u001b[24$","kf23":"\u001b[11^","kf24":"\u001b[12^","kf25":"\u001b[13^","kf26":"\u001b[14^","kf27":"\u001b[15^","kf28":"\u001b[17^","kf29":"\u001b[18^","kf30":"\u001b[19^","kf31":"\u001b[20^","kf32":"\u001b[21^","kf33":"\u001b[23^","kf34":"\u001b[24^","kf35":"\u001b[25^","kf36":"\u001b[26^","kf37":"\u001b[28^","kf38":"\u001b[29^","kf39":"\u001b[31^","kf40":"\u001b[32^","kf41":"\u001b[33^","kf42":"\u001b[34^","kf43":"\u001b[23@","kf44":"\u001b[24@","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[7~","kend":"\u001b[8~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","kRIT":"\u001b[c","kLFT":"\u001b[d","kHOM":"\u001b[7$","kEND":"\u001b[8$","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t3%p1%d%e%p1%{16}%\u003c%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%\u003c%t4%p2%d%e%p2%{16}%\u003c%t10%p2%{8}%-%d%e48;5;%p2%d%;m","_kscu1":"\u001b[a","_kscud1":"\u001b[b","_kccu1":"\u001b[Oa","_kccud1":"\u001b[Ob","_kccuf1":"\u001b[Oc","_kccub1":"\u001b[Od","_kchome":"\u001b[7^","_kcend":"\u001b[8^"} +{"name":"rxvt-basic","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[23$","kf22":"\u001b[24$","kf23":"\u001b[11^","kf24":"\u001b[12^","kf25":"\u001b[13^","kf26":"\u001b[14^","kf27":"\u001b[15^","kf28":"\u001b[17^","kf29":"\u001b[18^","kf30":"\u001b[19^","kf31":"\u001b[20^","kf32":"\u001b[21^","kf33":"\u001b[23^","kf34":"\u001b[24^","kf35":"\u001b[25^","kf36":"\u001b[26^","kf37":"\u001b[28^","kf38":"\u001b[29^","kf39":"\u001b[31^","kf40":"\u001b[32^","kf41":"\u001b[33^","kf42":"\u001b[34^","kf43":"\u001b[23@","kf44":"\u001b[24@","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[7~","kend":"\u001b[8~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","kRIT":"\u001b[c","kLFT":"\u001b[d","kHOM":"\u001b[7$","kEND":"\u001b[8$","_kscu1":"\u001b[a","_kscud1":"\u001b[b","_kccu1":"\u001b[Oa","_kccud1":"\u001b[Ob","_kccuf1":"\u001b[Oc","_kccub1":"\u001b[Od","_kchome":"\u001b[7^","_kcend":"\u001b[8^"} +{"name":"rxvt-color","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[23$","kf22":"\u001b[24$","kf23":"\u001b[11^","kf24":"\u001b[12^","kf25":"\u001b[13^","kf26":"\u001b[14^","kf27":"\u001b[15^","kf28":"\u001b[17^","kf29":"\u001b[18^","kf30":"\u001b[19^","kf31":"\u001b[20^","kf32":"\u001b[21^","kf33":"\u001b[23^","kf34":"\u001b[24^","kf35":"\u001b[25^","kf36":"\u001b[26^","kf37":"\u001b[28^","kf38":"\u001b[29^","kf39":"\u001b[31^","kf40":"\u001b[32^","kf41":"\u001b[33^","kf42":"\u001b[34^","kf43":"\u001b[23@","kf44":"\u001b[24@","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[7~","kend":"\u001b[8~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","kRIT":"\u001b[c","kLFT":"\u001b[d","kHOM":"\u001b[7$","kEND":"\u001b[8$","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kscu1":"\u001b[a","_kscud1":"\u001b[b","_kccu1":"\u001b[Oa","_kccud1":"\u001b[Ob","_kccuf1":"\u001b[Oc","_kccub1":"\u001b[Od","_kchome":"\u001b[7^","_kcend":"\u001b[8^"} +{"name":"rxvt-cygwin","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[23$","kf22":"\u001b[24$","kf23":"\u001b[11^","kf24":"\u001b[12^","kf25":"\u001b[13^","kf26":"\u001b[14^","kf27":"\u001b[15^","kf28":"\u001b[17^","kf29":"\u001b[18^","kf30":"\u001b[19^","kf31":"\u001b[20^","kf32":"\u001b[21^","kf33":"\u001b[23^","kf34":"\u001b[24^","kf35":"\u001b[25^","kf36":"\u001b[26^","kf37":"\u001b[28^","kf38":"\u001b[29^","kf39":"\u001b[31^","kf40":"\u001b[32^","kf41":"\u001b[33^","kf42":"\u001b[34^","kf43":"\u001b[23@","kf44":"\u001b[24@","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[7~","kend":"\u001b[8~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"0\ufffd+\ufffd,\ufffd-^`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","kRIT":"\u001b[c","kLFT":"\u001b[d","kHOM":"\u001b[7$","kEND":"\u001b[8$","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kscu1":"\u001b[a","_kscud1":"\u001b[b","_kccu1":"\u001b[Oa","_kccud1":"\u001b[Ob","_kccuf1":"\u001b[Oc","_kccub1":"\u001b[Od","_kchome":"\u001b[7^","_kcend":"\u001b[8^"} +{"name":"rxvt-cygwin-native","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[23$","kf22":"\u001b[24$","kf23":"\u001b[11^","kf24":"\u001b[12^","kf25":"\u001b[13^","kf26":"\u001b[14^","kf27":"\u001b[15^","kf28":"\u001b[17^","kf29":"\u001b[18^","kf30":"\u001b[19^","kf31":"\u001b[20^","kf32":"\u001b[21^","kf33":"\u001b[23^","kf34":"\u001b[24^","kf35":"\u001b[25^","kf36":"\u001b[26^","kf37":"\u001b[28^","kf38":"\u001b[29^","kf39":"\u001b[31^","kf40":"\u001b[32^","kf41":"\u001b[33^","kf42":"\u001b[34^","kf43":"\u001b[23@","kf44":"\u001b[24@","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[7~","kend":"\u001b[8~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"0\ufffd+\ufffd,\ufffd-^`\u0004a\ufffdf\ufffdg\ufffdh\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd~\ufffd","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","kRIT":"\u001b[c","kLFT":"\u001b[d","kHOM":"\u001b[7$","kEND":"\u001b[8$","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kscu1":"\u001b[a","_kscud1":"\u001b[b","_kccu1":"\u001b[Oa","_kccud1":"\u001b[Ob","_kccuf1":"\u001b[Oc","_kccub1":"\u001b[Od","_kchome":"\u001b[7^","_kcend":"\u001b[8^"} +{"name":"rxvt-xpm","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[23$","kf22":"\u001b[24$","kf23":"\u001b[11^","kf24":"\u001b[12^","kf25":"\u001b[13^","kf26":"\u001b[14^","kf27":"\u001b[15^","kf28":"\u001b[17^","kf29":"\u001b[18^","kf30":"\u001b[19^","kf31":"\u001b[20^","kf32":"\u001b[21^","kf33":"\u001b[23^","kf34":"\u001b[24^","kf35":"\u001b[25^","kf36":"\u001b[26^","kf37":"\u001b[28^","kf38":"\u001b[29^","kf39":"\u001b[31^","kf40":"\u001b[32^","kf41":"\u001b[33^","kf42":"\u001b[34^","kf43":"\u001b[23@","kf44":"\u001b[24@","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[7~","kend":"\u001b[8~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","kRIT":"\u001b[c","kLFT":"\u001b[d","kHOM":"\u001b[7$","kEND":"\u001b[8$","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kscu1":"\u001b[a","_kscud1":"\u001b[b","_kccu1":"\u001b[Oa","_kccud1":"\u001b[Ob","_kccuf1":"\u001b[Oc","_kccub1":"\u001b[Od","_kchome":"\u001b[7^","_kcend":"\u001b[8^"} +{"name":"sb1","cols":80,"lines":25,"bell":"\u0007","clear":"\u001bH$\u003c1\u003e\u001bJ$\u003c3\u003e","smcup":"\u001bO","sgr0":"\u001b_3","smul":"\u001b_0","cup":"\u001bF%p2%03d%p1%03d","cub1":"\u0008","cuu1":"\u001bA$\u003c3\u003e","pad":"\u0000","kbs":"\u001f","kf1":"\u001bp","kf2":"\u001bq","kf3":"\u001br","kf4":"\u001bs","kf5":"\u001bt","kf6":"\u001bu","kf7":"\u001bv","kf8":"\u001bw","kf9":"\u001b1","kich":"\u001bQ\u001bO","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"sb2","aliases":["sb3"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001bH$\u003c1\u003e\u001bJ$\u003c3\u003e","smcup":"\u001bO","sgr0":"\u001b_3","smul":"\u001b_0","cup":"\u001bF%p2%03d%p1%03d","cub1":"\u0008","cuu1":"\u001bA$\u003c3\u003e","pad":"\u0000","kbs":"\u001f","kf1":"\u001bp","kf2":"\u001bq","kf3":"\u001br","kf4":"\u001bs","kf5":"\u001bt","kf6":"\u001bu","kf7":"\u001bv","kf8":"\u001bw","kf9":"\u001b1","kich":"\u001bQ\u001bO","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"sbi","aliases":["superbee"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001bH$\u003c1\u003e\u001bJ$\u003c3\u003e","smcup":"\u001bO","sgr0":"\u001b_3","smul":"\u001b_0","cup":"\u001bF%p2%03d%p1%03d","cub1":"\u0008","cuu1":"\u001bA$\u003c3\u003e","pad":"\u0000","kbs":"\u001f","kf1":"\u001bp","kf2":"\u001bq","kf3":"\u001br","kf4":"\u001bs","kf5":"\u001bt","kf6":"\u001bu","kf7":"\u001bv","kf8":"\u001bw","kf9":"\u001b1","kich":"\u001bQ\u001bO","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"scanset","aliases":["sc410","sc415"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","acsc":"j%k4l\u003cm-q,x5","smacs":"\u000e","rmacs":"\u000f"} +{"name":"scoansi","cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","cnorm":"\u001b[=10;12C","civis":"\u001b[=14;12C","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","kf10":"\u001b[V","kf11":"\u001b[W","kf12":"\u001b[X","kf13":"\u001b[Y","kf15":"\u001b[a","kf16":"\u001b[b","kf17":"\u001b[c","kf18":"\u001b[d","kf19":"\u001b[e","kf20":"\u001b[f","kf21":"\u001b[g","kf22":"\u001b[h","kf23":"\u001b[i","kf24":"\u001b[j","kf25":"\u001b[k","kf26":"\u001b[l","kf27":"\u001b[m","kf28":"\u001b[n","kf29":"\u001b[o","kf30":"\u001b[p","kf31":"\u001b[q","kf32":"\u001b[r","kf33":"\u001b[s","kf34":"\u001b[t","kf35":"\u001b[u","kf36":"\u001b[v","kf37":"\u001b[w","kf38":"\u001b[x","kf39":"\u001b[y","kf40":"\u001b[z","kf41":"\u001b[@","kf42":"\u001b[[","kf43":"\u001b[\\","kf44":"\u001b[]","kf45":"\u001b[^","kf46":"\u001b[_","kf47":"\u001b[`","kf48":"\u001b[{","kich":"\u001b[L","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"-\ufffd.\ufffd,.+/0[5566778899::;;\u003c\u003c==\u003e\u003eFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXX`\ufffda0fxgqh2jYk?lZm@nEqDtCu4vAwBx3yszr{c}\u001c~\ufffd","smacs":"\u001b[12m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"scoansi-new","cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","cnorm":"\u001b[=1c","civis":"\u001b[=0c","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","kf10":"\u001b[V","kf11":"\u001b[W","kf12":"\u001b[X","kf13":"\u001b[Y","kf15":"\u001b[a","kf16":"\u001b[b","kf17":"\u001b[c","kf18":"\u001b[d","kf19":"\u001b[e","kf20":"\u001b[f","kf21":"\u001b[g","kf22":"\u001b[h","kf23":"\u001b[i","kf24":"\u001b[j","kf25":"\u001b[k","kf26":"\u001b[l","kf27":"\u001b[m","kf28":"\u001b[n","kf29":"\u001b[o","kf30":"\u001b[p","kf31":"\u001b[q","kf32":"\u001b[r","kf33":"\u001b[s","kf34":"\u001b[t","kf35":"\u001b[u","kf36":"\u001b[v","kf37":"\u001b[w","kf38":"\u001b[x","kf39":"\u001b[y","kf40":"\u001b[z","kf41":"\u001b[@","kf42":"\u001b[[","kf43":"\u001b[\\","kf44":"\u001b[]","kf45":"\u001b[^","kf46":"\u001b[_","kf47":"\u001b[`","kf48":"\u001b[{","kich":"\u001b[L","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"-\ufffd.\ufffd,.+/0[5566778899::;;\u003c\u003c==\u003e\u003eFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXX`\ufffda0fxgqh2jYk?lZm@nEqDtCu4vAwBx3yszr{c}\u001c~\ufffd","smacs":"\u001b[12m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"scoansi-old","cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","cnorm":"\u001b[=10;12C","civis":"\u001b[=14;12C","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","kf10":"\u001b[V","kf11":"\u001b[W","kf12":"\u001b[X","kf13":"\u001b[Y","kf15":"\u001b[a","kf16":"\u001b[b","kf17":"\u001b[c","kf18":"\u001b[d","kf19":"\u001b[e","kf20":"\u001b[f","kf21":"\u001b[g","kf22":"\u001b[h","kf23":"\u001b[i","kf24":"\u001b[j","kf25":"\u001b[k","kf26":"\u001b[l","kf27":"\u001b[m","kf28":"\u001b[n","kf29":"\u001b[o","kf30":"\u001b[p","kf31":"\u001b[q","kf32":"\u001b[r","kf33":"\u001b[s","kf34":"\u001b[t","kf35":"\u001b[u","kf36":"\u001b[v","kf37":"\u001b[w","kf38":"\u001b[x","kf39":"\u001b[y","kf40":"\u001b[z","kf41":"\u001b[@","kf42":"\u001b[[","kf43":"\u001b[\\","kf44":"\u001b[]","kf45":"\u001b[^","kf46":"\u001b[_","kf47":"\u001b[`","kf48":"\u001b[{","kich":"\u001b[L","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"-\ufffd.\ufffd,.+/0[5566778899::;;\u003c\u003c==\u003e\u003eFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXX`\ufffda0fxgqh2jYk?lZm@nEqDtCu4vAwBx3yszr{c}\u001c~\ufffd","smacs":"\u001b[12m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"screen","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"screen-16color","cols":80,"lines":24,"colors":16,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%dm","setbg":"\u001b[%?%p1%{8}%\u003c%t%p1%'('%+%e%p1%{92}%+%;%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%d;%?%p2%{8}%\u003c%t%p2%'('%+%e%p2%{92}%+%;%dm"} +{"name":"screen-16color-bce","cols":80,"lines":24,"colors":16,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%dm","setbg":"\u001b[%?%p1%{8}%\u003c%t%p1%'('%+%e%p1%{92}%+%;%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%d;%?%p2%{8}%\u003c%t%p2%'('%+%e%p2%{92}%+%;%dm"} +{"name":"screen-16color-bce-s","cols":80,"lines":24,"colors":16,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%dm","setbg":"\u001b[%?%p1%{8}%\u003c%t%p1%'('%+%e%p1%{92}%+%;%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%d;%?%p2%{8}%\u003c%t%p2%'('%+%e%p2%{92}%+%;%dm"} +{"name":"screen-16color-s","cols":80,"lines":24,"colors":16,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%dm","setbg":"\u001b[%?%p1%{8}%\u003c%t%p1%'('%+%e%p1%{92}%+%;%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%d;%?%p2%{8}%\u003c%t%p2%'('%+%e%p2%{92}%+%;%dm"} +{"name":"screen-256color","cols":80,"lines":24,"colors":256,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[%?%p1%{8}%\u003c%t3%p1%d%e%p1%{16}%\u003c%t9%p1%{8}%-%d%e38;5;%p1%d%;m","setbg":"\u001b[%?%p1%{8}%\u003c%t4%p1%d%e%p1%{16}%\u003c%t10%p1%{8}%-%d%e48;5;%p1%d%;m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t3%p1%d%e%p1%{16}%\u003c%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%\u003c%t4%p2%d%e%p2%{16}%\u003c%t10%p2%{8}%-%d%e48;5;%p2%d%;m"} +{"name":"screen-256color-bce","cols":80,"lines":24,"colors":256,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[%?%p1%{8}%\u003c%t3%p1%d%e%p1%{16}%\u003c%t9%p1%{8}%-%d%e38;5;%p1%d%;m","setbg":"\u001b[%?%p1%{8}%\u003c%t4%p1%d%e%p1%{16}%\u003c%t10%p1%{8}%-%d%e48;5;%p1%d%;m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t3%p1%d%e%p1%{16}%\u003c%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%\u003c%t4%p2%d%e%p2%{16}%\u003c%t10%p2%{8}%-%d%e48;5;%p2%d%;m"} +{"name":"screen-256color-bce-s","cols":80,"lines":24,"colors":256,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[%?%p1%{8}%\u003c%t3%p1%d%e%p1%{16}%\u003c%t9%p1%{8}%-%d%e38;5;%p1%d%;m","setbg":"\u001b[%?%p1%{8}%\u003c%t4%p1%d%e%p1%{16}%\u003c%t10%p1%{8}%-%d%e48;5;%p1%d%;m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t3%p1%d%e%p1%{16}%\u003c%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%\u003c%t4%p2%d%e%p2%{16}%\u003c%t10%p2%{8}%-%d%e48;5;%p2%d%;m"} +{"name":"screen-256color-s","cols":80,"lines":24,"colors":256,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[%?%p1%{8}%\u003c%t3%p1%d%e%p1%{16}%\u003c%t9%p1%{8}%-%d%e38;5;%p1%d%;m","setbg":"\u001b[%?%p1%{8}%\u003c%t4%p1%d%e%p1%{16}%\u003c%t10%p1%{8}%-%d%e48;5;%p1%d%;m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t3%p1%d%e%p1%{16}%\u003c%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%\u003c%t4%p2%d%e%p2%{16}%\u003c%t10%p2%{8}%-%d%e48;5;%p2%d%;m"} +{"name":"screen-bce","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"screen-s","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"screen-w","cols":132,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"screen.linux","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"screen.mlterm","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[11;2~","kf14":"\u001b[12;2~","kf15":"\u001b[13;2~","kf16":"\u001b[14;2~","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001b[11;5~","kf26":"\u001b[12;5~","kf27":"\u001b[13;5~","kf28":"\u001b[14;5~","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001b[11;6~","kf38":"\u001b[12;6~","kf39":"\u001b[13;6~","kf40":"\u001b[14;6~","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kf49":"\u001b[11;3~","kf50":"\u001b[12;3~","kf51":"\u001b[13;3~","kf52":"\u001b[14;3~","kf53":"\u001b[15;3~","kf54":"\u001b[17;3~","kf55":"\u001b[18;3~","kf56":"\u001b[19;3~","kf57":"\u001b[20;3~","kf58":"\u001b[21;3~","kf59":"\u001b[23;3~","kf60":"\u001b[24;3~","kf61":"\u001b[11;4~","kf62":"\u001b[12;4~","kf63":"\u001b[13;4~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"00``aaffgghhjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","kRIT":"\u001bO1;2C","kLFT":"\u001bO1;2D","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"screen.rxvt","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[23$","kf22":"\u001b[24$","kf23":"\u001b[11^","kf24":"\u001b[12^","kf25":"\u001b[13^","kf26":"\u001b[14^","kf27":"\u001b[15^","kf28":"\u001b[17^","kf29":"\u001b[18^","kf30":"\u001b[19^","kf31":"\u001b[20^","kf32":"\u001b[21^","kf33":"\u001b[23^","kf34":"\u001b[24^","kf35":"\u001b[25^","kf36":"\u001b[26^","kf37":"\u001b[28^","kf38":"\u001b[29^","kf39":"\u001b[31^","kf40":"\u001b[32^","kf41":"\u001b[33^","kf42":"\u001b[34^","kf43":"\u001b[23@","kf44":"\u001b[24@","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","kRIT":"\u001b[c","kLFT":"\u001b[d","kHOM":"\u001b[7$","kEND":"\u001b[8$","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kscu1":"\u001b[a","_kscud1":"\u001b[b","_kccu1":"\u001b[Oa","_kccud1":"\u001b[Ob","_kccuf1":"\u001b[Oc","_kccub1":"\u001b[Od","_kchome":"\u001b[7^","_kcend":"\u001b[8^"} +{"name":"screen.teraterm","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdi\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"screen.xterm-r6","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"screen.xterm-xfree86","aliases":["screen.xterm-new"],"cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[?12l\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b(B\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[1;2P","kf14":"\u001b[1;2Q","kf15":"\u001b[1;2R","kf16":"\u001b[1;2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001b[1;5P","kf26":"\u001b[1;5Q","kf27":"\u001b[1;5R","kf28":"\u001b[1;5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001b[1;6P","kf38":"\u001b[1;6Q","kf39":"\u001b[1;6R","kf40":"\u001b[1;6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kf49":"\u001b[1;3P","kf50":"\u001b[1;3Q","kf51":"\u001b[1;3R","kf52":"\u001b[1;3S","kf53":"\u001b[15;3~","kf54":"\u001b[17;3~","kf55":"\u001b[18;3~","kf56":"\u001b[19;3~","kf57":"\u001b[20;3~","kf58":"\u001b[21;3~","kf59":"\u001b[23;3~","kf60":"\u001b[24;3~","kf61":"\u001b[1;4P","kf62":"\u001b[1;4Q","kf63":"\u001b[1;4R","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","kRIT":"\u001b[1;2C","kLFT":"\u001b[1;2D","kHOM":"\u001b[1;2H","kEND":"\u001b[1;2F","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kscu1":"\u001b[1;2A","_kscud1":"\u001b[1;2B","_kccu1":"\u001b[1;5A","_kccud1":"\u001b[1;5B","_kccuf1":"\u001b[1;5C","_kccub1":"\u001b[1;5D","_kmcu1":"\u001b[1;9A","_kmcud1":"\u001b[1;9B","_kmcuf1":"\u001b[1;9C","_kmcub1":"\u001b[1;9D","_kacu1":"\u001b[1;3A","_kacud1":"\u001b[1;3B","_kacuf1":"\u001b[1;3C","_kacub1":"\u001b[1;3D","_kchome":"\u001b[1;5H","_kcend":"\u001b[1;5F","_kahome":"\u001b[1;9H","_kaend":"\u001b[1;9F","_kascu1":"\u001b[1;4A","_kascud1":"\u001b[1;4B","_kascub1":"\u001b[1;4D","_kascuf1":"\u001b[1;4C","_kmscu1":"\u001b[1;10A","_kmscud1":"\u001b[1;10B","_kmscub1":"\u001b[1;10D","_kmscuf1":"\u001b[1;10C","_kcscu1":"\u001b[1;6A","_kcscud1":"\u001b[1;6B","_kcscub1":"\u001b[1;6D","_kcscuf1":"\u001b[1;6C","_kcHOME":"\u001b[1;6H","_kcEND":"\u001b[1;6F","_kaHOME":"\u001b[1;4H","_kaEND":"\u001b[1;4F","_kmHOME":"\u001b[1;10H","_kmEND":"\u001b[1;10F"} +{"name":"screen2","cols":80,"lines":24,"clear":"\u001b[2J\u001b[H","sgr0":"\u001b[m","smul":"\u001b[4m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bS","kf2":"\u001bT","kf3":"\u001bU","kf4":"\u001bV","kf5":"\u001bW","kf6":"\u001bP","kf7":"\u001bQ","kf8":"\u001bR","kf9":"\u001b0I","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"screen3","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"screwpoint","cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","cnorm":"\u000f\u001b0`","sgr0":"\u000f","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","kf2":"\u00022","kf3":"\u0002!","kf4":"\u0002\"","kf5":"\u0002#","khome":"\u0001","kcuu1":"\u001a","kcud1":"\n","kcub1":"\u0015","kcuf1":"\u0006"} +{"name":"scrhp","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b\u0026a0c0Y\u001bJ$\u003c40\u003e","sgr0":"\u001b\u0026d@\u000f","smul":"\u001b\u0026dD","bold":"\u001b\u0026dF","blink":"\u001b\u0026dA","rev":"\u001b\u0026dB","dim":"\u001b\u0026dH","smkx":"\u001b\u0026s1A","rmkx":"\u001b\u0026s0A","cup":"\u001b\u0026a%p1%dy%p2%dC$\u003c10\u003e","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp","kf2":"\u001bq","kf3":"\u001br","kf4":"\u001bs","kf5":"\u001bt","kf6":"\u001bu","kf7":"\u001bv","kf8":"\u001bw","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kpp":"\u001bV","knp":"\u001bU","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001bi","kclr":"\u001bJ","acsc":"2[3@4\u003e5I9(:'JSKWLQMAO#P$Q;R!S\"T1U2V4W3X:Y+Z*dHjGkTlRmFn/q,t5u6v8w7x.","smacs":"\u000e","rmacs":"\u000f"} +{"name":"sibo","cols":61,"lines":20,"bell":"\u0007","clear":"\u001bH\u001bJ","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u001bD","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kcud1":"\n","kcub1":"\u0008"} +{"name":"simterm","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","smcup":"\u001bVS","rmcup":"\u001bVE","sgr0":"\u001b\u0026d@","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000"} +{"name":"soroc120","aliases":["iq120","soroc"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*$\u003c2\u003e","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"soroc140","aliases":["iq140"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b+","smul":"\u001b\u0001","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","khome":"\u001e","kcuu1":"\u000b","kcuf1":"\u000c"} +{"name":"st52","cols":80,"lines":25,"bell":"\u0007","clear":"\u001bH\u001bJ","smcup":"\u001be","cnorm":"\u001be","civis":"\u001bf","sgr0":"\u001bq","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u001bD","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001b#;","kf2":"\u001b#\u003c","kf3":"\u001b#=","kf4":"\u001b#\u003e","kf5":"\u001b#?","kf6":"\u001b#@","kf7":"\u001b#A","kf8":"\u001b#B","kf9":"\u001b#C","khome":"\u001b#G","kcuu1":"\u001b#H","kcud1":"\u001b#P","kcub1":"\u001b#K","kcuf1":"\u001b#M","kclr":"\u001b#7"} +{"name":"sun","aliases":["sun1","sun2"],"cols":80,"lines":34,"bell":"\u0007","clear":"\u000c","sgr0":"\u001b[m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[224z","kf2":"\u001b[225z","kf3":"\u001b[226z","kf4":"\u001b[227z","kf5":"\u001b[228z","kf6":"\u001b[229z","kf7":"\u001b[230z","kf8":"\u001b[231z","kf9":"\u001b[232z","kf10":"\u001b[233z","kf11":"\u001b[234z","kf12":"\u001b[235z","kdch":"","khome":"\u001b[214z","kend":"\u001b[220z","kpp":"\u001b[216z","knp":"\u001b[222z","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"sun-1","cols":80,"lines":1,"bell":"\u0007","clear":"\u000c","sgr0":"\u001b[m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[224z","kf2":"\u001b[225z","kf3":"\u001b[226z","kf4":"\u001b[227z","kf5":"\u001b[228z","kf6":"\u001b[229z","kf7":"\u001b[230z","kf8":"\u001b[231z","kf9":"\u001b[232z","kf10":"\u001b[233z","kf11":"\u001b[234z","kf12":"\u001b[235z","kdch":"","khome":"\u001b[214z","kend":"\u001b[220z","kpp":"\u001b[216z","knp":"\u001b[222z","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"sun-12","cols":80,"lines":12,"bell":"\u0007","clear":"\u000c","sgr0":"\u001b[m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[224z","kf2":"\u001b[225z","kf3":"\u001b[226z","kf4":"\u001b[227z","kf5":"\u001b[228z","kf6":"\u001b[229z","kf7":"\u001b[230z","kf8":"\u001b[231z","kf9":"\u001b[232z","kf10":"\u001b[233z","kf11":"\u001b[234z","kf12":"\u001b[235z","kdch":"","khome":"\u001b[214z","kend":"\u001b[220z","kpp":"\u001b[216z","knp":"\u001b[222z","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"sun-17","cols":80,"lines":17,"bell":"\u0007","clear":"\u000c","sgr0":"\u001b[m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[224z","kf2":"\u001b[225z","kf3":"\u001b[226z","kf4":"\u001b[227z","kf5":"\u001b[228z","kf6":"\u001b[229z","kf7":"\u001b[230z","kf8":"\u001b[231z","kf9":"\u001b[232z","kf10":"\u001b[233z","kf11":"\u001b[234z","kf12":"\u001b[235z","kdch":"","khome":"\u001b[214z","kend":"\u001b[220z","kpp":"\u001b[216z","knp":"\u001b[222z","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"sun-24","cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","sgr0":"\u001b[m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[224z","kf2":"\u001b[225z","kf3":"\u001b[226z","kf4":"\u001b[227z","kf5":"\u001b[228z","kf6":"\u001b[229z","kf7":"\u001b[230z","kf8":"\u001b[231z","kf9":"\u001b[232z","kf10":"\u001b[233z","kf11":"\u001b[234z","kf12":"\u001b[235z","kdch":"","khome":"\u001b[214z","kend":"\u001b[220z","kpp":"\u001b[216z","knp":"\u001b[222z","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"sun-34","cols":80,"lines":34,"bell":"\u0007","clear":"\u000c","sgr0":"\u001b[m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[224z","kf2":"\u001b[225z","kf3":"\u001b[226z","kf4":"\u001b[227z","kf5":"\u001b[228z","kf6":"\u001b[229z","kf7":"\u001b[230z","kf8":"\u001b[231z","kf9":"\u001b[232z","kf10":"\u001b[233z","kf11":"\u001b[234z","kf12":"\u001b[235z","kdch":"","khome":"\u001b[214z","kend":"\u001b[220z","kpp":"\u001b[216z","knp":"\u001b[222z","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"sun-48","cols":80,"lines":48,"bell":"\u0007","clear":"\u000c","sgr0":"\u001b[m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[224z","kf2":"\u001b[225z","kf3":"\u001b[226z","kf4":"\u001b[227z","kf5":"\u001b[228z","kf6":"\u001b[229z","kf7":"\u001b[230z","kf8":"\u001b[231z","kf9":"\u001b[232z","kf10":"\u001b[233z","kf11":"\u001b[234z","kf12":"\u001b[235z","kdch":"","khome":"\u001b[214z","kend":"\u001b[220z","kpp":"\u001b[216z","knp":"\u001b[222z","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"sun-c","aliases":["sun-cmd"],"cols":80,"lines":35,"bell":"\u0007","clear":"\u000c","smcup":"\u001b[\u003e4l","rmcup":"\u001b[\u003e4h","sgr0":"\u001b[m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[224z","kf2":"\u001b[225z","kf3":"\u001b[226z","kf4":"\u001b[227z","kf5":"\u001b[228z","kf6":"\u001b[229z","kf7":"\u001b[230z","kf8":"\u001b[231z","kf9":"\u001b[232z","kf10":"\u001b[233z","kf11":"\u001b[234z","kf12":"\u001b[235z","kdch":"","khome":"\u001b[214z","kend":"\u001b[220z","kpp":"\u001b[216z","knp":"\u001b[222z","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"sun-cgsix","aliases":["sun-ss5"],"cols":80,"lines":34,"bell":"\u0007","clear":"\u000c","sgr0":"\u001b[m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[224z","kf2":"\u001b[225z","kf3":"\u001b[226z","kf4":"\u001b[227z","kf5":"\u001b[228z","kf6":"\u001b[229z","kf7":"\u001b[230z","kf8":"\u001b[231z","kf9":"\u001b[232z","kf10":"\u001b[233z","kf11":"\u001b[234z","kf12":"\u001b[235z","kdch":"","khome":"\u001b[214z","kend":"\u001b[220z","kpp":"\u001b[216z","knp":"\u001b[222z","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"sun-color","cols":80,"lines":34,"colors":8,"bell":"\u0007","clear":"\u000c","sgr0":"\u001b[m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[224z","kf2":"\u001b[225z","kf3":"\u001b[226z","kf4":"\u001b[227z","kf5":"\u001b[228z","kf6":"\u001b[229z","kf7":"\u001b[230z","kf8":"\u001b[231z","kf9":"\u001b[232z","kf10":"\u001b[233z","kf11":"\u001b[234z","kf12":"\u001b[235z","kdch":"","khome":"\u001b[214z","kend":"\u001b[220z","kpp":"\u001b[216z","knp":"\u001b[222z","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"sun-e","aliases":["sun-nic","sune"],"cols":80,"lines":34,"bell":"\u0007","clear":"\u000c","sgr0":"\u001b[m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[224z","kf2":"\u001b[225z","kf3":"\u001b[226z","kf4":"\u001b[227z","kf5":"\u001b[228z","kf6":"\u001b[229z","kf7":"\u001b[230z","kf8":"\u001b[231z","kf9":"\u001b[232z","kf10":"\u001b[233z","kf11":"\u001b[234z","kf12":"\u001b[235z","kdch":"","khome":"\u001b[214z","kend":"\u001b[220z","kpp":"\u001b[216z","knp":"\u001b[222z","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"sun-e-s","aliases":["sun-s-e"],"cols":80,"lines":34,"bell":"\u0007","clear":"\u000c","sgr0":"\u001b[m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[224z","kf2":"\u001b[225z","kf3":"\u001b[226z","kf4":"\u001b[227z","kf5":"\u001b[228z","kf6":"\u001b[229z","kf7":"\u001b[230z","kf8":"\u001b[231z","kf9":"\u001b[232z","kf10":"\u001b[233z","kf11":"\u001b[234z","kf12":"\u001b[235z","kdch":"","khome":"\u001b[214z","kend":"\u001b[220z","kpp":"\u001b[216z","knp":"\u001b[222z","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"sun-il","cols":80,"lines":34,"bell":"\u0007","clear":"\u000c","sgr0":"\u001b[m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[224z","kf2":"\u001b[225z","kf3":"\u001b[226z","kf4":"\u001b[227z","kf5":"\u001b[228z","kf6":"\u001b[229z","kf7":"\u001b[230z","kf8":"\u001b[231z","kf9":"\u001b[232z","kf10":"\u001b[233z","kf11":"\u001b[234z","kf12":"\u001b[235z","kdch":"","khome":"\u001b[214z","kend":"\u001b[220z","kpp":"\u001b[216z","knp":"\u001b[222z","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"sun-s","cols":80,"lines":34,"bell":"\u0007","clear":"\u000c","sgr0":"\u001b[m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[224z","kf2":"\u001b[225z","kf3":"\u001b[226z","kf4":"\u001b[227z","kf5":"\u001b[228z","kf6":"\u001b[229z","kf7":"\u001b[230z","kf8":"\u001b[231z","kf9":"\u001b[232z","kf10":"\u001b[233z","kf11":"\u001b[234z","kf12":"\u001b[235z","kdch":"","khome":"\u001b[214z","kend":"\u001b[220z","kpp":"\u001b[216z","knp":"\u001b[222z","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"sun-type4","cols":80,"lines":34,"bell":"\u0007","clear":"\u000c","sgr0":"\u001b[m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[224z","kf2":"\u001b[225z","kf3":"\u001b[226z","kf4":"\u001b[227z","kf5":"\u001b[228z","kf6":"\u001b[229z","kf7":"\u001b[230z","kf8":"\u001b[231z","kf9":"\u001b[232z","kf10":"\u001b[233z","kf11":"\u001b[234z","kf12":"\u001b[235z","kdch":"","khome":"\u001b[214z","kend":"\u001b[220z","kpp":"\u001b[216z","knp":"\u001b[222z","kcuu1":"\u001b[215z","kcud1":"\u001b[221z","kcub1":"\u001b[217z","kcuf1":"\u001b[219z"} +{"name":"superbee-xsb","cols":80,"lines":25,"clear":"\u001bH\u001bJ$\u003c3\u003e","cnorm":"\n","sgr0":"\u001b_3","cup":"\u001bF%p2%3d%p1%3d","cub1":"\u0008","cuu1":"\u001bA$\u003c3\u003e","pad":"\u0000","kf1":"\u001bp","kf2":"\u001bq","kf3":"\u001br","kf4":"\u001bs","kf5":"\u001bt","kf6":"\u001bu","kf7":"\u001bv","kf8":"\u001bw","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"superbeeic","cols":80,"lines":25,"clear":"\u001bH\u001bJ$\u003c3\u003e","cnorm":"\n","sgr0":"\u001b_3","cup":"\u001bF%p2%3d%p1%3d","cub1":"\u0008","cuu1":"\u001bA$\u003c3\u003e","pad":"\u0000","kf1":"\u001bp","kf2":"\u001bq","kf3":"\u001br","kf4":"\u001bs","kf5":"\u001bt","kf6":"\u001bu","kf7":"\u001bv","kf8":"\u001bw","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"superbrain","cols":80,"lines":24,"bell":"\u0007","clear":"\u000c$\u003c5*\u003e","smcup":"\u000c","rmcup":"\u000c","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c$\u003c20\u003e","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0015","kcuf1":"\u0006"} +{"name":"swtp","aliases":["ct82"],"cols":82,"lines":20,"bell":"\u0007","clear":"\u000c","cup":"\u000b%p2%c%p1%c","cub1":"\u0004","cuu1":"\u0001","pad":"\u0000"} +{"name":"synertek","aliases":["ktm","synertek380"],"cols":80,"lines":24,"clear":"\u001a","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000"} +{"name":"t10","cols":80,"lines":24,"clear":"\u001bj$\u003c30/\u003e","smul":"\u001bRH","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\ufffd"} +{"name":"t1061","aliases":["teleray"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c$\u003c1\u003e","smul":"\u001bRH","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kf1":"\u001a1","kf2":"\u001a2","kf3":"\u001a3","kf4":"\u001a4","kf5":"\u001a5","kf6":"\u001a6","kf7":"\u001a7","kf8":"\u001a8"} +{"name":"t1061f","cols":80,"lines":24,"bell":"\u0007","clear":"\u000c$\u003c1\u003e","smul":"\u001bRH","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kf1":"\u001a1","kf2":"\u001a2","kf3":"\u001a3","kf4":"\u001a4","kf5":"\u001a5","kf6":"\u001a6","kf7":"\u001a7","kf8":"\u001a8"} +{"name":"t16","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[U\u001b[?38l","rmcup":"\u001b[V\u001b[24;1f\u001b[?38h","sgr0":"\u001b[m","smul":"\u001b[4m","cup":"%i\u001b[%p1%d;%p2%df","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001a1","kf2":"\u001a2","kf3":"\u001a3","kf4":"\u001a4","kf5":"\u001a5","kf6":"\u001a6","kf7":"\u001a7","kf8":"\u001a8","kf9":"\u001a9","kf10":"\u001a0"} +{"name":"t3800","cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000"} +{"name":"tab132","aliases":["tab","tab132-15"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"tab132-rv","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"tab132-w","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"tab132-w-rv","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"tandem6510","cols":80,"lines":24,"bell":"\u0007","clear":"\u001a$\u003c1/\u003e","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tandem653","aliases":["t653x"],"cols":80,"lines":24,"clear":"\u001bI","sgr0":"\u001b6 ","smul":"\u001b60","cup":"\u0013%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000"} +{"name":"tek4023","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b\u000c$\u003c4/\u003e","cup":"\u001c%p2%' '%+%c%p1%' '%+%c","cub1":"\u0008","pad":"\u0000","kbs":"\u0008"} +{"name":"tek4025-cr","cols":80,"lines":33,"clear":"\u001fera;","smcup":"\u001fwor 33h","rmcup":"\u001fwor 0","cup":"\u001fjum%i%p1%d,%p2%d;","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000"} +{"name":"tek4105","cols":79,"lines":29,"bell":"\u0007","clear":"\u001b[2J\u001b[H","smcup":"\u001b%!1\u001b[?6l\u001b[2J","sgr0":"\u001b[=0;\u003c1m","smul":"\u001b[=5;\u003c2m","bold":"\u001b[=7;\u003c4m","blink":"\u001b[=3;\u003c7m","rev":"\u001b[=1;\u003c3m","dim":"\u001b[=1;\u003c6m","cup":"\u001b[%i%p1%2d;%p2%2dH","cuu1":"\u001b[1A","pad":"\u0000","kbs":"\u0008","kcuu1":"\u001b[1A","kcud1":"\u001b[1B","kcub1":"\u001b[1D","kcuf1":"\u001b[1C","smacs":"\u001b[1m","rmacs":"\u001b[m"} +{"name":"tek4105-30","cols":80,"lines":30,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"tek4105a","cols":80,"lines":30,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?6l","rmcup":"\u001b%!0\u001bLBH=\u001b%!1","cnorm":"\u001b%!0\u001bTD10\u001b%!1","civis":"\u001b%!0\u001bTD00\u001b%!1","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOB","kf2":"\u001bOC","kf3":"\u001bOD","kf4":"\u001bOP","kf5":"\u001bOQ","kf6":"\u001bOR","kf7":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","smacs":"\u000e","rmacs":"\u000f"} +{"name":"tek4106brl","aliases":["tek4107brl","tek4109brl"],"cols":80,"lines":32,"bell":"\u0007","clear":"\u001b[H\u001b[J","smcup":"\u001b[?6l","rmcup":"\u001b%!0\u001bLBH=\u001b%!1","cnorm":"\u001b%!0\u001bTD10\u001b%!1","civis":"\u001b%!0\u001bTD00\u001b%!1","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOB","kf2":"\u001bOC","kf3":"\u001bOD","kf4":"\u001bOP","kf5":"\u001bOQ","kf6":"\u001bOR","kf7":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","smacs":"\u000e","rmacs":"\u000f"} +{"name":"tek4107","aliases":["tek4109"],"cols":79,"lines":29,"bell":"\u0007","clear":"\u001bLZ","cnorm":"\u001b%!0","sgr0":"\u001b%!1\u001b[m$\u003c2\u003e\u001b%!0","smul":"\u001b%!1\u001b[4m$\u003c2\u003e\u001b%!0","bold":"\u001b%!1\u001b[1m$\u003c2\u003e\u001b%!0","blink":"\u001b%!1\u001b[5m$\u003c2\u003e\u001b%!0","rev":"\u001b%!1\u001b[7m$\u003c2\u003e\u001b%0","dim":"\u001b%!1\u001b[\u003c0m$\u003c2\u003e\u001b%!0","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"tek4112","aliases":["tek4114"],"cols":80,"lines":34,"clear":"\u001b[2J\u001b[0;0H","sgr0":"\u001b[m","smul":"\u001b[4m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000"} +{"name":"tek4112-5","cols":80,"lines":5,"clear":"\u001b[2J\u001b[0;0H","sgr0":"\u001b[m","smul":"\u001b[4m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000"} +{"name":"tek4112-nd","cols":80,"lines":34,"clear":"\u001b[2J\u001b[0;0H","sgr0":"\u001b[m","smul":"\u001b[4m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000"} +{"name":"tek4115","cols":80,"lines":34,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"tek4125","cols":80,"lines":34,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"tek4205","cols":80,"lines":30,"bell":"\u0007","clear":"\u001b[2J\u001b[H","smcup":"\u001b%%!1\u001b[?6l\u001b[2J","sgr0":"\u001b[=0;\u003c1m\u001b[24;25;27m\u000f","smul":"\u001b[4m","bold":"\u001b[=7;\u003c4m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[=1;\u003c6m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOB","kf2":"\u001bOC","kf3":"\u001bOD","kf4":"\u001bP","kf5":"\u001bQ","kf6":"\u001bR","kf7":"\u001bS","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"tek4207","cols":80,"lines":32,"clear":"\u001b[H\u001b[J$\u003c156/\u003e","smcup":"\u001b[?6l\u001b[H\u001b[J","rmcup":"\u001b[?6h\u001b%!0\u001bLBP0\u001b%!1\u001b[32;1f","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","khome":"\u001b[H","kcuu1":"\u001bM","kcud1":"\u001bD","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"tek4207-s","cols":79,"lines":29,"bell":"\u0007","clear":"\u001bLZ","cnorm":"\u001b%!0","sgr0":"\u001b%!1\u001b[m$\u003c2\u003e\u001b%!0","smul":"\u001b%!1\u001b[4m$\u003c2\u003e\u001b%!0","bold":"\u001b%!1\u001b[1m$\u003c2\u003e\u001b%!0","blink":"\u001b%!1\u001b[5m$\u003c2\u003e\u001b%!0","rev":"\u001b%!1\u001b[7m$\u003c2\u003e\u001b%0","dim":"\u001b%!1\u001b[\u003c0m$\u003c2\u003e\u001b%!0","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"tek4404","cols":80,"lines":32,"clear":"\u001b[H\u001b[2J","smcup":"\u001b%\u001b!1\u001b[1;32r\u001b[?6l\u001b\u003e","rmcup":"\u001b[1;1H\u001b[0J\u001b[?6h\u001b[?1l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","smkx":"\u001b[?1l","rmkx":"\u001b[?1h","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"teraterm","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"teraterm2.3","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdi\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"teraterm4.59","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"ti916","aliases":["ti916-220-7"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J$\u003c6\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%p1%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[17~","kf2":"\u001b[18~","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kf9":"\u001b[26~","kf10":"\u001b[28~","kf11":"\u001b[29~","kf12":"\u001b[31~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","khlp":"\u001b[28~","kpp":"\u001b[T","knp":"\u001b[S","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kprt":"\u0018","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e$\u003c2\u003e","rmacs":"\u000f$\u003c2\u003e","enacs":"\u001b(B\u001b)0"} +{"name":"ti916-132","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J$\u003c6\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%p1%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[17~","kf2":"\u001b[18~","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kf9":"\u001b[26~","kf10":"\u001b[28~","kf11":"\u001b[29~","kf12":"\u001b[31~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","khlp":"\u001b[28~","kpp":"\u001b[T","knp":"\u001b[S","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kprt":"\u0018","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e$\u003c2\u003e","rmacs":"\u000f$\u003c2\u003e","enacs":"\u001b(B\u001b)0"} +{"name":"ti916-8","aliases":["ti916-220-8"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J$\u003c6\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%p1%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\ufffd17~","kf2":"\ufffd18~","kf3":"\ufffd19~","kf4":"\ufffd20~","kf5":"\ufffd21~","kf6":"\ufffd23~","kf7":"\ufffd24~","kf8":"\ufffd25~","kf9":"\ufffd26~","kf10":"\ufffd28~","kf11":"\ufffd29~","kf12":"\ufffd31~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\ufffd@","kdch":"\ufffdP","khome":"\ufffdH","khlp":"\u001b[28~","kpp":"\ufffdT","knp":"\ufffdS","kcuu1":"\ufffdA","kcud1":"\ufffdB","kcub1":"\ufffdD","kcuf1":"\ufffdC","kprt":"\u0018","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e$\u003c2\u003e","rmacs":"\u000f$\u003c2\u003e","enacs":"\u001b(B\u001b)0"} +{"name":"ti916-8-132","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J$\u003c6\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%p1%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\ufffd17~","kf2":"\ufffd18~","kf3":"\ufffd19~","kf4":"\ufffd20~","kf5":"\ufffd21~","kf6":"\ufffd23~","kf7":"\ufffd24~","kf8":"\ufffd25~","kf9":"\ufffd26~","kf10":"\ufffd28~","kf11":"\ufffd29~","kf12":"\ufffd31~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\ufffd@","kdch":"\ufffdP","khome":"\ufffdH","khlp":"\u001b[28~","kpp":"\ufffdT","knp":"\ufffdS","kcuu1":"\ufffdA","kcud1":"\ufffdB","kcub1":"\ufffdD","kcuf1":"\ufffdC","kprt":"\u0018","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e$\u003c2\u003e","rmacs":"\u000f$\u003c2\u003e","enacs":"\u001b(B\u001b)0"} +{"name":"ti924","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[H","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"%i\u001b[%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[16~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kich":"\u001b[@","kdch":"\u001b[P","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"ti924-8","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[H","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"%i\u001b[%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"P$\u003c\ufffd\u003e","kf2":"Q$\u003c\ufffd\u003e","kf3":"R$\u003c\ufffd\u003e","kf4":"S$\u003c\ufffd\u003e","kf5":"~$\u003c\ufffd16\u003e","kf6":"~$\u003c\ufffd17\u003e","kf7":"~$\u003c\ufffd18\u003e","kf8":"~$\u003c\ufffd19\u003e","kf9":"~$\u003c\ufffd20\u003e","kich":"@$\u003c\ufffd\u003e","kdch":"P$\u003c\ufffd\u003e","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"ti924-8w","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[H","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"%i\u001b[%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"P$\u003c\ufffd\u003e","kf2":"Q$\u003c\ufffd\u003e","kf3":"R$\u003c\ufffd\u003e","kf4":"S$\u003c\ufffd\u003e","kf5":"~$\u003c\ufffd16\u003e","kf6":"~$\u003c\ufffd17\u003e","kf7":"~$\u003c\ufffd18\u003e","kf8":"~$\u003c\ufffd19\u003e","kf9":"~$\u003c\ufffd20\u003e","kich":"@$\u003c\ufffd\u003e","kdch":"P$\u003c\ufffd\u003e","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"ti924w","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[H","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"%i\u001b[%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[16~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kich":"\u001b[@","kdch":"\u001b[P","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"ti926","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[H","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"%i\u001b[%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[16~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kich":"\u001b[@","kdch":"\u001b[P","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"ti926-8","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[H","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"%i\u001b[%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"P$\u003c\ufffd\u003e","kf2":"Q$\u003c\ufffd\u003e","kf3":"R$\u003c\ufffd\u003e","kf4":"S$\u003c\ufffd\u003e","kf5":"~$\u003c\ufffd16\u003e","kf6":"~$\u003c\ufffd17\u003e","kf7":"~$\u003c\ufffd18\u003e","kf8":"~$\u003c\ufffd19\u003e","kf9":"~$\u003c\ufffd20\u003e","kich":"@$\u003c\ufffd\u003e","kdch":"P$\u003c\ufffd\u003e","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"ti928","cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[2J\u001b[H","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[17~","kf2":"\u001b[18~","kf3":"\u001b[19~","kf4":"\u001b[20~","kf5":"\u001b[21~","kf6":"\u001b[23~","kf7":"\u001b[24~","kf8":"\u001b[25~","kf9":"\u001b[26~","kf10":"\u001b[28~","kf11":"\u001b[29~","kf12":"\u001b[31~","kf13":"\u001b[32~","kf15":"\u001b[34~","kich":"\u001b[@","kdch":"\u001b[P","khome":"\u001b[H","kend":"\u001b_1\u001b\\","kpp":"\u001b[T","knp":"\u001b[S","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kprt":"\u001b[35~","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"ti928-8","cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[2J\u001b[H","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\ufffd17~","kf2":"\ufffd18~","kf3":"\ufffd19~","kf4":"\ufffd20~","kf5":"\ufffd21~","kf6":"\ufffd23~","kf7":"\ufffd24~","kf8":"\ufffd25~","kf9":"\ufffd26~","kf10":"\ufffd28~","kf11":"\ufffd29~","kf12":"\ufffd31~","kf13":"\ufffd32~","kf15":"\ufffd34~","kich":"\ufffd@","kdch":"\ufffdP","khome":"\ufffdH","kend":"\ufffd1\ufffd","kpp":"\ufffdT","knp":"\ufffdS","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kprt":"\ufffd35~","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"ti931","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bL","cnorm":"\u001b4@","sgr0":"\u001b4@","smul":"\u001b4D","blink":"\u001b4P","rev":"\u001b4B","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u001bD","cuu1":"\u001bA","pad":"\u0000","kf1":"\u001bi1","kf2":"\u001bi2","kf3":"\u001bi3","kf4":"\u001bi4","kf5":"\u001bi5","kf6":"\u001bi6","kf7":"\u001bi7","kf8":"\u001bi8","kf9":"\u001bi9","kich":"\u001bP","kdch":"\u001bQ","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"ti_ansi","cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[2J\u001b[H","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"trs16","cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","cnorm":"\u001bRC","civis":"\u001bRc","sgr0":"\u001bR@","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u0002","kf2":"\u0004","kf3":"\u000c","kf4":"\u0015","kf5":"\u0010","kf6":"\u000e","kf7":"\u0013","khome":"\u0017","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","acsc":"jak`l_mbquvewcxs","smacs":"\u001bRG","rmacs":"\u001bRg"} +{"name":"trs2","aliases":["trs80II","trsII"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","sgr0":"\u000f","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001e","pad":"\u0000","kbs":"\u0008","kcuu1":"\u001e","kcud1":"\u001f","kcub1":"\u001c","kcuf1":"\u001d"} +{"name":"ts100","aliases":["ts100-sp"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"ts100-ctxt","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","smcup":"\u001b~_d\u001b[2J","rmcup":"\u001b~_b","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"tt","aliases":["tkterm"],"cols":-1,"lines":-1,"clear":"\u001b[H\u001b[J","cup":"\u001b[%p1%d;%p2%dH","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOT","kf6":"\u001bOU","kf7":"\u001bOV","kf8":"\u001bOW","kf9":"\u001bOX"} +{"name":"tt505-22","aliases":["gs5430-22","pt505-22"],"cols":80,"lines":22,"bell":"\u0007","clear":"\u001b[2J\u001b[H","cnorm":"\u001b[\u003el","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[01s","kf2":"\u001b[02s","kf3":"\u001b[03s","kf4":"\u001b[04s","kf5":"\u001b[05s","kf6":"\u001b[06s","kf18":"\u001b[18s","kf19":"\u001b[19s","kf20":"\u001b[20s","kf21":"\u001b[21s","kf22":"\u001b[22s","kf23":"\u001b[23s","kf24":"\u001b[24s","kf26":"\u001b[26s","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b[11m","rmacs":"\u001b[10m"} +{"name":"tvi803","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*$\u003c10\u003e","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kclr":"\u001b*","acsc":"b\tc\u000cd\re\ni\u000b","smacs":"\u0015","rmacs":"\u0018"} +{"name":"tvi9065","cols":80,"lines":25,"bell":"\u0007","clear":"\u001a","smcup":"\u001b.2","rmcup":"\u001b.3\u001br\u001b[1;25r\u001b[25;0H","cnorm":"\u001b.3","civis":"\u001b.0","sgr0":"\u001bG0","smul":"\u001bG8","bold":"\u001bG,","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kdch":"\u001bW","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","acsc":"'r0_jhkglfmeniopqksqtmulvownxj","smacs":"\u001b$","rmacs":"\u001b%%","kHOM":"\u001b "} +{"name":"tvi910","cols":80,"lines":24,"bell":"\u0007","clear":"\u001a","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tvi910+","cols":80,"lines":24,"bell":"\u0007","clear":"\u001a","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001A\r","kf2":"\u0001B\r","kf3":"\u0001C\r","kf4":"\u0001D\r","kf5":"\u0001E\r","kf6":"\u0001F\r","kf7":"\u0001G\r","kf8":"\u0001H\r","kf9":"\u0001I\r","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tvi912","aliases":["tvi914","tvi920"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001a","smul":"\u001bl","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tvi912b","aliases":["tvi912c"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001a$\u003c50\u003e","sgr0":"\u001b(","dim":"\u001b)","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kdch":"","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tvi912b-2p","aliases":["tvi912c-2p"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001a$\u003c50\u003e","smcup":"\u001bK\u001a$\u003c50\u003e\u001b(\u001bk\u0008\u001bm\u0008\u001bq\u001a$\u003c50\u003e","rmcup":"\u001a$\u003c50\u003e\u001bK\u001b=7 ","sgr0":"\u001b(","dim":"\u001b)","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kdch":"","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tvi912b-2p-mc","aliases":["tvi912b-mc-2p","tvi912c-2p-mc","tvi912c-mc-2p"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001a$\u003c50\u003e","smcup":"\u001bK\u001a$\u003c50\u003e\u001b(\u001bk\u0008\u001bm\u0008\u001bq\u001a$\u003c50\u003e","rmcup":"\u001a$\u003c50\u003e\u001bK\u001b=7 ","sgr0":"\u001b(\u001bk\u0008\u001bm\u0008\u001bq","smul":"\u001bl","blink":"\u001b^","rev":"\u001bj","dim":"\u001b) ","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kdch":"","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tvi912b-2p-p","aliases":["tvi912b-p-2p","tvi912c-2p-p","tvi912c-p-2p"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001a$\u003c50\u003e","smcup":"\u001bK\u001a$\u003c50\u003e\u001b(\u001bk\u0008\u001bm\u0008\u001bq\u001a$\u003c50\u003e","rmcup":"\u001a$\u003c50\u003e\u001bK\u001b=7 ","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kdch":"","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tvi912b-2p-unk","aliases":["tvi912b-unk-2p","tvi912c-2p-unk","tvi912c-unk-2p"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001a$\u003c50\u003e","smcup":"\u001bK\u001a$\u003c50\u003e\u001b(\u001bk\u0008\u001bm\u0008\u001bq\u001a$\u003c50\u003e","rmcup":"\u001a$\u003c50\u003e\u001bK\u001b=7 ","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kdch":"","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tvi912b-mc","aliases":["tvi912c-mc"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001a$\u003c50\u003e","sgr0":"\u001b(\u001bk\u0008\u001bm\u0008\u001bq","smul":"\u001bl","blink":"\u001b^","rev":"\u001bj","dim":"\u001b) ","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kdch":"","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tvi912b-p","aliases":["tvi912c-p"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001a$\u003c50\u003e","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kdch":"","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tvi912b-unk","aliases":["tvi912c-unk"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001a$\u003c50\u003e","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kdch":"","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tvi912b-vb","aliases":["tvi912c-vb"],"cols":80,"lines":24,"bell":"\u001bK$\u003c100\u003e\u001bK","clear":"\u001a$\u003c50\u003e","smcup":"\u001bK\u001a$\u003c50\u003e\u001b(\u001bk\u0008\u001bm\u0008\u001bq\u001a$\u003c50\u003e","rmcup":"\u001a$\u003c50\u003e\u001bK\u001b=7 ","sgr0":"\u001b(","dim":"\u001b)","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kdch":"","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tvi912b-vb-mc","aliases":["tvi912b-mc-vb","tvi912c-mc-vb","tvi912c-vb-mc"],"cols":80,"lines":24,"bell":"\u001bK$\u003c100\u003e\u001bK","clear":"\u001a$\u003c50\u003e","smcup":"\u001bK\u001a$\u003c50\u003e\u001b(\u001bk\u0008\u001bm\u0008\u001bq\u001a$\u003c50\u003e","rmcup":"\u001a$\u003c50\u003e\u001bK\u001b=7 ","sgr0":"\u001b(\u001bk\u0008\u001bm\u0008\u001bq","smul":"\u001bl","blink":"\u001b^","rev":"\u001bj","dim":"\u001b) ","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kdch":"","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tvi912b-vb-p","aliases":["tvi912b-p-vb","tvi912c-p-vb","tvi912c-vb-p"],"cols":80,"lines":24,"bell":"\u001bK$\u003c100\u003e\u001bK","clear":"\u001a$\u003c50\u003e","smcup":"\u001bK\u001a$\u003c50\u003e\u001b(\u001bk\u0008\u001bm\u0008\u001bq\u001a$\u003c50\u003e","rmcup":"\u001a$\u003c50\u003e\u001bK\u001b=7 ","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kdch":"","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tvi912b-vb-unk","aliases":["tvi912b-unk-vb","tvi912c-unk-vb","tvi912c-vb-unk"],"cols":80,"lines":24,"bell":"\u001bK$\u003c100\u003e\u001bK","clear":"\u001a$\u003c50\u003e","smcup":"\u001bK\u001a$\u003c50\u003e\u001b(\u001bk\u0008\u001bm\u0008\u001bq\u001a$\u003c50\u003e","rmcup":"\u001a$\u003c50\u003e\u001bK\u001b=7 ","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kdch":"","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tvi920b","aliases":["tvi920c"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001a$\u003c50\u003e","sgr0":"\u001b(","dim":"\u001b)","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001`\r","kf13":"\u0001a\r","kf14":"\u0001b\r","kf15":"\u0001c\r","kf16":"\u0001d\r","kf17":"\u0001e\r","kf18":"\u0001f\r","kf19":"\u0001g\r","kf20":"\u0001h\r","kf21":"\u0001i\r","kf22":"\u0001j\r","kdch":"","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tvi920b-2p","aliases":["tvi920c-2p"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001a$\u003c50\u003e","smcup":"\u001bK\u001a$\u003c50\u003e\u001b(\u001bk\u0008\u001bm\u0008\u001bq\u001a$\u003c50\u003e","rmcup":"\u001a$\u003c50\u003e\u001bK\u001b=7 ","sgr0":"\u001b(","dim":"\u001b)","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001`\r","kf13":"\u0001a\r","kf14":"\u0001b\r","kf15":"\u0001c\r","kf16":"\u0001d\r","kf17":"\u0001e\r","kf18":"\u0001f\r","kf19":"\u0001g\r","kf20":"\u0001h\r","kf21":"\u0001i\r","kf22":"\u0001j\r","kdch":"","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tvi920b-2p-mc","aliases":["tvi920b-mc-2p","tvi920c-2p-mc","tvi920c-mc-2p"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001a$\u003c50\u003e","smcup":"\u001bK\u001a$\u003c50\u003e\u001b(\u001bk\u0008\u001bm\u0008\u001bq\u001a$\u003c50\u003e","rmcup":"\u001a$\u003c50\u003e\u001bK\u001b=7 ","sgr0":"\u001b(\u001bk\u0008\u001bm\u0008\u001bq","smul":"\u001bl","blink":"\u001b^","rev":"\u001bj","dim":"\u001b) ","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001`\r","kf13":"\u0001a\r","kf14":"\u0001b\r","kf15":"\u0001c\r","kf16":"\u0001d\r","kf17":"\u0001e\r","kf18":"\u0001f\r","kf19":"\u0001g\r","kf20":"\u0001h\r","kf21":"\u0001i\r","kf22":"\u0001j\r","kdch":"","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tvi920b-2p-p","aliases":["tvi920b-p-2p","tvi920c-2p-p","tvi920c-p-2p"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001a$\u003c50\u003e","smcup":"\u001bK\u001a$\u003c50\u003e\u001b(\u001bk\u0008\u001bm\u0008\u001bq\u001a$\u003c50\u003e","rmcup":"\u001a$\u003c50\u003e\u001bK\u001b=7 ","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001`\r","kf13":"\u0001a\r","kf14":"\u0001b\r","kf15":"\u0001c\r","kf16":"\u0001d\r","kf17":"\u0001e\r","kf18":"\u0001f\r","kf19":"\u0001g\r","kf20":"\u0001h\r","kf21":"\u0001i\r","kf22":"\u0001j\r","kdch":"","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tvi920b-2p-unk","aliases":["tvi920b-unk-2p","tvi920c-2p-unk","tvi920c-unk-2p"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001a$\u003c50\u003e","smcup":"\u001bK\u001a$\u003c50\u003e\u001b(\u001bk\u0008\u001bm\u0008\u001bq\u001a$\u003c50\u003e","rmcup":"\u001a$\u003c50\u003e\u001bK\u001b=7 ","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001`\r","kf13":"\u0001a\r","kf14":"\u0001b\r","kf15":"\u0001c\r","kf16":"\u0001d\r","kf17":"\u0001e\r","kf18":"\u0001f\r","kf19":"\u0001g\r","kf20":"\u0001h\r","kf21":"\u0001i\r","kf22":"\u0001j\r","kdch":"","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tvi920b-mc","aliases":["tvi920c-mc"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001a$\u003c50\u003e","sgr0":"\u001b(\u001bk\u0008\u001bm\u0008\u001bq","smul":"\u001bl","blink":"\u001b^","rev":"\u001bj","dim":"\u001b) ","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001`\r","kf13":"\u0001a\r","kf14":"\u0001b\r","kf15":"\u0001c\r","kf16":"\u0001d\r","kf17":"\u0001e\r","kf18":"\u0001f\r","kf19":"\u0001g\r","kf20":"\u0001h\r","kf21":"\u0001i\r","kf22":"\u0001j\r","kdch":"","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tvi920b-p","aliases":["tvi920c-p"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001a$\u003c50\u003e","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001`\r","kf13":"\u0001a\r","kf14":"\u0001b\r","kf15":"\u0001c\r","kf16":"\u0001d\r","kf17":"\u0001e\r","kf18":"\u0001f\r","kf19":"\u0001g\r","kf20":"\u0001h\r","kf21":"\u0001i\r","kf22":"\u0001j\r","kdch":"","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tvi920b-unk","aliases":["tvi920c-unk"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001a$\u003c50\u003e","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001`\r","kf13":"\u0001a\r","kf14":"\u0001b\r","kf15":"\u0001c\r","kf16":"\u0001d\r","kf17":"\u0001e\r","kf18":"\u0001f\r","kf19":"\u0001g\r","kf20":"\u0001h\r","kf21":"\u0001i\r","kf22":"\u0001j\r","kdch":"","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tvi920b-vb","aliases":["tvi920c-vb"],"cols":80,"lines":24,"bell":"\u001bK$\u003c100\u003e\u001bK","clear":"\u001a$\u003c50\u003e","smcup":"\u001bK\u001a$\u003c50\u003e\u001b(\u001bk\u0008\u001bm\u0008\u001bq\u001a$\u003c50\u003e","rmcup":"\u001a$\u003c50\u003e\u001bK\u001b=7 ","sgr0":"\u001b(","dim":"\u001b)","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001`\r","kf13":"\u0001a\r","kf14":"\u0001b\r","kf15":"\u0001c\r","kf16":"\u0001d\r","kf17":"\u0001e\r","kf18":"\u0001f\r","kf19":"\u0001g\r","kf20":"\u0001h\r","kf21":"\u0001i\r","kf22":"\u0001j\r","kdch":"","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tvi920b-vb-mc","aliases":["tvi920b-mc-vb","tvi920c-mc-vb","tvi920c-vb-mc"],"cols":80,"lines":24,"bell":"\u001bK$\u003c100\u003e\u001bK","clear":"\u001a$\u003c50\u003e","smcup":"\u001bK\u001a$\u003c50\u003e\u001b(\u001bk\u0008\u001bm\u0008\u001bq\u001a$\u003c50\u003e","rmcup":"\u001a$\u003c50\u003e\u001bK\u001b=7 ","sgr0":"\u001b(\u001bk\u0008\u001bm\u0008\u001bq","smul":"\u001bl","blink":"\u001b^","rev":"\u001bj","dim":"\u001b) ","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001`\r","kf13":"\u0001a\r","kf14":"\u0001b\r","kf15":"\u0001c\r","kf16":"\u0001d\r","kf17":"\u0001e\r","kf18":"\u0001f\r","kf19":"\u0001g\r","kf20":"\u0001h\r","kf21":"\u0001i\r","kf22":"\u0001j\r","kdch":"","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tvi920b-vb-p","aliases":["tvi920b-p-vb","tvi920c-p-vb","tvi920c-vb-p"],"cols":80,"lines":24,"bell":"\u001bK$\u003c100\u003e\u001bK","clear":"\u001a$\u003c50\u003e","smcup":"\u001bK\u001a$\u003c50\u003e\u001b(\u001bk\u0008\u001bm\u0008\u001bq\u001a$\u003c50\u003e","rmcup":"\u001a$\u003c50\u003e\u001bK\u001b=7 ","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001`\r","kf13":"\u0001a\r","kf14":"\u0001b\r","kf15":"\u0001c\r","kf16":"\u0001d\r","kf17":"\u0001e\r","kf18":"\u0001f\r","kf19":"\u0001g\r","kf20":"\u0001h\r","kf21":"\u0001i\r","kf22":"\u0001j\r","kdch":"","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tvi920b-vb-unk","aliases":["tvi920b-unk-vb","tvi920c-unk-vb","tvi920c-vb-unk"],"cols":80,"lines":24,"bell":"\u001bK$\u003c100\u003e\u001bK","clear":"\u001a$\u003c50\u003e","smcup":"\u001bK\u001a$\u003c50\u003e\u001b(\u001bk\u0008\u001bm\u0008\u001bq\u001a$\u003c50\u003e","rmcup":"\u001a$\u003c50\u003e\u001bK\u001b=7 ","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001`\r","kf13":"\u0001a\r","kf14":"\u0001b\r","kf15":"\u0001c\r","kf16":"\u0001d\r","kf17":"\u0001e\r","kf18":"\u0001f\r","kf19":"\u0001g\r","kf20":"\u0001h\r","kf21":"\u0001i\r","kf22":"\u0001j\r","kdch":"","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tvi921","cols":80,"lines":24,"clear":"\u001a","cnorm":"\u001b.3","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c$\u003c3/\u003e","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kich":"\u001bQ","kdch":"\u001bW","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kclr":"\u001a","smacs":"\u001b$","rmacs":"\u001b%%"} +{"name":"tvi924","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*0","cnorm":"\u001b.3","civis":"\u001b.0","sgr0":"\u001bG0","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001A\r","kf2":"\u0001B\r","kf3":"\u0001C\r","kf4":"\u0001D\r","kf5":"\u0001E\r","kf6":"\u0001F\r","kf7":"\u0001G\r","kf8":"\u0001H\r","kf9":"\u0001I\r","kf10":"\u0001J\r","kf11":"\u0001K\r","kf12":"\u0001L\r","kf13":"\u0001M\r","kf14":"\u0001N\r","kf15":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kclr":"\u001b*0"} +{"name":"tvi925","cols":80,"lines":24,"bell":"\u0007","clear":"\u001a","cnorm":"\u001b.4","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kclr":"\u001a"} +{"name":"tvi925-hi","cols":80,"lines":24,"bell":"\u0007","clear":"\u001a","cnorm":"\u001b.4","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kclr":"\u001a"} +{"name":"tvi92B","cols":80,"lines":24,"clear":"\u001a","cnorm":"\u001b.3","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c$\u003c3/\u003e","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kich":"\u001bQ","kdch":"\u001bW","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kclr":"\u001a","smacs":"\u001b$","rmacs":"\u001b%%"} +{"name":"tvi92D","cols":80,"lines":24,"clear":"\u001a","cnorm":"\u001b.3","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c$\u003c3/\u003e","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kich":"\u001bQ","kdch":"\u001bW","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kclr":"\u001a","smacs":"\u001b$","rmacs":"\u001b%%"} +{"name":"tvi950","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kclr":"\u001b*","acsc":"b\tc\u000cd\re\ni\u000b","smacs":"\u0015","rmacs":"\u0018"} +{"name":"tvi950-2p","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*","smcup":"\u001b\\1\u001b-07 ","rmcup":"\u001b\\2\u001b-07 ","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","smkx":"\u001bl","rmkx":"\u001bk","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kclr":"\u001b*","acsc":"b\tc\u000cd\re\ni\u000b","smacs":"\u0015","rmacs":"\u0018"} +{"name":"tvi950-4p","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*","smcup":"\u001b\\1\u001b-07 ","rmcup":"\u001b\\3\u001b-07 ","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","smkx":"\u001bl","rmkx":"\u001bk","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kclr":"\u001b*","acsc":"b\tc\u000cd\re\ni\u000b","smacs":"\u0015","rmacs":"\u0018"} +{"name":"tvi950-rv","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kclr":"\u001b*","acsc":"b\tc\u000cd\re\ni\u000b","smacs":"\u0015","rmacs":"\u0018"} +{"name":"tvi950-rv-2p","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*","smcup":"\u001b\\1\u001b-07 ","rmcup":"\u001b\\2\u001b-07 ","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","smkx":"\u001bl","rmkx":"\u001bk","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kclr":"\u001b*","acsc":"b\tc\u000cd\re\ni\u000b","smacs":"\u0015","rmacs":"\u0018"} +{"name":"tvi950-rv-4p","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*","smcup":"\u001b\\1\u001b-07 ","rmcup":"\u001b\\3\u001b-07 ","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","smkx":"\u001bl","rmkx":"\u001bk","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kclr":"\u001b*","acsc":"b\tc\u000cd\re\ni\u000b","smacs":"\u0015","rmacs":"\u0018"} +{"name":"tvi955","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*","cnorm":"\u001b.2","civis":"\u001b.0","sgr0":"\u001bG0\u001b[=5l","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001b[=5h","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kclr":"\u001b*","acsc":"0_`RjHkGlFmEnIoPqKsQtMuLvOwNxJ","smacs":"\u001b$","rmacs":"\u001b%%"} +{"name":"tvi955-hb","aliases":["955-hb"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*","cnorm":"\u001b.2","civis":"\u001b.0","sgr0":"\u001bG0\u001b[=5h","smul":"\u001bG8","bold":"\u001b[=5l","blink":"\u001bG2","rev":"\u001bG4","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kclr":"\u001b*","acsc":"0_`RjHkGlFmEnIoPqKsQtMuLvOwNxJ","smacs":"\u001b$","rmacs":"\u001b%%"} +{"name":"tvi955-w","aliases":["955-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b*","cnorm":"\u001b.2","civis":"\u001b.0","sgr0":"\u001bG0\u001b[=5l","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001b[=5h","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\u0016","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kclr":"\u001b*","acsc":"0_`RjHkGlFmEnIoPqKsQtMuLvOwNxJ","smacs":"\u001b$","rmacs":"\u001b%%"} +{"name":"tvi970","cols":80,"lines":24,"clear":"\u001b[H\u001b[2J","smcup":"\u001b[?20l\u001b[?7h\u001b[1Q","sgr0":"\u001b[m","smul":"\u001b[4m","cup":"\u001b[%i%p1%d;%p2%df","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kf1":"\u001b?a","kf2":"\u001b?b","kf3":"\u001b?c","kf4":"\u001b?d","kf5":"\u001b?e","kf6":"\u001b?f","kf7":"\u001b?g","kf8":"\u001b?h","kf9":"\u001b?i","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","smacs":"\u001b(B","rmacs":"\u001b(B"} +{"name":"tvi970-2p","cols":80,"lines":24,"clear":"\u001b[H\u001b[2J","smcup":"\u001b[U\u001b[?20l\u001b[?7h\u001b[1Q","rmcup":"\u001b[H\u001b[J\u001b[V","sgr0":"\u001b[m","smul":"\u001b[4m","cup":"\u001b[%i%p1%d;%p2%df","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kf1":"\u001b?a","kf2":"\u001b?b","kf3":"\u001b?c","kf4":"\u001b?d","kf5":"\u001b?e","kf6":"\u001b?f","kf7":"\u001b?g","kf8":"\u001b?h","kf9":"\u001b?i","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","smacs":"\u001b(B","rmacs":"\u001b(B"} +{"name":"tvi970-vb","cols":80,"lines":24,"clear":"\u001b[H\u001b[2J","smcup":"\u001b[?20l\u001b[?7h\u001b[1Q","sgr0":"\u001b[m","smul":"\u001b[4m","cup":"\u001b[%i%p1%d;%p2%df","cub1":"\u0008","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kf1":"\u001b?a","kf2":"\u001b?b","kf3":"\u001b?c","kf4":"\u001b?d","kf5":"\u001b?e","kf6":"\u001b?f","kf7":"\u001b?g","kf8":"\u001b?h","kf9":"\u001b?i","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","smacs":"\u001b(B","rmacs":"\u001b(B"} +{"name":"tvipt","cols":80,"lines":24,"clear":"\u001a","smul":"\u001bG1B@\u001bH","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0002","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"tws-generic","aliases":["dku7102"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J","smcup":"\u001b[?\u003eh\u001bPY99:98\u001b\\","rmcup":"\u001b[0;98v\u001b[2J\u001b[v","cnorm":"\u001b[r","civis":"\u001b[1r","sgr0":"\u001b[m\u000f","smul":"\u001b[0;4m","blink":"\u001b[0;5m","rev":"\u001b[0;7m","dim":"\u001b[0;2m","cup":"\u001b[%i%p1%d;%p2%df","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[1u\u0017","kf2":"\u001b[2u\u0017","kf3":"\u001b[3u\u0017","kf4":"\u001b[4u\u0017","kf5":"\u001b[5u\u0017","kf6":"\u001b[6u\u0017","kf7":"\u001b[7u\u0017","kf8":"\u001b[8u\u0017","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggj)k,l\u0026m#n/ooppq*rrsst'u-v+w.x%yyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"tws2102-sna","aliases":["dku7102-sna"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J","smcup":"\u001b[?\u003eh\u001bPY99:98\u001b\\","rmcup":"\u001b[0;98v\u001b[2J\u001b[v","cnorm":"\u001b[r","civis":"\u001b[1r","sgr0":"\u001b[m\u000f","smul":"\u001b[0;4m","blink":"\u001b[0;5m","rev":"\u001b[0;7m","dim":"\u001b[0;2m","cup":"\u001b[%i%p1%d;%p2%df","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[1u\u0017","kf2":"\u001b[2u\u0017","kf3":"\u001b[3u\u0017","kf4":"\u001b[4u\u0017","kf5":"\u001b[5u\u0017","kf6":"\u001b[6u\u0017","kf7":"\u001b[7u\u0017","kf8":"\u001b[8u\u0017","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggj)k,l\u0026m#n/ooppq*rrsst'u-v+w.x%yyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"tws2103","aliases":["xdku"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J","smcup":"\u001b[?\u003eh\u001bPY99:98\u001b\\","rmcup":"\u001b[0;98v\u001b[2J\u001b[v","cnorm":"\u001b[r","civis":"\u001b[1r","sgr0":"\u001b[m\u000f","smul":"\u001b[0;4m","blink":"\u001b[0;5m","rev":"\u001b[0;7m","dim":"\u001b[0;2m","cup":"\u001b[%i%p1%d;%p2%df","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[1u\u0017","kf2":"\u001b[2u\u0017","kf3":"\u001b[3u\u0017","kf4":"\u001b[4u\u0017","kf5":"\u001b[5u\u0017","kf6":"\u001b[6u\u0017","kf7":"\u001b[7u\u0017","kf8":"\u001b[8u\u0017","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggj)k,l\u0026m#n/ooppq*rrsst'u-v+w.x%yyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"tws2103-sna","aliases":["dku7103-sna"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J","smcup":"\u001b[?\u003eh\u001bPY99:98\u001b\\","rmcup":"\u001b[0;98v\u001b[2J\u001b[v","cnorm":"\u001b[r","civis":"\u001b[1r","sgr0":"\u001b[m\u000f","smul":"\u001b[0;4m","blink":"\u001b[0;5m","rev":"\u001b[0;7m","dim":"\u001b[0;2m","cup":"\u001b[%i%p1%d;%p2%df","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[1u\u0017","kf2":"\u001b[2u\u0017","kf3":"\u001b[3u\u0017","kf4":"\u001b[4u\u0017","kf5":"\u001b[5u\u0017","kf6":"\u001b[6u\u0017","kf7":"\u001b[7u\u0017","kf8":"\u001b[8u\u0017","kdch":"\u001b[P","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggj)k,l\u0026m#n/ooppq*rrsst'u-v+w.x%yyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"uniterm","aliases":["uniterm49"],"cols":80,"lines":49,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0$\u003c2\u003e","rmacs":"\u001b(B$\u003c4\u003e","enacs":"\u001b)0"} +{"name":"uts30","cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","cnorm":"\u001bS","civis":"\u001bR","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","khome":"\u001b[H","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001bF","rmacs":"\u001bd"} +{"name":"uwin","cols":-1,"lines":-1,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0;10m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOT","kf6":"\u001bOU","kf7":"\u001bOV","kf8":"\u001bOW","kf9":"\u001bOX","kf10":"\u001bOY","kf11":"\u001bOZ","kf12":"\u001bOA","kich":"\u001b[@","kdch":"","khome":"\u001b[H","kend":"\u001b[Y","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"+\u0010,\u0011-\u0018.\u00190\ufffd`\u0004a\ufffdf\ufffdg\ufffdh\ufffdi\ufffdj\ufffdk\ufffdl\ufffdm\ufffdn\ufffdo~p\ufffdq\ufffdr\ufffds_t\ufffdu\ufffdv\ufffdw\ufffdx\ufffdy\ufffdz\ufffd{\ufffd|\ufffd}\ufffd~\ufffd","smacs":"\u001b[11m","rmacs":"\u001b[10m","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"v3220","cols":80,"lines":24,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m","smul":"\u001b[4m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001b[2~","kf2":"\u001b[3~","kf3":"\u001b[4~","kf4":"\u001b[5~","kf5":"\u001b[6~","kf6":"\u001b[OP","kf7":"\u001b[OQ","kf8":"\u001b[OR","kf9":"\u001b[OS","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"v5410","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"vc404","cols":80,"lines":24,"bell":"\u0007","clear":"\u0018$\u003c40\u003e","cup":"\u0010%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","kcuu1":"\u001a","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u0015"} +{"name":"vc404-s","cols":80,"lines":24,"bell":"\u0007","clear":"\u0018$\u003c40\u003e","cup":"\u0010%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","kcuu1":"\u001a","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u0015"} +{"name":"vc414","aliases":["vc414h"],"cols":80,"lines":24,"clear":"\u001b\u001c$\u003c40\u003e","cup":"\u001b\u0011%p2%c%p1%c$\u003c40\u003e","cuu1":"\u001b\u000c","pad":"\u0000","kf1":"\u001bB","kf2":"\u001bC","kf3":"\u001bD","kf4":"\u001bE","kf5":"\u001bF","kf6":"\u001bG","kf7":"\u001bH","khome":"\u001b\u0012","kcuu1":"\u001b\u000c","kcud1":"\u001b\u000b","kcub1":"\u0008","kcuf1":"\u0010"} +{"name":"vc415","cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","cup":"\u0010%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","kcuu1":"\u001a","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u0015"} +{"name":"versaterm","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[;H\u001b[2J$\u003c50/\u003e","sgr0":"\u001b[m$\u003c2/\u003e","smul":"\u001b[4m$\u003c2/\u003e","bold":"\u001b[1m$\u003c2/\u003e","blink":"\u001b[5m$\u003c2/\u003e","rev":"\u001b[7m$\u003c2/\u003e","smkx":"\u001b=\u001b[?1h","rmkx":"\u001b\u003e\u001b[?1l","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5/\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2/\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"vi200","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bv","cnorm":"\u001bc","sgr0":"\u001b3\u001bb","dim":"\u001b4","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001b?q","kf2":"\u001b?r","kf3":"\u001b?s","kf4":"\u001b?t","kf5":"\u001b?u","kf6":"\u001b?v","kf7":"\u001b?w","kf8":"\u001b?x","kf9":"\u001b?y","kich":"\u001bi","kdch":"\u001bO","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kclr":"\u001bv","smacs":"\u001bF","rmacs":"\u001bG"} +{"name":"vi200-f","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bv","cnorm":"\u001bc","sgr0":"\u001b3\u001bb","dim":"\u001b4","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001b?q","kf2":"\u001b?r","kf3":"\u001b?s","kf4":"\u001b?t","kf5":"\u001b?u","kf6":"\u001b?v","kf7":"\u001b?w","kf8":"\u001b?x","kf9":"\u001b?y","kich":"\u001bi","kdch":"\u001bO","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kclr":"\u001bv","smacs":"\u001bF","rmacs":"\u001bG"} +{"name":"vi200-rv","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bv","sgr0":"\u001b3\u001bb","dim":"\u001b4","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001b?q","kf2":"\u001b?r","kf3":"\u001b?s","kf4":"\u001b?t","kf5":"\u001b?u","kf6":"\u001b?v","kf7":"\u001b?w","kf8":"\u001b?x","kf9":"\u001b?y","kich":"\u001bi","kdch":"\u001bO","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kclr":"\u001bv","smacs":"\u001bF","rmacs":"\u001bG"} +{"name":"vi300","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J","sgr0":"\u001b[m","smul":"\u001b[4m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001b_A\u001b\\","kf2":"\u001b_B\u001b\\","kf3":"\u001b_C\u001b\\","kf4":"\u001b_D\u001b\\","kf5":"\u001b_E\u001b\\","kf6":"\u001b_F\u001b\\","kf7":"\u001b_G\u001b\\","kf8":"\u001b_H\u001b\\","kf9":"\u001b_I\u001b\\","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"vi300-old","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J","sgr0":"\u001b[m","smul":"\u001b[4m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001b_A\u001b\\","kf2":"\u001b_B\u001b\\","kf3":"\u001b_C\u001b\\","kf4":"\u001b_D\u001b\\","kf5":"\u001b_E\u001b\\","kf6":"\u001b_F\u001b\\","kf7":"\u001b_G\u001b\\","kf8":"\u001b_H\u001b\\","kf9":"\u001b_I\u001b\\","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"vi50","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","smul":"\u001bS","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bP","kf2":"\u001bQ","kf3":"\u001bR","kf4":"\u001bV","kf5":"\u001bE","kf6":"\u001b]","kf7":"\u001bL","kf8":"\u001bv","kf9":"\u001bM","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"vi500","cols":80,"lines":33,"clear":"\u001bv$\u003c6*/\u003e","smul":"\u001b\u0004","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","smacs":"\u000e","rmacs":"\u000f"} +{"name":"vi50adm","cols":80,"lines":24,"bell":"\u0007","clear":"\u001a","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"vi55","cols":80,"lines":24,"clear":"\u001bv","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"vi550","cols":80,"lines":33,"bell":"\u0007","clear":"\u0018\u001b[H\u001b[2J","sgr0":"\u001b[m","smul":"\u001b[4m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kf1":"\u001b_A\u001b\\","kf2":"\u001b_B\u001b\\","kf3":"\u001b_C\u001b\\","kf4":"\u001b_D\u001b\\","kf5":"\u001b_E\u001b\\","kf6":"\u001b_F\u001b\\","kf7":"\u001b_G\u001b\\","kf8":"\u001b_H\u001b\\","kf9":"\u001b_I\u001b\\","khome":"\u001b[H","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C"} +{"name":"vi603","aliases":["visual603"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"viewpoint","aliases":["addsviewpoint"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","cnorm":"\u000f\u001b0`","sgr0":"\u000f","smul":"\u000e","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","kf2":"\u00022","kf3":"\u0002!","kf4":"\u0002\"","kf5":"\u0002#","khome":"\u0001","kcuu1":"\u001a","kcud1":"\n","kcub1":"\u0015","kcuf1":"\u0006"} +{"name":"vip","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b`","sgr0":"\u001bsR\u001bsU\u001bF","smul":"\u001bs_","blink":"\u001bsB","rev":"\u001bsI","dim":"\u001bsL","cup":"\u001b[%i%p1%03d%p2%03df","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001b0","kf2":"\u001b2","kf3":"\u001b6","kf4":"\u001b8","kf5":"\u001b:","kf6":"\u001b\u003c","kf7":"\u001b\u003e","kf8":"\u001bP","kf9":"\u001bR","kf10":"\u001bT","kf11":"\u001b\\","kf12":"\u001b^","kf21":"\u001b1","kf22":"\u001b5","kf23":"\u001b7","kf24":"\u001b9","kf25":"\u001b;","kf26":"\u001b=","kf27":"\u001b?","kf28":"\u001bQ","kf29":"\u001bS","kf30":"\u001bV","kf31":"\u001b]","kf32":"\u001b_","kich":"\u001b[I","kdch":"\u001b[P","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001b[Z","kclr":"\u001b`","acsc":"0pjdkblamcnkqitgufvhwexj","smacs":"\u001bG","rmacs":"\u001bF","kRIT":"\u001bu","kLFT":"\u001bo","kHOM":"\u001bH"} +{"name":"vip-H","aliases":["Q310-vip-H","Q310-vip-H-am","vip7800-H"],"cols":80,"lines":72,"bell":"\u0007","clear":"\u001b`","sgr0":"\u001bsR\u001bsU\u001bF","smul":"\u001bs_","blink":"\u001bsB","rev":"\u001bsI","dim":"\u001bsL","cup":"\u001b[%i%p1%03d%p2%03df","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001b0","kf2":"\u001b2","kf3":"\u001b6","kf4":"\u001b8","kf5":"\u001b:","kf6":"\u001b\u003c","kf7":"\u001b\u003e","kf8":"\u001bP","kf9":"\u001bR","kf10":"\u001bT","kf11":"\u001b\\","kf12":"\u001b^","kf21":"\u001b1","kf22":"\u001b5","kf23":"\u001b7","kf24":"\u001b9","kf25":"\u001b;","kf26":"\u001b=","kf27":"\u001b?","kf28":"\u001bQ","kf29":"\u001bS","kf30":"\u001bV","kf31":"\u001b]","kf32":"\u001b_","kich":"\u001b[I","kdch":"\u001b[P","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001b[Z","kclr":"\u001b`","acsc":"0pjdkblamcnkqitgufvhwexj","smacs":"\u001bG","rmacs":"\u001bF","kRIT":"\u001bu","kLFT":"\u001bo","kHOM":"\u001bH"} +{"name":"vip-Hw","aliases":["Q310-vip-Hw","vip7800-Hw"],"cols":132,"lines":72,"bell":"\u0007","clear":"\u001b`","sgr0":"\u001bsR\u001bsU\u001bF","smul":"\u001bs_","blink":"\u001bsB","rev":"\u001bsI","dim":"\u001bsL","cup":"\u001b[%i%p1%03d%p2%03df","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001b0","kf2":"\u001b2","kf3":"\u001b6","kf4":"\u001b8","kf5":"\u001b:","kf6":"\u001b\u003c","kf7":"\u001b\u003e","kf8":"\u001bP","kf9":"\u001bR","kf10":"\u001bT","kf11":"\u001b\\","kf12":"\u001b^","kf21":"\u001b1","kf22":"\u001b5","kf23":"\u001b7","kf24":"\u001b9","kf25":"\u001b;","kf26":"\u001b=","kf27":"\u001b?","kf28":"\u001bQ","kf29":"\u001bS","kf30":"\u001bV","kf31":"\u001b]","kf32":"\u001b_","kich":"\u001b[I","kdch":"\u001b[P","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001b[Z","kclr":"\u001b`","acsc":"0pjdkblamcnkqitgufvhwexj","smacs":"\u001bG","rmacs":"\u001bF","kRIT":"\u001bu","kLFT":"\u001bo","kHOM":"\u001bH"} +{"name":"vip-w","aliases":["Q310-vip-w","Q310-vip-w-am","vip7800-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b`","sgr0":"\u001bsR\u001bsU\u001bF","smul":"\u001bs_","blink":"\u001bsB","rev":"\u001bsI","dim":"\u001bsL","cup":"\u001b[%i%p1%03d%p2%03df","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001b0","kf2":"\u001b2","kf3":"\u001b6","kf4":"\u001b8","kf5":"\u001b:","kf6":"\u001b\u003c","kf7":"\u001b\u003e","kf8":"\u001bP","kf9":"\u001bR","kf10":"\u001bT","kf11":"\u001b\\","kf12":"\u001b^","kf21":"\u001b1","kf22":"\u001b5","kf23":"\u001b7","kf24":"\u001b9","kf25":"\u001b;","kf26":"\u001b=","kf27":"\u001b?","kf28":"\u001bQ","kf29":"\u001bS","kf30":"\u001bV","kf31":"\u001b]","kf32":"\u001b_","kich":"\u001b[I","kdch":"\u001b[P","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kcbt":"\u001b[Z","kclr":"\u001b`","acsc":"0pjdkblamcnkqitgufvhwexj","smacs":"\u001bG","rmacs":"\u001bF","kRIT":"\u001bu","kLFT":"\u001bo","kHOM":"\u001bH"} +{"name":"visa50","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[H\u001b[2J","sgr0":"\u001b[0;2m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b001","kf2":"\u001b002","kf3":"\u001b003","kf4":"\u001b004","kf5":"\u001b005","kf6":"\u001b006","kf7":"\u001b007","kf8":"\u001b008","kf9":"\u001b009","kf10":"\u001b011","kdch":"","khome":"\u001b[f","kcuu1":"\u001b[A","kcud1":"\u001b[A","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"0_aaffggh jjkkllmmnnooqqssttuuvvwwxx","smacs":"\u001b3h","rmacs":"\u001b[3l"} +{"name":"vp3a+","aliases":["viewpoint3a+"],"cols":80,"lines":24,"clear":"\u001b*$\u003c80\u003e","cnorm":"\u0018","civis":"\u0017","sgr0":"\u001b(","smul":"\u001b0`\u001b)","blink":"\u001b0B\u001b)","rev":"\u001b0P\u001b)","dim":"\u001b0A\u001b)","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"vp60","aliases":["addsvp60","viewpoint60"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","sgr0":"\u001b0@","smul":"\u001b0`","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0015","cuu1":"\u001a","pad":"\u0000","kf1":"\u00022\r","kf2":"\u00023\r","kf3":"\u00024\r","kf4":"\u00025\r","kf5":"\u00026\r","kf6":"\u00027\r","kf7":"\u00028\r","khome":"\u0001","kcuu1":"\u001a","kcud1":"\n","kcub1":"\u0015","kcuf1":"\u0006"} +{"name":"vp90","aliases":["viewpoint90"],"cols":80,"lines":24,"clear":"\u001bG\u001bk","sgr0":"\u001bR\u001b0@\u001bV","smul":"\u001bR\u001b0`\u001bV","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","kbs":"\u0008","kf1":"\u00022\r","kf2":"\u00023\r","kf3":"\u00024\r","kf4":"\u00025\r","kf5":"\u00026\r","kf6":"\u00027\r","kf7":"\u00028\r","kf8":"\u00029\r","kf9":"\u0002:\r","kf10":"\u0002;\r","khome":"\u0001","kcuu1":"\u001a","kcud1":"\n","kcub1":"\u0015","kcuf1":"\u0006"} +{"name":"vremote","cols":79,"lines":24,"bell":"\u0007","clear":"\u001bL","smul":"\u001ba\u0001","cup":"\u001bG%p2%c%p1%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","khome":"\u001bE","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"vsc","cols":80,"lines":26,"clear":"\u001b[;H\u001b[2J$\u003c50/\u003e","sgr0":"\u001f!","smul":"\u001f\"","rev":"\u001f ","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kcud1":"\n","kcub1":"\u0008"} +{"name":"vt100","aliases":["vt100-am"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"vt100-nav","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"vt100-nav-w","aliases":["vt100-w-nav"],"cols":132,"lines":14,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"vt100-putty","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"vt100-s","aliases":["vt100-s-top","vt100-top-s"],"cols":80,"lines":23,"bell":"\u0007","clear":"\u001b[2;1H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%{1}%+%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"vt100-s-bot","aliases":["vt100-bot-s"],"cols":80,"lines":23,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"vt100-vb","cols":80,"lines":24,"clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"vt100-w","aliases":["vt100-w-am"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"vt100-w-nam","aliases":["vt100-nam-w"],"cols":132,"lines":14,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"vt100nam","aliases":["vt100-nam"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"vt102","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"vt102-nsgr","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"vt102-w","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"vt125","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J\u001bPpS(E)\u001b\\$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"vt131","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[;H\u001b[2J$\u003c50/\u003e","sgr0":"\u001b[m$\u003c2/\u003e","smul":"\u001b[4m$\u003c2/\u003e","bold":"\u001b[1m$\u003c2/\u003e","blink":"\u001b[5m$\u003c2/\u003e","rev":"\u001b[7m$\u003c2/\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5/\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2/\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"vt132","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m\u000f$\u003c2\u003e","smul":"\u001b[4m$\u003c2\u003e","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"vt200-js","aliases":["vt220-js"],"cols":80,"lines":-1,"bell":"\u0007","clear":"\u001b[H\u001b[J","smul":"\u001b[4m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"vt220","aliases":["vt200"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0$\u003c2\u003e","rmacs":"\u001b(B$\u003c4\u003e","enacs":"\u001b)0"} +{"name":"vt220-8bit","aliases":["vt200-8","vt200-8bit","vt220-8"],"cols":80,"lines":24,"bell":"\u0007","clear":"\ufffdH\ufffdJ","sgr0":"\ufffd0m\u001b(B","smul":"\ufffd4m","bold":"\ufffd1m","blink":"\ufffd5m","rev":"\ufffd7m","cup":"\ufffd%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\ufffdA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\ufffd17~","kf7":"\ufffd18~","kf8":"\ufffd19~","kf9":"\ufffd20~","kf10":"\ufffd21~","kf11":"\ufffd23~","kf12":"\ufffd24~","kf13":"\ufffd25~","kf14":"\ufffd26~","kf17":"\ufffd31~","kf18":"\ufffd32~","kf19":"\ufffd33~","kf20":"\ufffd34~","kich":"\ufffd2~","khome":"\ufffdH","khlp":"\ufffd28~","kpp":"\ufffd5~","knp":"\ufffd6~","kcuu1":"\ufffdA","kcud1":"\ufffdB","kcub1":"\ufffdD","kcuf1":"\ufffdC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","enacs":"\u001b)0"} +{"name":"vt220-nam","aliases":["v200-nam"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0$\u003c2\u003e","rmacs":"\u001b(B$\u003c4\u003e","enacs":"\u001b)0"} +{"name":"vt220-old","aliases":["vt200-old"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J$\u003c50\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m$\u003c2\u003e","smul":"\u001b[4m","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c10\u003e","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[17~","kf6":"\u001b[18~","kf7":"\u001b[19~","kf8":"\u001b[20~","kf9":"\u001b[21~","kf10":"\u001b[29~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0$\u003c2\u003e","rmacs":"\u001b(B$\u003c4\u003e"} +{"name":"vt220-w","aliases":["vt200-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0$\u003c2\u003e","rmacs":"\u001b(B$\u003c4\u003e","enacs":"\u001b)0"} +{"name":"vt220d","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J$\u003c50\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m$\u003c2\u003e","smul":"\u001b[4m","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c10\u003e","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0$\u003c2\u003e","rmacs":"\u001b(B$\u003c4\u003e"} +{"name":"vt320","aliases":["vt300"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B"} +{"name":"vt320-k3","cols":80,"lines":49,"bell":"\u0007","clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kich":"\u001b[2~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B"} +{"name":"vt320-k311","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[;H\u001b[2J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f"} +{"name":"vt320-nam","aliases":["vt300-nam"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B"} +{"name":"vt320-w","aliases":["vt300-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B"} +{"name":"vt320-w-nam","aliases":["vt300-w-nam"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B"} +{"name":"vt320nam","aliases":["v320n"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0$\u003c2\u003e","rmacs":"\u001b(B$\u003c4\u003e","enacs":"\u001b)0"} +{"name":"vt340","aliases":["dec-vt330","dec-vt340","vt330"],"cols":80,"lines":24,"clear":"\u001b[H\u001b[J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B"} +{"name":"vt400","aliases":["dec-vt400","vt400-24"],"cols":80,"lines":24,"clear":"\u001b[H\u001b[J$\u003c10/\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B"} +{"name":"vt420","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J$\u003c50\u003e","sgr0":"\u001b[m$\u003c2\u003e","smul":"\u001b[4m","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c10\u003e","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[17~","kf6":"\u001b[18~","kf7":"\u001b[19~","kf8":"\u001b[20~","kf9":"\u001b[21~","kf10":"\u001b[29~","kich":"\u001b[2~","kdch":"\u001b[3~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0$\u003c2\u003e","rmacs":"\u001b(B$\u003c4\u003e"} +{"name":"vt420f","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J$\u003c50\u003e","sgr0":"\u001b[m$\u003c2\u003e","smul":"\u001b[4m","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c10\u003e","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"","khome":"\u001b[H","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0$\u003c2\u003e","rmacs":"\u001b(B$\u003c4\u003e"} +{"name":"vt420pc","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J$\u003c50\u003e","sgr0":"\u001b[m$\u003c2\u003e","smul":"\u001b[4m","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c10\u003e","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[11;2~","kf14":"\u001b[12;2~","kf15":"\u001b[13;2~","kf16":"\u001b[14;2~","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001b[23~","kf26":"\u001b[24~","kf27":"\u001b[25~","kf28":"\u001b[26~","kf29":"\u001b[28~","kf30":"\u001b[29~","kf31":"\u001b[31~","kf32":"\u001b[32~","kf33":"\u001b[33~","kf34":"\u001b[34~","kf35":"\u001b[35~","kf36":"\u001b[36~","kf37":"\u001b[23;2~","kf38":"\u001b[24;2~","kf39":"\u001b[25;2~","kf40":"\u001b[26;2~","kf41":"\u001b[28;2~","kf42":"\u001b[29;2~","kf43":"\u001b[31;2~","kf44":"\u001b[32;2~","kf45":"\u001b[33;2~","kf46":"\u001b[34;2~","kf47":"\u001b[35;2~","kf48":"\u001b[36;2~","kich":"\u001b[2~","kdch":"","khome":"\u001b[H","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0$\u003c2\u003e","rmacs":"\u001b(B$\u003c4\u003e"} +{"name":"vt420pcdos","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[H\u001b[2J$\u003c50\u003e","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c10\u003e","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[11;2~","kf14":"\u001b[12;2~","kf15":"\u001b[13;2~","kf16":"\u001b[14;2~","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001b[23~","kf26":"\u001b[24~","kf27":"\u001b[25~","kf28":"\u001b[26~","kf29":"\u001b[28~","kf30":"\u001b[29~","kf31":"\u001b[31~","kf32":"\u001b[32~","kf33":"\u001b[33~","kf34":"\u001b[34~","kf35":"\u001b[35~","kf36":"\u001b[36~","kf37":"\u001b[23;2~","kf38":"\u001b[24;2~","kf39":"\u001b[25;2~","kf40":"\u001b[26;2~","kf41":"\u001b[28;2~","kf42":"\u001b[29;2~","kf43":"\u001b[31;2~","kf44":"\u001b[32;2~","kf45":"\u001b[33;2~","kf46":"\u001b[34;2~","kf47":"\u001b[35;2~","kf48":"\u001b[36;2~","kich":"\u001b[2~","kdch":"","khome":"\u001b[H","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0$\u003c2\u003e","rmacs":"\u001b(B$\u003c4\u003e"} +{"name":"vt50h","cols":80,"lines":12,"bell":"\u0007","clear":"\u001bH\u001bJ","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000"} +{"name":"vt510","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J$\u003c50\u003e","sgr0":"\u001b[m$\u003c2\u003e","smul":"\u001b[4m","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c10\u003e","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[17~","kf6":"\u001b[18~","kf7":"\u001b[19~","kf8":"\u001b[20~","kf9":"\u001b[21~","kf10":"\u001b[29~","kich":"\u001b[2~","kdch":"\u001b[3~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0$\u003c2\u003e","rmacs":"\u001b(B$\u003c4\u003e"} +{"name":"vt510pc","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J$\u003c50\u003e","sgr0":"\u001b[m$\u003c2\u003e","smul":"\u001b[4m","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c10\u003e","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[11;2~","kf14":"\u001b[12;2~","kf15":"\u001b[13;2~","kf16":"\u001b[14;2~","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001b[23~","kf26":"\u001b[24~","kf27":"\u001b[25~","kf28":"\u001b[26~","kf29":"\u001b[28~","kf30":"\u001b[29~","kf31":"\u001b[31~","kf32":"\u001b[32~","kf33":"\u001b[33~","kf34":"\u001b[34~","kf35":"\u001b[35~","kf36":"\u001b[36~","kf37":"\u001b[23;2~","kf38":"\u001b[24;2~","kf39":"\u001b[25;2~","kf40":"\u001b[26;2~","kf41":"\u001b[28;2~","kf42":"\u001b[29;2~","kf43":"\u001b[31;2~","kf44":"\u001b[32;2~","kf45":"\u001b[33;2~","kf46":"\u001b[34;2~","kf47":"\u001b[35;2~","kf48":"\u001b[36;2~","kich":"\u001b[2~","kdch":"","khome":"\u001b[H","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0$\u003c2\u003e","rmacs":"\u001b(B$\u003c4\u003e"} +{"name":"vt510pcdos","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[H\u001b[2J$\u003c50\u003e","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","smkx":"\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c10\u003e","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[11;2~","kf14":"\u001b[12;2~","kf15":"\u001b[13;2~","kf16":"\u001b[14;2~","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001b[23~","kf26":"\u001b[24~","kf27":"\u001b[25~","kf28":"\u001b[26~","kf29":"\u001b[28~","kf30":"\u001b[29~","kf31":"\u001b[31~","kf32":"\u001b[32~","kf33":"\u001b[33~","kf34":"\u001b[34~","kf35":"\u001b[35~","kf36":"\u001b[36~","kf37":"\u001b[23;2~","kf38":"\u001b[24;2~","kf39":"\u001b[25;2~","kf40":"\u001b[26;2~","kf41":"\u001b[28;2~","kf42":"\u001b[29;2~","kf43":"\u001b[31;2~","kf44":"\u001b[32;2~","kf45":"\u001b[33;2~","kf46":"\u001b[34;2~","kf47":"\u001b[35;2~","kf48":"\u001b[36;2~","kich":"\u001b[2~","kdch":"","khome":"\u001b[H","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0$\u003c2\u003e","rmacs":"\u001b(B$\u003c4\u003e"} +{"name":"vt52","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u001bD","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","acsc":"ffgghhompoqqss.k","smacs":"\u001bF","rmacs":"\u001bG"} +{"name":"vt520","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J$\u003c50\u003e","sgr0":"\u001b[m$\u003c2\u003e","smul":"\u001b[4m","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c10\u003e","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[17~","kf6":"\u001b[18~","kf7":"\u001b[19~","kf8":"\u001b[20~","kf9":"\u001b[21~","kf10":"\u001b[29~","kich":"\u001b[2~","kdch":"\u001b[3~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0$\u003c2\u003e","rmacs":"\u001b(B$\u003c4\u003e"} +{"name":"vt525","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J$\u003c50\u003e","sgr0":"\u001b[m$\u003c2\u003e","smul":"\u001b[4m","bold":"\u001b[1m$\u003c2\u003e","blink":"\u001b[5m$\u003c2\u003e","rev":"\u001b[7m$\u003c2\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c10\u003e","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[17~","kf6":"\u001b[18~","kf7":"\u001b[19~","kf8":"\u001b[20~","kf9":"\u001b[21~","kf10":"\u001b[29~","kich":"\u001b[2~","kdch":"\u001b[3~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0$\u003c2\u003e","rmacs":"\u001b(B$\u003c4\u003e"} +{"name":"vt61","aliases":["vt-61","vt61.5"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ$\u003c120\u003e","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c$\u003c20\u003e","cub1":"\u0008","cuu1":"\u001bA$\u003c20\u003e","pad":"\u0000","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"wsiris","aliases":["iris40"],"cols":80,"lines":40,"bell":"\u0007","clear":"\u001bv","cnorm":"\u001b\u003e","sgr0":"\u001b7F7","smul":"\u001b7R2\u001b9P","dim":"\u001b7F2","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kf1":"\u001b1","kf2":"\u001b2","kf3":"\u001b3","kf4":"\u001b4","kf5":"\u001b5","kf6":"\u001b6","kf7":"\u001b7","kf8":"\u001b8","kf9":"\u001b9","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} +{"name":"wsvt25","cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","khome":"\u001b[7~","kend":"\u001b[8~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0$\u003c2\u003e","rmacs":"\u001b(B$\u003c4\u003e","enacs":"\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"wsvt25m","cols":80,"lines":25,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","khome":"\u001b[7~","kend":"\u001b[8~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0$\u003c2\u003e","rmacs":"\u001b(B$\u003c4\u003e","enacs":"\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"wy100","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b;","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","khome":"\u001b{","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"wy100q","cols":80,"lines":24,"clear":"\u001a","sgr0":"\u001bG0","smul":"\u001bG8","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"wy120","aliases":["wy150","wyse120","wyse150"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b+$\u003c50\u003e","smcup":"\u001bw0","rmcup":"\u001bw1","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy120-25","aliases":["wy150-25","wyse120-25","wyse150-25"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001b+$\u003c50\u003e","smcup":"\u001bw0","rmcup":"\u001bw1","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy120-25-w","aliases":["wy150-25-w","wyse120-25-w","wyse150-25-w"],"cols":132,"lines":25,"bell":"\u0007","clear":"\u001b+$\u003c50\u003e","smcup":"\u001bw0","rmcup":"\u001bw1","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy120-vb","aliases":["wy150-vb","wyse120-vb","wyse150-vb"],"cols":80,"lines":24,"clear":"\u001b+$\u003c50\u003e","smcup":"\u001bw0","rmcup":"\u001bw1","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy120-w","aliases":["wy150-w","wyse120-w","wyse150-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b+$\u003c50\u003e","smcup":"\u001bw0","rmcup":"\u001bw1","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy120-w-vb","aliases":["wy120-wvb","wy150-w-vb","wyse120-wvb","wyse150-w-vb"],"cols":132,"lines":24,"clear":"\u001b+$\u003c50\u003e","smcup":"\u001bw0","rmcup":"\u001bw1","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy160","aliases":["wyse160"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b+$\u003c30\u003e","smcup":"\u001bw1","rmcup":"\u001bw0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy160-25","aliases":["wyse160-25"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001b+$\u003c30\u003e","smcup":"\u001bw1","rmcup":"\u001bw0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy160-25-w","aliases":["wyse160-25-w"],"cols":132,"lines":25,"bell":"\u0007","clear":"\u001b+$\u003c30\u003e","smcup":"\u001bw1","rmcup":"\u001bw0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy160-42","aliases":["wyse160-42"],"cols":80,"lines":42,"bell":"\u0007","clear":"\u001b+$\u003c50\u003e","smcup":"\u001bw1","rmcup":"\u001bw0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy160-42-w","aliases":["wyse160-42-w"],"cols":132,"lines":42,"bell":"\u0007","clear":"\u001b+$\u003c50\u003e","smcup":"\u001bw1","rmcup":"\u001bw0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy160-43","aliases":["wyse160-43"],"cols":80,"lines":43,"bell":"\u0007","clear":"\u001b+$\u003c50\u003e","smcup":"\u001bw1","rmcup":"\u001bw0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy160-43-w","aliases":["wyse160-43-w"],"cols":132,"lines":43,"bell":"\u0007","clear":"\u001b+$\u003c50\u003e","smcup":"\u001bw1","rmcup":"\u001bw0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy160-tek","cols":74,"lines":35,"bell":"\u0007","clear":"\u001b\u000c","cup":"\u001d%{3103}%'['%p1%*%-%Py%p2%'7'%*%Px%gy%{128}%/%{31}%\u0026%' '%+%c%gy%{3}%\u0026%{4}%*%gx%{3}%\u0026%+%'`'%+%c%gy%{004}%/%{31}%\u0026%'`'%+%c%gx%{128}%/%{31}%\u0026%' '%+%c%gx%{004}%/%{31}%\u0026%'@'%+%c\u001f","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000"} +{"name":"wy160-vb","aliases":["wyse160-vb"],"cols":80,"lines":24,"clear":"\u001b+$\u003c30\u003e","smcup":"\u001bw1","rmcup":"\u001bw0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy160-w","aliases":["wyse160-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b+$\u003c30\u003e","smcup":"\u001bw1","rmcup":"\u001bw0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy160-w-vb","aliases":["wy160-wvb","wyse160-wvb"],"cols":132,"lines":24,"clear":"\u001b+$\u003c30\u003e","smcup":"\u001bw1","rmcup":"\u001bw0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy185","aliases":["wyse185"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[?1l\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[26~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy185-24","aliases":["wyse185-24"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[?1l\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[26~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy185-vb","aliases":["wyse185-vb"],"cols":80,"lines":24,"clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[?1l\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[26~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy185-w","aliases":["wyse185-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[?1l\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[26~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy185-wvb","aliases":["wyse185-wvb"],"cols":132,"lines":24,"clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[?1l\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[26~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy30","aliases":["wyse30"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b+$\u003c80\u003e","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003","dim":"\u001b`7\u001b)","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","acsc":"0wa_h[jukslrmqnxqzttuyv]wpxv","smacs":"\u001bH\u0002","rmacs":"\u001bH\u0003","kHOM":"\u001b{"} +{"name":"wy30-mc","aliases":["wyse30-mc"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b+$\u003c80\u003e","rmcup":"\u001bG0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001bG0\u001b(\u001bH\u0003","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","acsc":"0wa_h[jukslrmqnxqzttuyv]wpxv","smacs":"\u001bG0\u001bH\u0002","rmacs":"\u001bG0\u001bH\u0003","kHOM":"\u001b{"} +{"name":"wy30-vb","aliases":["wyse30-vb"],"cols":80,"lines":24,"clear":"\u001b+$\u003c80\u003e","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003","dim":"\u001b`7\u001b)","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","acsc":"0wa_h[jukslrmqnxqzttuyv]wpxv","smacs":"\u001bH\u0002","rmacs":"\u001bH\u0003","kHOM":"\u001b{"} +{"name":"wy325","aliases":["wyse325"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b+$\u003c50\u003e","smcup":"\u001bw1","rmcup":"\u001bw0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bq","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy325-25","aliases":["wy325-80","wyse-325","wyse325-25"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001b+$\u003c50\u003e","smcup":"\u001bw1","rmcup":"\u001bw0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bq","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy325-25w","aliases":["wyse325-25w"],"cols":132,"lines":25,"bell":"\u0007","clear":"\u001b+$\u003c50\u003e","smcup":"\u001bw1","rmcup":"\u001bw0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bq","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy325-42","aliases":["wyse325-42"],"cols":80,"lines":42,"bell":"\u0007","clear":"\u001b+$\u003c50\u003e","smcup":"\u001bw1","rmcup":"\u001bw0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bq","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy325-42w","aliases":["wyse325-42w"],"cols":132,"lines":42,"bell":"\u0007","clear":"\u001b+$\u003c50\u003e","smcup":"\u001bw1","rmcup":"\u001bw0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bq","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy325-42w-vb","aliases":["wy325-42wvb"],"cols":132,"lines":24,"clear":"\u001b+$\u003c50\u003e","smcup":"\u001bw1","rmcup":"\u001bw0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bq","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy325-43","aliases":["wyse325-43"],"cols":80,"lines":43,"bell":"\u0007","clear":"\u001b+$\u003c50\u003e","smcup":"\u001bw1","rmcup":"\u001bw0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bq","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy325-43w","aliases":["wyse325-43w"],"cols":132,"lines":43,"bell":"\u0007","clear":"\u001b+$\u003c50\u003e","smcup":"\u001bw1","rmcup":"\u001bw0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bq","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy325-43w-vb","aliases":["wy325-43wvb"],"cols":132,"lines":24,"clear":"\u001b+$\u003c50\u003e","smcup":"\u001bw1","rmcup":"\u001bw0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bq","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy325-vb","aliases":["wyse325-vb"],"cols":80,"lines":24,"clear":"\u001b+$\u003c50\u003e","smcup":"\u001bw1","rmcup":"\u001bw0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bq","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy325-w","aliases":["wy325w-24","wyse325-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b+$\u003c50\u003e","smcup":"\u001bw1","rmcup":"\u001bw0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bq","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy325-w-vb","aliases":["wy325-wvb","wyse325-wvb"],"cols":132,"lines":24,"clear":"\u001b+$\u003c50\u003e","smcup":"\u001bw1","rmcup":"\u001bw0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bq","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy350","aliases":["wyse350"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b+$\u003c20\u003e","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001bG0\u001b(\u001bH\u0003%{0}%PA%{0}%PC","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"0wa_h[jukslrmqnxqzttuyv]wpxv","smacs":"\u001bG0\u001bH\u0002","rmacs":"\u001bG0\u001bH\u0003","kHOM":"\u001b{"} +{"name":"wy350-vb","aliases":["wyse350-vb"],"cols":80,"lines":24,"clear":"\u001b+$\u003c20\u003e","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001bG0\u001b(\u001bH\u0003%{0}%PA%{0}%PC","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"0wa_h[jukslrmqnxqzttuyv]wpxv","smacs":"\u001bG0\u001bH\u0002","rmacs":"\u001bG0\u001bH\u0003","kHOM":"\u001b{"} +{"name":"wy350-w","aliases":["wyse350-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b+$\u003c20\u003e","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001bG0\u001b(\u001bH\u0003%{0}%PA%{0}%PC","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"0wa_h[jukslrmqnxqzttuyv]wpxv","smacs":"\u001bG0\u001bH\u0002","rmacs":"\u001bG0\u001bH\u0003","kHOM":"\u001b{"} +{"name":"wy350-wvb","aliases":["wyse350-wvb"],"cols":132,"lines":24,"clear":"\u001b+$\u003c20\u003e","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001bG0\u001b(\u001bH\u0003%{0}%PA%{0}%PC","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"0wa_h[jukslrmqnxqzttuyv]wpxv","smacs":"\u001bG0\u001bH\u0002","rmacs":"\u001bG0\u001bH\u0003","kHOM":"\u001b{"} +{"name":"wy370","aliases":["wy370-101k","wyse370"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[?1l\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c1\u003e","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[?4i","kf2":"\u001b[?3i","kf3":"\u001b[2i","kf4":"\u001b[@","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kich":"\u001bOP","kdch":"\u001bOQ","khome":"\u001b[H","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy370-105k","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[?1l\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c1\u003e","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[26~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy370-EPC","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[?1l\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c1\u003e","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kich":"\u001b[2~","khome":"\u001b[H","kend":"\u001b[1~","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy370-nk","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[?1l\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c1\u003e","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy370-rv","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[?1l\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c1\u003e","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[?4i","kf2":"\u001b[?3i","kf3":"\u001b[2i","kf4":"\u001b[@","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kich":"\u001bOP","kdch":"\u001bOQ","khome":"\u001b[H","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy370-tek","cols":80,"lines":36,"bell":"\u0007","clear":"\u001b\u000c","cup":"\u001d%{775}%'l'%p1%*%{5}%/%-%Py%p2%'@'%*%{4}%+%{5}%/%Px%gy%' '%/%{31}%\u0026%' '%+%c%gy%{31}%\u0026%'`'%+%c%gx%' '%/%{31}%\u0026%' '%+%c%gx%{31}%\u0026%'@'%+%c\u001f","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\t"} +{"name":"wy370-vb","cols":80,"lines":24,"clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[?1l\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c1\u003e","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[?4i","kf2":"\u001b[?3i","kf3":"\u001b[2i","kf4":"\u001b[@","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kich":"\u001bOP","kdch":"\u001bOQ","khome":"\u001b[H","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy370-w","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[?1l\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c1\u003e","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[?4i","kf2":"\u001b[?3i","kf3":"\u001b[2i","kf4":"\u001b[@","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kich":"\u001bOP","kdch":"\u001bOQ","khome":"\u001b[H","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy370-wvb","cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[?1l\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c1\u003e","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[?4i","kf2":"\u001b[?3i","kf3":"\u001b[2i","kf4":"\u001b[@","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kich":"\u001bOP","kdch":"\u001bOQ","khome":"\u001b[H","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy50","aliases":["wyse50"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b+$\u003c20\u003e","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003","rev":"\u001b`6\u001b)","dim":"\u001b`7\u001b)","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"0wa_h[jukslrmqnxqzttuyv]wpxv","smacs":"\u001bH\u0002","rmacs":"\u001bH\u0003","kHOM":"\u001b{"} +{"name":"wy50-mc","aliases":["wyse50-mc"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b+$\u003c20\u003e","rmcup":"\u001bG0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001bG0\u001b(\u001bH\u0003","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"0wa_h[jukslrmqnxqzttuyv]wpxv","smacs":"\u001bG0\u001bH\u0002","rmacs":"\u001bG0\u001bH\u0003","kHOM":"\u001b{"} +{"name":"wy50-vb","aliases":["wyse50-vb"],"cols":80,"lines":24,"clear":"\u001b+$\u003c20\u003e","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003","rev":"\u001b`6\u001b)","dim":"\u001b`7\u001b)","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"0wa_h[jukslrmqnxqzttuyv]wpxv","smacs":"\u001bH\u0002","rmacs":"\u001bH\u0003","kHOM":"\u001b{"} +{"name":"wy50-w","aliases":["wyse50-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b+$\u003c20\u003e","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003","rev":"\u001b`6\u001b)","dim":"\u001b`7\u001b)","cup":"\u001ba%i%p1%dR%p2%dC","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"0wa_h[jukslrmqnxqzttuyv]wpxv","smacs":"\u001bH\u0002","rmacs":"\u001bH\u0003","kHOM":"\u001b{"} +{"name":"wy50-wvb","aliases":["wyse50-wvb"],"cols":132,"lines":24,"clear":"\u001b+$\u003c20\u003e","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003","rev":"\u001b`6\u001b)","dim":"\u001b`7\u001b)","cup":"\u001ba%i%p1%dR%p2%dC","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"0wa_h[jukslrmqnxqzttuyv]wpxv","smacs":"\u001bH\u0002","rmacs":"\u001bH\u0003","kHOM":"\u001b{"} +{"name":"wy520","aliases":["wyse520"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q\u001b[?67;8h","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[26~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy520-24","aliases":["wyse520-24"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q\u001b[?67;8h","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[26~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy520-36","aliases":["wyse520-36"],"cols":80,"lines":36,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q\u001b[?67;8h","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[26~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy520-36pc","aliases":["wyse520-36pc"],"cols":80,"lines":36,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q\u001b[?67;8h","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"","khome":"\u001b[H","kend":"\u001b[4~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy520-36w","aliases":["wyse520-36w"],"cols":132,"lines":36,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q\u001b[?67;8h","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[26~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy520-36wpc","aliases":["wyse520-36wpc"],"cols":132,"lines":36,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q\u001b[?67;8h","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"","khome":"\u001b[H","kend":"\u001b[4~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy520-48","aliases":["wyse520-48"],"cols":80,"lines":48,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q\u001b[?67;8h","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[26~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy520-48pc","aliases":["wyse520-48pc"],"cols":80,"lines":48,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q\u001b[?67;8h","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"","khome":"\u001b[H","kend":"\u001b[4~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy520-48w","aliases":["wyse520-48w"],"cols":132,"lines":48,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q\u001b[?67;8h","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[26~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy520-48wpc","aliases":["wyse520-48wpc"],"cols":132,"lines":48,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q\u001b[?67;8h","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"","khome":"\u001b[H","kend":"\u001b[4~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy520-epc","aliases":["wyse520-epc"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q\u001b[?67;8h","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"","khome":"\u001b[H","kend":"\u001b[4~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy520-epc-24","aliases":["wyse520-pc-24"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q\u001b[?67;8h","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"","khome":"\u001b[H","kend":"\u001b[4~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy520-epc-vb","aliases":["wyse520-pc-vb"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q\u001b[?67;8h","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"","khome":"\u001b[H","kend":"\u001b[4~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy520-epc-w","aliases":["wyse520-epc-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q\u001b[?67;8h","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"","khome":"\u001b[H","kend":"\u001b[4~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy520-epc-wvb","aliases":["wyse520-p-wvb"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q\u001b[?67;8h","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"","khome":"\u001b[H","kend":"\u001b[4~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy520-vb","aliases":["wyse520-vb"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q\u001b[?67;8h","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[26~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy520-w","aliases":["wyse520-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q\u001b[?67;8h","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[26~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy520-wvb","aliases":["wyse520-wvb"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c40\u003e","smcup":"\u001b[ Q\u001b[?67;8h","rmcup":"\u001b[ R","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[26~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy60","aliases":["wyse60"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b+$\u003c100\u003e","smcup":"\u001bw0","rmcup":"\u001bw1","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy60-25","aliases":["wyse60-25"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001b+$\u003c100\u003e","smcup":"\u001bw0","rmcup":"\u001bw1","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy60-25-w","aliases":["wyse60-25-w"],"cols":132,"lines":25,"bell":"\u0007","clear":"\u001b+$\u003c100\u003e","smcup":"\u001bw0","rmcup":"\u001bw1","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy60-42","aliases":["wyse60-42"],"cols":80,"lines":42,"bell":"\u0007","clear":"\u001b+$\u003c260\u003e","smcup":"\u001bw0","rmcup":"\u001bw1","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c$\u003c2\u003e","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy60-42-w","aliases":["wyse60-42-w"],"cols":132,"lines":42,"bell":"\u0007","clear":"\u001b+$\u003c260\u003e","smcup":"\u001bw0","rmcup":"\u001bw1","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC$\u003c2\u003e","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy60-43","aliases":["wyse60-43"],"cols":80,"lines":43,"bell":"\u0007","clear":"\u001b+$\u003c260\u003e","smcup":"\u001bw0","rmcup":"\u001bw1","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c$\u003c2\u003e","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy60-43-w","aliases":["wyse60-43-w"],"cols":132,"lines":43,"bell":"\u0007","clear":"\u001b+$\u003c260\u003e","smcup":"\u001bw0","rmcup":"\u001bw1","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC$\u003c2\u003e","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy60-vb","aliases":["wyse60-vb"],"cols":80,"lines":24,"clear":"\u001b+$\u003c100\u003e","smcup":"\u001bw0","rmcup":"\u001bw1","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy60-w","aliases":["wyse60-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b+$\u003c100\u003e","smcup":"\u001bw0","rmcup":"\u001bw1","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy60-w-vb","aliases":["wy60-wvb","wyse60-wvb"],"cols":132,"lines":24,"clear":"\u001b+$\u003c100\u003e","smcup":"\u001bw0","rmcup":"\u001bw1","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy75","aliases":["wyse75"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c30\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[2t\u001b[4m","rev":"\u001b[1t\u001b[7m","dim":"\u001b[0t\u001b[2m","smkx":"\u001b[?1l\u001b[?7h\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[?5i","kf2":"\u001b[?3i","kf3":"\u001b[2i","kf4":"\u001b[@","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[35~","kich":"\u001b[@","khome":"\u001b[H","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kprt":"\u001b[?5i","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy75-mc","aliases":["wyse75-mc"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c30\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0p\u000f","smul":"\u001b[8p","blink":"\u001b[2p","rev":"\u001b[16p","dim":"\u001b[1p","smkx":"\u001b[?1l\u001b[?7h\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[?5i","kf2":"\u001b[?3i","kf3":"\u001b[2i","kf4":"\u001b[@","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[35~","kich":"\u001b[@","khome":"\u001b[H","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kprt":"\u001b[?5i","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b[0p\u000e","rmacs":"\u001b[0p\u000f","enacs":"\u001b)0"} +{"name":"wy75-vb","aliases":["wyse75-vb"],"cols":80,"lines":24,"clear":"\u001b[H\u001b[J$\u003c30\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[2t\u001b[4m","rev":"\u001b[1t\u001b[7m","dim":"\u001b[0t\u001b[2m","smkx":"\u001b[?1l\u001b[?7h\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[?5i","kf2":"\u001b[?3i","kf3":"\u001b[2i","kf4":"\u001b[@","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[35~","kich":"\u001b[@","khome":"\u001b[H","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kprt":"\u001b[?5i","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy75-w","aliases":["wyse75-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c30\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[2t\u001b[4m","rev":"\u001b[1t\u001b[7m","dim":"\u001b[0t\u001b[2m","smkx":"\u001b[?1l\u001b[?7h\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[?5i","kf2":"\u001b[?3i","kf3":"\u001b[2i","kf4":"\u001b[@","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[35~","kich":"\u001b[@","khome":"\u001b[H","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kprt":"\u001b[?5i","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy75-wvb","aliases":["wyse75-wvb"],"cols":132,"lines":24,"clear":"\u001b[H\u001b[J$\u003c30\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[2t\u001b[4m","rev":"\u001b[1t\u001b[7m","dim":"\u001b[0t\u001b[2m","smkx":"\u001b[?1l\u001b[?7h\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[?5i","kf2":"\u001b[?3i","kf3":"\u001b[2i","kf4":"\u001b[@","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[35~","kich":"\u001b[@","khome":"\u001b[H","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kprt":"\u001b[?5i","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy75ap","aliases":["wy-75ap","wyse-75ap","wyse75ap"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c30\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[2t\u001b[4m","rev":"\u001b[1t\u001b[7m","dim":"\u001b[0t\u001b[2m","smkx":"\u001b[?1h\u001b=$\u003c10/\u003e","rmkx":"\u001b[?1l\u001b\u003e$\u003c10/\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[?5i","kf2":"\u001b[?3i","kf3":"\u001b[2i","kf4":"\u001b[@","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kf21":"\u001b[35~","kich":"\u001b[@","khome":"\u001bOH","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kprt":"\u001b[?5i","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy85","aliases":["wyse85"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c110\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[?1l\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c1\u003e","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[26~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy85-8bit","aliases":["wyse85-8bit"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c110\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[?1l\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c1\u003e","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\ufffd17~","kf7":"\ufffd18~","kf8":"\ufffd19~","kf9":"\ufffd20~","kf10":"\ufffd21~","kf11":"\ufffd23~","kf12":"\ufffd24~","kf13":"\ufffd25~","kf14":"\ufffd26~","kf15":"\ufffd28~","kf16":"\ufffd29~","kf17":"\ufffd31~","kf18":"\ufffd32~","kf19":"\ufffd33~","kf20":"\ufffd34~","kich":"\ufffd2~","kdch":"\ufffd3~","khome":"\ufffd26~","khlp":"\ufffd28~","kpp":"\ufffd5~","knp":"\ufffd6~","kcuu1":"\ufffdA","kcud1":"\ufffdB","kcub1":"\ufffdD","kcuf1":"\ufffdC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy85-vb","aliases":["wyse85-vb"],"cols":80,"lines":24,"clear":"\u001b[H\u001b[J$\u003c110\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[?1l\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c1\u003e","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[26~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy85-w","aliases":["wyse85-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c110\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[?1l\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c1\u003e","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[26~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy85-wvb","aliases":["wyse85-wvb"],"cols":132,"lines":24,"clear":"\u001b[H\u001b[J$\u003c110\u003e","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[?1l\u001b=","rmkx":"\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c1\u003e","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[26~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy99-ansi","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c200\u003e","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f\u001b[\"q","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[?1h","rmkx":"\u001b[?1l","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008$\u003c1\u003e","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf17":"\u001b[K","kf18":"\u001b[31~","kf19":"\u001b[32~","kf20":"\u001b[33~","kf21":"\u001b[34~","kf22":"\u001b[35~","kf23":"\u001b[1~","kf24":"\u001b[2~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[z","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy99a-ansi","cols":80,"lines":25,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c200\u003e","cnorm":"\u001b[34h\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f\u001b[\"q","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[?1h","rmkx":"\u001b[?1l","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008$\u003c1\u003e","cuu1":"\u001bM","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[M","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf17":"\u001b[K","kf18":"\u001b[31~","kf19":"\u001b[32~","kf20":"\u001b[33~","kf21":"\u001b[34~","kf22":"\u001b[35~","kf23":"\u001b[1~","kf24":"\u001b[2~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[z","acsc":"``aaffggjjkkllmmnnooqqssttuuvvwwxx{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"wy99f","aliases":["wy-99fgt","wy99fgt"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001b'\u001b(\u001a","smcup":"\u001bc20\u001bc30","rmcup":"\u001bc21\u001bc31","cnorm":"\u001b`4\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bG0","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001`\r","kf14":"\u0001a\r","kf15":"\u0001b\r","kf16":"\u0001c\r","kf17":"\u0001d\r","kf18":"\u0001e\r","kf19":"\u0001f\r","kf20":"\u0001g\r","kf21":"\u0001h\r","kf22":"\u0001i\r","kf23":"\u0001j\r","kf24":"\u0001k\r","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"'x+y.wi~_vj(k'l\u0026m%n)o9q*s8t-u.v,w+x=","smacs":"\u001bcE","rmacs":"\u001bcD","enacs":"\u001bc@1J$\u003c2000\u003e"} +{"name":"wy99fa","aliases":["wy-99fgta","wy99fgta"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001b'\u001b(\u001a","smcup":"\u001bc20\u001bc30","rmcup":"\u001bc21\u001bc31","cnorm":"\u001b`4\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bG0","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001`\r","kf14":"\u0001a\r","kf15":"\u0001b\r","kf16":"\u0001c\r","kf17":"\u0001d\r","kf18":"\u0001e\r","kf19":"\u0001f\r","kf20":"\u0001g\r","kf21":"\u0001h\r","kf22":"\u0001i\r","kf23":"\u0001j\r","kf24":"\u0001k\r","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"'x+y.wi~_vj(k'l\u0026m%n)o9q*s8t-u.v,w+x=","smacs":"\u001bcE","rmacs":"\u001bcD","enacs":"\u001bc@1J$\u003c2000\u003e"} +{"name":"wy99gt","aliases":["wyse99gt"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b+$\u003c130\u003e","smcup":"\u001bw1","rmcup":"\u001bw0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy99gt-25","aliases":["wyse99gt-25"],"cols":80,"lines":25,"bell":"\u0007","clear":"\u001b+$\u003c130\u003e","smcup":"\u001bw1","rmcup":"\u001bw0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy99gt-25-w","aliases":["wyse99gt-25-w"],"cols":132,"lines":25,"bell":"\u0007","clear":"\u001b+$\u003c160\u003e","smcup":"\u001bw1","rmcup":"\u001bw0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC$\u003c2\u003e","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy99gt-tek","cols":74,"lines":35,"bell":"\u0007","clear":"\u001b\u000c","cup":"\u001d%{3040}%'Y'%p1%*%-%Py%p2%'7'%*%Px%gy%{128}%/%{31}%\u0026%' '%+%c%gy%{3}%\u0026%{4}%*%gx%{3}%\u0026%+%'`'%+%c%gy%{004}%/%{31}%\u0026%'`'%+%c%gx%{128}%/%{31}%\u0026%' '%+%c%gx%{004}%/%{31}%\u0026%'@'%+%c\u001f","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000"} +{"name":"wy99gt-vb","aliases":["wyse99gt-vb"],"cols":80,"lines":24,"clear":"\u001b+$\u003c130\u003e","smcup":"\u001bw1","rmcup":"\u001bw0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy99gt-w","aliases":["wyse99gt-w"],"cols":132,"lines":24,"bell":"\u0007","clear":"\u001b+$\u003c160\u003e","smcup":"\u001bw1","rmcup":"\u001bw0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC$\u003c2\u003e","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wy99gt-w-vb","aliases":["wy99gt-wvb","wyse99gt-wvb"],"cols":132,"lines":24,"clear":"\u001b+$\u003c160\u003e","smcup":"\u001bw1","rmcup":"\u001bw0","cnorm":"\u001b`1","civis":"\u001b`0","sgr0":"\u001b(\u001bH\u0003\u001bG0\u001bcD","smul":"\u001bG8","blink":"\u001bG2","rev":"\u001bG4","dim":"\u001bGp","cup":"\u001ba%i%p1%dR%p2%dC$\u003c2\u003e","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","kbs":"\u0008","kf1":"\u0001@\r","kf2":"\u0001A\r","kf3":"\u0001B\r","kf4":"\u0001C\r","kf5":"\u0001D\r","kf6":"\u0001E\r","kf7":"\u0001F\r","kf8":"\u0001G\r","kf9":"\u0001H\r","kf10":"\u0001I\r","kf11":"\u0001J\r","kf12":"\u0001K\r","kf13":"\u0001L\r","kf14":"\u0001M\r","kf15":"\u0001N\r","kf16":"\u0001O\r","kich":"\u001bQ","kdch":"\u001bW","khome":"\u001e","kpp":"\u001bJ","knp":"\u001bK","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c","kcbt":"\u001bI","kprt":"\u001bP","acsc":"+/,.0[iha2fxgqh1jYk?lZm@nEqDtCu4vAwBx3yszr{c~~","smacs":"\u001bcE","rmacs":"\u001bcD","kHOM":"\u001b{"} +{"name":"wyse-vp","cols":80,"lines":24,"bell":"\u0007","clear":"\u000c","sgr0":"\u000f","smul":"\u000e","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001a","pad":"\u0000","kbs":"\u0008","khome":"\u0001","kcuu1":"\u001a","kcud1":"\n","kcub1":"\u0015","kcuf1":"\u0006"} +{"name":"x10term","aliases":["vs100-x10"],"cols":80,"lines":65,"clear":"\u001b[H\u001b[2J","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"x68k","aliases":["x68k-ite"],"cols":96,"lines":32,"bell":"\u0007","clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","khlp":"\u001b[28~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kclr":"\u001b[9~","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0$\u003c2\u003e","rmacs":"\u001b(B$\u003c4\u003e","enacs":"\u001b)0"} +{"name":"xerox820","aliases":["x820"],"cols":80,"lines":24,"bell":"\u0007","clear":"1\u001a","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000"} +{"name":"xfce","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[0m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001bO1;2P","kf14":"\u001bO1;2Q","kf15":"\u001bO1;2R","kf16":"\u001bO1;2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001bO1;5P","kf26":"\u001bO1;5Q","kf27":"\u001bO1;5R","kf28":"\u001bO1;5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001bO1;6P","kf38":"\u001bO1;6Q","kf39":"\u001bO1;6R","kf40":"\u001bO1;6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kf49":"\u001bO1;3P","kf50":"\u001bO1;3Q","kf51":"\u001bO1;3R","kf52":"\u001bO1;3S","kf53":"\u001b[15;3~","kf54":"\u001b[17;3~","kf55":"\u001b[18;3~","kf56":"\u001b[19;3~","kf57":"\u001b[20;3~","kf58":"\u001b[21;3~","kf59":"\u001b[23;3~","kf60":"\u001b[24;3~","kf61":"\u001bO1;4P","kf62":"\u001bO1;4Q","kf63":"\u001bO1;4R","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0","kRIT":"\u001b[1;2C","kLFT":"\u001b[1;2D","kHOM":"\u001b[1;2H","kEND":"\u001b[1;2F","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kscu1":"\u001b[1;2A","_kscud1":"\u001b[1;2B","_kccu1":"\u001b[1;5A","_kccud1":"\u001b[1;5B","_kccuf1":"\u001b[1;5C","_kccub1":"\u001b[1;5D","_kmcu1":"\u001b[1;9A","_kmcud1":"\u001b[1;9B","_kmcuf1":"\u001b[1;9C","_kmcub1":"\u001b[1;9D","_kacu1":"\u001b[1;3A","_kacud1":"\u001b[1;3B","_kacuf1":"\u001b[1;3C","_kacub1":"\u001b[1;3D","_kchome":"\u001b[1;5H","_kcend":"\u001b[1;5F","_kahome":"\u001b[1;9H","_kaend":"\u001b[1;9F","_kascu1":"\u001b[1;4A","_kascud1":"\u001b[1;4B","_kascub1":"\u001b[1;4D","_kascuf1":"\u001b[1;4C","_kmscu1":"\u001b[1;10A","_kmscud1":"\u001b[1;10B","_kmscub1":"\u001b[1;10D","_kmscuf1":"\u001b[1;10C","_kcscu1":"\u001b[1;6A","_kcscud1":"\u001b[1;6B","_kcscub1":"\u001b[1;6D","_kcscuf1":"\u001b[1;6C","_kcHOME":"\u001b[1;6H","_kcEND":"\u001b[1;6F","_kaHOME":"\u001b[1;4H","_kaEND":"\u001b[1;4F","_kmHOME":"\u001b[1;10H","_kmEND":"\u001b[1;10F"} +{"name":"xiterm","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xnuppc","aliases":["darwin"],"cols":-1,"lines":-1,"colors":8,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xnuppc+b","cols":-1,"lines":-1,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[35m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"xnuppc+basic","cols":-1,"lines":-1,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"xnuppc+f","cols":-1,"lines":-1,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[36;4m","bold":"\u001b[35m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"xnuppc+f2","cols":-1,"lines":-1,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[34m","bold":"\u001b[33m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"xnuppc-100x37","aliases":["darwin-100x37"],"cols":100,"lines":37,"colors":8,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xnuppc-100x37-m","aliases":["darwin-100x37-m"],"cols":100,"lines":37,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"xnuppc-112x37","aliases":["darwin-112x37"],"cols":112,"lines":37,"colors":8,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xnuppc-112x37-m","aliases":["darwin-112x37-m"],"cols":112,"lines":37,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"xnuppc-128x40","aliases":["darwin-128x40"],"cols":128,"lines":40,"colors":8,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xnuppc-128x40-m","aliases":["darwin-128x40-m"],"cols":128,"lines":40,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"xnuppc-128x48","aliases":["darwin-128x48"],"cols":128,"lines":48,"colors":8,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xnuppc-128x48-m","aliases":["darwin-128x48-m"],"cols":128,"lines":48,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"xnuppc-144x48","aliases":["darwin-144x48"],"cols":144,"lines":48,"colors":8,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xnuppc-144x48-m","aliases":["darwin-144x48-m"],"cols":144,"lines":48,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"xnuppc-160x64","aliases":["darwin-160x64"],"cols":160,"lines":64,"colors":8,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xnuppc-160x64-m","aliases":["darwin-160x64-m"],"cols":160,"lines":64,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"xnuppc-200x64","aliases":["darwin-200x64"],"cols":200,"lines":64,"colors":8,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xnuppc-200x64-m","aliases":["darwin-200x64-m"],"cols":200,"lines":64,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"xnuppc-200x75","aliases":["darwin-200x75"],"cols":200,"lines":75,"colors":8,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xnuppc-200x75-m","aliases":["darwin-200x75-m"],"cols":200,"lines":75,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"xnuppc-256x96","aliases":["darwin-256x96"],"cols":256,"lines":96,"colors":8,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xnuppc-256x96-m","aliases":["darwin-256x96-m"],"cols":256,"lines":96,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"xnuppc-80x25","aliases":["darwin-80x25"],"cols":80,"lines":25,"colors":8,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xnuppc-80x25-m","aliases":["darwin-80x25-m"],"cols":80,"lines":25,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"xnuppc-80x30","aliases":["darwin-80x30"],"cols":80,"lines":30,"colors":8,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xnuppc-80x30-m","aliases":["darwin-80x30-m"],"cols":80,"lines":30,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"xnuppc-90x30","aliases":["darwin-90x30"],"cols":90,"lines":30,"colors":8,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xnuppc-90x30-m","aliases":["darwin-90x30-m"],"cols":90,"lines":30,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"xnuppc-b","aliases":["darwin-b"],"cols":-1,"lines":-1,"colors":8,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[35m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xnuppc-f","aliases":["darwin-f"],"cols":-1,"lines":-1,"colors":8,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[36;4m","bold":"\u001b[35m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xnuppc-f2","aliases":["darwin-f2"],"cols":-1,"lines":-1,"colors":8,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[34m","bold":"\u001b[33m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xnuppc-m","aliases":["darwin-m"],"cols":-1,"lines":-1,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"xnuppc-m-b","aliases":["darwin-m-b"],"cols":-1,"lines":-1,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[35m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"xnuppc-m-f","aliases":["darwin-m-f"],"cols":-1,"lines":-1,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[36;4m","bold":"\u001b[35m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"xnuppc-m-f2","aliases":["darwin-m-f2"],"cols":-1,"lines":-1,"clear":"\u001b[H\u001b[J","sgr0":"\u001b[m\u000f","smul":"\u001b[34m","bold":"\u001b[33m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[D","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC"} +{"name":"xtalk","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[J$\u003c50\u003e","sgr0":"\u001b[m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH$\u003c5\u003e","cub1":"\u0008","cuu1":"\u001b[A$\u003c2\u003e","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOt","kf6":"\u001bOu","kf7":"\u001bOv","kf8":"\u001bOl","kf9":"\u001bOw","kf10":"\u001bOx","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"xterm","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[?12l\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b(B\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[1;2P","kf14":"\u001b[1;2Q","kf15":"\u001b[1;2R","kf16":"\u001b[1;2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001b[1;5P","kf26":"\u001b[1;5Q","kf27":"\u001b[1;5R","kf28":"\u001b[1;5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001b[1;6P","kf38":"\u001b[1;6Q","kf39":"\u001b[1;6R","kf40":"\u001b[1;6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kf49":"\u001b[1;3P","kf50":"\u001b[1;3Q","kf51":"\u001b[1;3R","kf52":"\u001b[1;3S","kf53":"\u001b[15;3~","kf54":"\u001b[17;3~","kf55":"\u001b[18;3~","kf56":"\u001b[19;3~","kf57":"\u001b[20;3~","kf58":"\u001b[21;3~","kf59":"\u001b[23;3~","kf60":"\u001b[24;3~","kf61":"\u001b[1;4P","kf62":"\u001b[1;4Q","kf63":"\u001b[1;4R","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","kRIT":"\u001b[1;2C","kLFT":"\u001b[1;2D","kHOM":"\u001b[1;2H","kEND":"\u001b[1;2F","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kscu1":"\u001b[1;2A","_kscud1":"\u001b[1;2B","_kccu1":"\u001b[1;5A","_kccud1":"\u001b[1;5B","_kccuf1":"\u001b[1;5C","_kccub1":"\u001b[1;5D","_kmcu1":"\u001b[1;9A","_kmcud1":"\u001b[1;9B","_kmcuf1":"\u001b[1;9C","_kmcub1":"\u001b[1;9D","_kacu1":"\u001b[1;3A","_kacud1":"\u001b[1;3B","_kacuf1":"\u001b[1;3C","_kacub1":"\u001b[1;3D","_kchome":"\u001b[1;5H","_kcend":"\u001b[1;5F","_kahome":"\u001b[1;9H","_kaend":"\u001b[1;9F","_kascu1":"\u001b[1;4A","_kascud1":"\u001b[1;4B","_kascub1":"\u001b[1;4D","_kascuf1":"\u001b[1;4C","_kmscu1":"\u001b[1;10A","_kmscud1":"\u001b[1;10B","_kmscub1":"\u001b[1;10D","_kmscuf1":"\u001b[1;10C","_kcscu1":"\u001b[1;6A","_kcscud1":"\u001b[1;6B","_kcscub1":"\u001b[1;6D","_kcscuf1":"\u001b[1;6C","_kcHOME":"\u001b[1;6H","_kcEND":"\u001b[1;6F","_kaHOME":"\u001b[1;4H","_kaEND":"\u001b[1;4F","_kmHOME":"\u001b[1;10H","_kmEND":"\u001b[1;10F"} +{"name":"xterm+sl","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[?12l\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b(B\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[1;2P","kf14":"\u001b[1;2Q","kf15":"\u001b[1;2R","kf16":"\u001b[1;2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001b[1;5P","kf26":"\u001b[1;5Q","kf27":"\u001b[1;5R","kf28":"\u001b[1;5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001b[1;6P","kf38":"\u001b[1;6Q","kf39":"\u001b[1;6R","kf40":"\u001b[1;6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kf49":"\u001b[1;3P","kf50":"\u001b[1;3Q","kf51":"\u001b[1;3R","kf52":"\u001b[1;3S","kf53":"\u001b[15;3~","kf54":"\u001b[17;3~","kf55":"\u001b[18;3~","kf56":"\u001b[19;3~","kf57":"\u001b[20;3~","kf58":"\u001b[21;3~","kf59":"\u001b[23;3~","kf60":"\u001b[24;3~","kf61":"\u001b[1;4P","kf62":"\u001b[1;4Q","kf63":"\u001b[1;4R","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","kRIT":"\u001b[1;2C","kLFT":"\u001b[1;2D","kHOM":"\u001b[1;2H","kEND":"\u001b[1;2F","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kscu1":"\u001b[1;2A","_kscud1":"\u001b[1;2B","_kccu1":"\u001b[1;5A","_kccud1":"\u001b[1;5B","_kccuf1":"\u001b[1;5C","_kccub1":"\u001b[1;5D","_kmcu1":"\u001b[1;9A","_kmcud1":"\u001b[1;9B","_kmcuf1":"\u001b[1;9C","_kmcub1":"\u001b[1;9D","_kacu1":"\u001b[1;3A","_kacud1":"\u001b[1;3B","_kacuf1":"\u001b[1;3C","_kacub1":"\u001b[1;3D","_kchome":"\u001b[1;5H","_kcend":"\u001b[1;5F","_kahome":"\u001b[1;9H","_kaend":"\u001b[1;9F","_kascu1":"\u001b[1;4A","_kascud1":"\u001b[1;4B","_kascub1":"\u001b[1;4D","_kascuf1":"\u001b[1;4C","_kmscu1":"\u001b[1;10A","_kmscud1":"\u001b[1;10B","_kmscub1":"\u001b[1;10D","_kmscuf1":"\u001b[1;10C","_kcscu1":"\u001b[1;6A","_kcscud1":"\u001b[1;6B","_kcscub1":"\u001b[1;6D","_kcscuf1":"\u001b[1;6C","_kcHOME":"\u001b[1;6H","_kcEND":"\u001b[1;6F","_kaHOME":"\u001b[1;4H","_kaEND":"\u001b[1;4F","_kmHOME":"\u001b[1;10H","_kmEND":"\u001b[1;10F"} +{"name":"xterm+sl-twm","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[?12l\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b(B\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[1;2P","kf14":"\u001b[1;2Q","kf15":"\u001b[1;2R","kf16":"\u001b[1;2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001b[1;5P","kf26":"\u001b[1;5Q","kf27":"\u001b[1;5R","kf28":"\u001b[1;5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001b[1;6P","kf38":"\u001b[1;6Q","kf39":"\u001b[1;6R","kf40":"\u001b[1;6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kf49":"\u001b[1;3P","kf50":"\u001b[1;3Q","kf51":"\u001b[1;3R","kf52":"\u001b[1;3S","kf53":"\u001b[15;3~","kf54":"\u001b[17;3~","kf55":"\u001b[18;3~","kf56":"\u001b[19;3~","kf57":"\u001b[20;3~","kf58":"\u001b[21;3~","kf59":"\u001b[23;3~","kf60":"\u001b[24;3~","kf61":"\u001b[1;4P","kf62":"\u001b[1;4Q","kf63":"\u001b[1;4R","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","kRIT":"\u001b[1;2C","kLFT":"\u001b[1;2D","kHOM":"\u001b[1;2H","kEND":"\u001b[1;2F","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kscu1":"\u001b[1;2A","_kscud1":"\u001b[1;2B","_kccu1":"\u001b[1;5A","_kccud1":"\u001b[1;5B","_kccuf1":"\u001b[1;5C","_kccub1":"\u001b[1;5D","_kmcu1":"\u001b[1;9A","_kmcud1":"\u001b[1;9B","_kmcuf1":"\u001b[1;9C","_kmcub1":"\u001b[1;9D","_kacu1":"\u001b[1;3A","_kacud1":"\u001b[1;3B","_kacuf1":"\u001b[1;3C","_kacub1":"\u001b[1;3D","_kchome":"\u001b[1;5H","_kcend":"\u001b[1;5F","_kahome":"\u001b[1;9H","_kaend":"\u001b[1;9F","_kascu1":"\u001b[1;4A","_kascud1":"\u001b[1;4B","_kascub1":"\u001b[1;4D","_kascuf1":"\u001b[1;4C","_kmscu1":"\u001b[1;10A","_kmscud1":"\u001b[1;10B","_kmscub1":"\u001b[1;10D","_kmscuf1":"\u001b[1;10C","_kcscu1":"\u001b[1;6A","_kcscud1":"\u001b[1;6B","_kcscub1":"\u001b[1;6D","_kcscuf1":"\u001b[1;6C","_kcHOME":"\u001b[1;6H","_kcEND":"\u001b[1;6F","_kaHOME":"\u001b[1;4H","_kaEND":"\u001b[1;4F","_kmHOME":"\u001b[1;10H","_kmEND":"\u001b[1;10F"} +{"name":"xterm-1002","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[?12l\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b(B\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[1;2P","kf14":"\u001b[1;2Q","kf15":"\u001b[1;2R","kf16":"\u001b[1;2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001b[1;5P","kf26":"\u001b[1;5Q","kf27":"\u001b[1;5R","kf28":"\u001b[1;5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001b[1;6P","kf38":"\u001b[1;6Q","kf39":"\u001b[1;6R","kf40":"\u001b[1;6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kf49":"\u001b[1;3P","kf50":"\u001b[1;3Q","kf51":"\u001b[1;3R","kf52":"\u001b[1;3S","kf53":"\u001b[15;3~","kf54":"\u001b[17;3~","kf55":"\u001b[18;3~","kf56":"\u001b[19;3~","kf57":"\u001b[20;3~","kf58":"\u001b[21;3~","kf59":"\u001b[23;3~","kf60":"\u001b[24;3~","kf61":"\u001b[1;4P","kf62":"\u001b[1;4Q","kf63":"\u001b[1;4R","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"\u001b[?1002%?%p1%{1}%=%th%el%;","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","kRIT":"\u001b[1;2C","kLFT":"\u001b[1;2D","kHOM":"\u001b[1;2H","kEND":"\u001b[1;2F","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kscu1":"\u001b[1;2A","_kscud1":"\u001b[1;2B","_kccu1":"\u001b[1;5A","_kccud1":"\u001b[1;5B","_kccuf1":"\u001b[1;5C","_kccub1":"\u001b[1;5D","_kmcu1":"\u001b[1;9A","_kmcud1":"\u001b[1;9B","_kmcuf1":"\u001b[1;9C","_kmcub1":"\u001b[1;9D","_kacu1":"\u001b[1;3A","_kacud1":"\u001b[1;3B","_kacuf1":"\u001b[1;3C","_kacub1":"\u001b[1;3D","_kchome":"\u001b[1;5H","_kcend":"\u001b[1;5F","_kahome":"\u001b[1;9H","_kaend":"\u001b[1;9F","_kascu1":"\u001b[1;4A","_kascud1":"\u001b[1;4B","_kascub1":"\u001b[1;4D","_kascuf1":"\u001b[1;4C","_kmscu1":"\u001b[1;10A","_kmscud1":"\u001b[1;10B","_kmscub1":"\u001b[1;10D","_kmscuf1":"\u001b[1;10C","_kcscu1":"\u001b[1;6A","_kcscud1":"\u001b[1;6B","_kcscub1":"\u001b[1;6D","_kcscuf1":"\u001b[1;6C","_kcHOME":"\u001b[1;6H","_kcEND":"\u001b[1;6F","_kaHOME":"\u001b[1;4H","_kaEND":"\u001b[1;4F","_kmHOME":"\u001b[1;10H","_kmEND":"\u001b[1;10F"} +{"name":"xterm-1003","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[?12l\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b(B\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[1;2P","kf14":"\u001b[1;2Q","kf15":"\u001b[1;2R","kf16":"\u001b[1;2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001b[1;5P","kf26":"\u001b[1;5Q","kf27":"\u001b[1;5R","kf28":"\u001b[1;5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001b[1;6P","kf38":"\u001b[1;6Q","kf39":"\u001b[1;6R","kf40":"\u001b[1;6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kf49":"\u001b[1;3P","kf50":"\u001b[1;3Q","kf51":"\u001b[1;3R","kf52":"\u001b[1;3S","kf53":"\u001b[15;3~","kf54":"\u001b[17;3~","kf55":"\u001b[18;3~","kf56":"\u001b[19;3~","kf57":"\u001b[20;3~","kf58":"\u001b[21;3~","kf59":"\u001b[23;3~","kf60":"\u001b[24;3~","kf61":"\u001b[1;4P","kf62":"\u001b[1;4Q","kf63":"\u001b[1;4R","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"\u001b[?1003%?%p1%{1}%=%th%el%;","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","kRIT":"\u001b[1;2C","kLFT":"\u001b[1;2D","kHOM":"\u001b[1;2H","kEND":"\u001b[1;2F","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kscu1":"\u001b[1;2A","_kscud1":"\u001b[1;2B","_kccu1":"\u001b[1;5A","_kccud1":"\u001b[1;5B","_kccuf1":"\u001b[1;5C","_kccub1":"\u001b[1;5D","_kmcu1":"\u001b[1;9A","_kmcud1":"\u001b[1;9B","_kmcuf1":"\u001b[1;9C","_kmcub1":"\u001b[1;9D","_kacu1":"\u001b[1;3A","_kacud1":"\u001b[1;3B","_kacuf1":"\u001b[1;3C","_kacub1":"\u001b[1;3D","_kchome":"\u001b[1;5H","_kcend":"\u001b[1;5F","_kahome":"\u001b[1;9H","_kaend":"\u001b[1;9F","_kascu1":"\u001b[1;4A","_kascud1":"\u001b[1;4B","_kascub1":"\u001b[1;4D","_kascuf1":"\u001b[1;4C","_kmscu1":"\u001b[1;10A","_kmscud1":"\u001b[1;10B","_kmscub1":"\u001b[1;10D","_kmscuf1":"\u001b[1;10C","_kcscu1":"\u001b[1;6A","_kcscud1":"\u001b[1;6B","_kcscub1":"\u001b[1;6D","_kcscuf1":"\u001b[1;6C","_kcHOME":"\u001b[1;6H","_kcEND":"\u001b[1;6F","_kaHOME":"\u001b[1;4H","_kaEND":"\u001b[1;4F","_kmHOME":"\u001b[1;10H","_kmEND":"\u001b[1;10F"} +{"name":"xterm-16color","cols":80,"lines":24,"colors":16,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[?12l\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b(B\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%dm","setbg":"\u001b[%?%p1%{8}%\u003c%t%p1%'('%+%e%p1%{92}%+%;%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[1;2P","kf14":"\u001b[1;2Q","kf15":"\u001b[1;2R","kf16":"\u001b[1;2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001b[1;5P","kf26":"\u001b[1;5Q","kf27":"\u001b[1;5R","kf28":"\u001b[1;5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001b[1;6P","kf38":"\u001b[1;6Q","kf39":"\u001b[1;6R","kf40":"\u001b[1;6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kf49":"\u001b[1;3P","kf50":"\u001b[1;3Q","kf51":"\u001b[1;3R","kf52":"\u001b[1;3S","kf53":"\u001b[15;3~","kf54":"\u001b[17;3~","kf55":"\u001b[18;3~","kf56":"\u001b[19;3~","kf57":"\u001b[20;3~","kf58":"\u001b[21;3~","kf59":"\u001b[23;3~","kf60":"\u001b[24;3~","kf61":"\u001b[1;4P","kf62":"\u001b[1;4Q","kf63":"\u001b[1;4R","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","kRIT":"\u001b[1;2C","kLFT":"\u001b[1;2D","kHOM":"\u001b[1;2H","kEND":"\u001b[1;2F","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t%p1%{30}%+%e%p1%'R'%+%;%d;%?%p2%{8}%\u003c%t%p2%'('%+%e%p2%{92}%+%;%dm","_kscu1":"\u001b[1;2A","_kscud1":"\u001b[1;2B","_kccu1":"\u001b[1;5A","_kccud1":"\u001b[1;5B","_kccuf1":"\u001b[1;5C","_kccub1":"\u001b[1;5D","_kmcu1":"\u001b[1;9A","_kmcud1":"\u001b[1;9B","_kmcuf1":"\u001b[1;9C","_kmcub1":"\u001b[1;9D","_kacu1":"\u001b[1;3A","_kacud1":"\u001b[1;3B","_kacuf1":"\u001b[1;3C","_kacub1":"\u001b[1;3D","_kchome":"\u001b[1;5H","_kcend":"\u001b[1;5F","_kahome":"\u001b[1;9H","_kaend":"\u001b[1;9F","_kascu1":"\u001b[1;4A","_kascud1":"\u001b[1;4B","_kascub1":"\u001b[1;4D","_kascuf1":"\u001b[1;4C","_kmscu1":"\u001b[1;10A","_kmscud1":"\u001b[1;10B","_kmscub1":"\u001b[1;10D","_kmscuf1":"\u001b[1;10C","_kcscu1":"\u001b[1;6A","_kcscud1":"\u001b[1;6B","_kcscub1":"\u001b[1;6D","_kcscuf1":"\u001b[1;6C","_kcHOME":"\u001b[1;6H","_kcEND":"\u001b[1;6F","_kaHOME":"\u001b[1;4H","_kaEND":"\u001b[1;4F","_kmHOME":"\u001b[1;10H","_kmEND":"\u001b[1;10F"} +{"name":"xterm-24","aliases":["vs100","xterms"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"xterm-256color","cols":80,"lines":24,"colors":256,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[?12l\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b(B\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[%?%p1%{8}%\u003c%t3%p1%d%e%p1%{16}%\u003c%t9%p1%{8}%-%d%e38;5;%p1%d%;m","setbg":"\u001b[%?%p1%{8}%\u003c%t4%p1%d%e%p1%{16}%\u003c%t10%p1%{8}%-%d%e48;5;%p1%d%;m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[1;2P","kf14":"\u001b[1;2Q","kf15":"\u001b[1;2R","kf16":"\u001b[1;2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001b[1;5P","kf26":"\u001b[1;5Q","kf27":"\u001b[1;5R","kf28":"\u001b[1;5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001b[1;6P","kf38":"\u001b[1;6Q","kf39":"\u001b[1;6R","kf40":"\u001b[1;6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kf49":"\u001b[1;3P","kf50":"\u001b[1;3Q","kf51":"\u001b[1;3R","kf52":"\u001b[1;3S","kf53":"\u001b[15;3~","kf54":"\u001b[17;3~","kf55":"\u001b[18;3~","kf56":"\u001b[19;3~","kf57":"\u001b[20;3~","kf58":"\u001b[21;3~","kf59":"\u001b[23;3~","kf60":"\u001b[24;3~","kf61":"\u001b[1;4P","kf62":"\u001b[1;4Q","kf63":"\u001b[1;4R","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","kRIT":"\u001b[1;2C","kLFT":"\u001b[1;2D","kHOM":"\u001b[1;2H","kEND":"\u001b[1;2F","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t3%p1%d%e%p1%{16}%\u003c%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%\u003c%t4%p2%d%e%p2%{16}%\u003c%t10%p2%{8}%-%d%e48;5;%p2%d%;m","_kscu1":"\u001b[1;2A","_kscud1":"\u001b[1;2B","_kccu1":"\u001b[1;5A","_kccud1":"\u001b[1;5B","_kccuf1":"\u001b[1;5C","_kccub1":"\u001b[1;5D","_kmcu1":"\u001b[1;9A","_kmcud1":"\u001b[1;9B","_kmcuf1":"\u001b[1;9C","_kmcub1":"\u001b[1;9D","_kacu1":"\u001b[1;3A","_kacud1":"\u001b[1;3B","_kacuf1":"\u001b[1;3C","_kacub1":"\u001b[1;3D","_kchome":"\u001b[1;5H","_kcend":"\u001b[1;5F","_kahome":"\u001b[1;9H","_kaend":"\u001b[1;9F","_kascu1":"\u001b[1;4A","_kascud1":"\u001b[1;4B","_kascub1":"\u001b[1;4D","_kascuf1":"\u001b[1;4C","_kmscu1":"\u001b[1;10A","_kmscud1":"\u001b[1;10B","_kmscub1":"\u001b[1;10D","_kmscuf1":"\u001b[1;10C","_kcscu1":"\u001b[1;6A","_kcscud1":"\u001b[1;6B","_kcscub1":"\u001b[1;6D","_kcscuf1":"\u001b[1;6C","_kcHOME":"\u001b[1;6H","_kcEND":"\u001b[1;6F","_kaHOME":"\u001b[1;4H","_kaEND":"\u001b[1;4F","_kmHOME":"\u001b[1;10H","_kmEND":"\u001b[1;10F"} +{"name":"xterm-88color","cols":80,"lines":24,"colors":88,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[?12l\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b(B\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[%?%p1%{8}%\u003c%t3%p1%d%e%p1%{16}%\u003c%t9%p1%{8}%-%d%e38;5;%p1%d%;m","setbg":"\u001b[%?%p1%{8}%\u003c%t4%p1%d%e%p1%{16}%\u003c%t10%p1%{8}%-%d%e48;5;%p1%d%;m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[1;2P","kf14":"\u001b[1;2Q","kf15":"\u001b[1;2R","kf16":"\u001b[1;2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001b[1;5P","kf26":"\u001b[1;5Q","kf27":"\u001b[1;5R","kf28":"\u001b[1;5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001b[1;6P","kf38":"\u001b[1;6Q","kf39":"\u001b[1;6R","kf40":"\u001b[1;6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kf49":"\u001b[1;3P","kf50":"\u001b[1;3Q","kf51":"\u001b[1;3R","kf52":"\u001b[1;3S","kf53":"\u001b[15;3~","kf54":"\u001b[17;3~","kf55":"\u001b[18;3~","kf56":"\u001b[19;3~","kf57":"\u001b[20;3~","kf58":"\u001b[21;3~","kf59":"\u001b[23;3~","kf60":"\u001b[24;3~","kf61":"\u001b[1;4P","kf62":"\u001b[1;4Q","kf63":"\u001b[1;4R","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","kRIT":"\u001b[1;2C","kLFT":"\u001b[1;2D","kHOM":"\u001b[1;2H","kEND":"\u001b[1;2F","_setfgbg":"\u001b[%?%p1%{8}%\u003c%t3%p1%d%e%p1%{16}%\u003c%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%\u003c%t4%p2%d%e%p2%{16}%\u003c%t10%p2%{8}%-%d%e48;5;%p2%d%;m","_kscu1":"\u001b[1;2A","_kscud1":"\u001b[1;2B","_kccu1":"\u001b[1;5A","_kccud1":"\u001b[1;5B","_kccuf1":"\u001b[1;5C","_kccub1":"\u001b[1;5D","_kmcu1":"\u001b[1;9A","_kmcud1":"\u001b[1;9B","_kmcuf1":"\u001b[1;9C","_kmcub1":"\u001b[1;9D","_kacu1":"\u001b[1;3A","_kacud1":"\u001b[1;3B","_kacuf1":"\u001b[1;3C","_kacub1":"\u001b[1;3D","_kchome":"\u001b[1;5H","_kcend":"\u001b[1;5F","_kahome":"\u001b[1;9H","_kaend":"\u001b[1;9F","_kascu1":"\u001b[1;4A","_kascud1":"\u001b[1;4B","_kascub1":"\u001b[1;4D","_kascuf1":"\u001b[1;4C","_kmscu1":"\u001b[1;10A","_kmscud1":"\u001b[1;10B","_kmscub1":"\u001b[1;10D","_kmscuf1":"\u001b[1;10C","_kcscu1":"\u001b[1;6A","_kcscud1":"\u001b[1;6B","_kcscub1":"\u001b[1;6D","_kcscuf1":"\u001b[1;6C","_kcHOME":"\u001b[1;6H","_kcEND":"\u001b[1;6F","_kaHOME":"\u001b[1;4H","_kaEND":"\u001b[1;4F","_kmHOME":"\u001b[1;10H","_kmEND":"\u001b[1;10F"} +{"name":"xterm-8bit","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\ufffdH\ufffd2J","smcup":"\ufffd?1049h","rmcup":"\ufffd?1049l","cnorm":"\ufffd?25l\ufffd?25h","civis":"\ufffd?25l","sgr0":"\ufffd0m\u001b(B","smul":"\ufffd4m","bold":"\ufffd1m","blink":"\ufffd5m","rev":"\ufffd7m","smkx":"\ufffd?1h\u001b=","rmkx":"\ufffd?1l\u001b\u003e","setaf":"\ufffd3%p1%dm","setbg":"\ufffd4%p1%dm","cup":"\ufffd%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\ufffdA","kbs":"\u0008","kf1":"\ufffd11~","kf2":"\ufffd12~","kf3":"\ufffd13~","kf4":"\ufffd14~","kf5":"\ufffd15~","kf6":"\ufffd17~","kf7":"\ufffd18~","kf8":"\ufffd19~","kf9":"\ufffd20~","kf10":"\ufffd21~","kf11":"\ufffd23~","kf12":"\ufffd24~","kf13":"\ufffd25~","kf14":"\ufffd26~","kf15":"\ufffd28~","kf16":"\ufffd29~","kf17":"\ufffd31~","kf18":"\ufffd32~","kf19":"\ufffd33~","kf20":"\ufffd34~","kich":"\ufffd2~","kdch":"\ufffd3~","khome":"\ufffd1~","kend":"\ufffd4~","kpp":"\ufffd5~","knp":"\ufffd6~","kcuu1":"\ufffdA","kcud1":"\ufffdB","kcub1":"\ufffdD","kcuf1":"\ufffdC","kcbt":"\ufffdZ","kmous":"\ufffdM","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B"} +{"name":"xterm-basic","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[?12l\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b(B\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xterm-bold","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","sgr0":"\u001b[m","smul":"\u001b[1m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"xterm-color","aliases":["nxterm"],"cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xterm-hp","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[?12l\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b(B\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bp","kf2":"\u001bq","kf3":"\u001br","kf4":"\u001bs","kf5":"\u001bt","kf6":"\u001bu","kf7":"\u001bv","kf8":"\u001bw","kich":"\u001bQ","kdch":"\u001bP","khome":"\u001bh","kend":"\u001bF","kpp":"\u001bT","knp":"\u001bS","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","kclr":"\u001bJ","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xterm-new","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[?12l\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b(B\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[1;2P","kf14":"\u001b[1;2Q","kf15":"\u001b[1;2R","kf16":"\u001b[1;2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001b[1;5P","kf26":"\u001b[1;5Q","kf27":"\u001b[1;5R","kf28":"\u001b[1;5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001b[1;6P","kf38":"\u001b[1;6Q","kf39":"\u001b[1;6R","kf40":"\u001b[1;6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kf49":"\u001b[1;3P","kf50":"\u001b[1;3Q","kf51":"\u001b[1;3R","kf52":"\u001b[1;3S","kf53":"\u001b[15;3~","kf54":"\u001b[17;3~","kf55":"\u001b[18;3~","kf56":"\u001b[19;3~","kf57":"\u001b[20;3~","kf58":"\u001b[21;3~","kf59":"\u001b[23;3~","kf60":"\u001b[24;3~","kf61":"\u001b[1;4P","kf62":"\u001b[1;4Q","kf63":"\u001b[1;4R","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","kRIT":"\u001b[1;2C","kLFT":"\u001b[1;2D","kHOM":"\u001b[1;2H","kEND":"\u001b[1;2F","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kscu1":"\u001b[1;2A","_kscud1":"\u001b[1;2B","_kccu1":"\u001b[1;5A","_kccud1":"\u001b[1;5B","_kccuf1":"\u001b[1;5C","_kccub1":"\u001b[1;5D","_kmcu1":"\u001b[1;9A","_kmcud1":"\u001b[1;9B","_kmcuf1":"\u001b[1;9C","_kmcub1":"\u001b[1;9D","_kacu1":"\u001b[1;3A","_kacud1":"\u001b[1;3B","_kacuf1":"\u001b[1;3C","_kacub1":"\u001b[1;3D","_kchome":"\u001b[1;5H","_kcend":"\u001b[1;5F","_kahome":"\u001b[1;9H","_kaend":"\u001b[1;9F","_kascu1":"\u001b[1;4A","_kascud1":"\u001b[1;4B","_kascub1":"\u001b[1;4D","_kascuf1":"\u001b[1;4C","_kmscu1":"\u001b[1;10A","_kmscud1":"\u001b[1;10B","_kmscub1":"\u001b[1;10D","_kmscuf1":"\u001b[1;10C","_kcscu1":"\u001b[1;6A","_kcscud1":"\u001b[1;6B","_kcscub1":"\u001b[1;6D","_kcscuf1":"\u001b[1;6C","_kcHOME":"\u001b[1;6H","_kcEND":"\u001b[1;6F","_kaHOME":"\u001b[1;4H","_kaEND":"\u001b[1;4F","_kmHOME":"\u001b[1;10H","_kmEND":"\u001b[1;10F"} +{"name":"xterm-nic","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[?12l\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b(B\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[1;2P","kf14":"\u001b[1;2Q","kf15":"\u001b[1;2R","kf16":"\u001b[1;2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001b[1;5P","kf26":"\u001b[1;5Q","kf27":"\u001b[1;5R","kf28":"\u001b[1;5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001b[1;6P","kf38":"\u001b[1;6Q","kf39":"\u001b[1;6R","kf40":"\u001b[1;6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kf49":"\u001b[1;3P","kf50":"\u001b[1;3Q","kf51":"\u001b[1;3R","kf52":"\u001b[1;3S","kf53":"\u001b[15;3~","kf54":"\u001b[17;3~","kf55":"\u001b[18;3~","kf56":"\u001b[19;3~","kf57":"\u001b[20;3~","kf58":"\u001b[21;3~","kf59":"\u001b[23;3~","kf60":"\u001b[24;3~","kf61":"\u001b[1;4P","kf62":"\u001b[1;4Q","kf63":"\u001b[1;4R","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","kRIT":"\u001b[1;2C","kLFT":"\u001b[1;2D","kHOM":"\u001b[1;2H","kEND":"\u001b[1;2F","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kscu1":"\u001b[1;2A","_kscud1":"\u001b[1;2B","_kccu1":"\u001b[1;5A","_kccud1":"\u001b[1;5B","_kccuf1":"\u001b[1;5C","_kccub1":"\u001b[1;5D","_kmcu1":"\u001b[1;9A","_kmcud1":"\u001b[1;9B","_kmcuf1":"\u001b[1;9C","_kmcub1":"\u001b[1;9D","_kacu1":"\u001b[1;3A","_kacud1":"\u001b[1;3B","_kacuf1":"\u001b[1;3C","_kacub1":"\u001b[1;3D","_kchome":"\u001b[1;5H","_kcend":"\u001b[1;5F","_kahome":"\u001b[1;9H","_kaend":"\u001b[1;9F","_kascu1":"\u001b[1;4A","_kascud1":"\u001b[1;4B","_kascub1":"\u001b[1;4D","_kascuf1":"\u001b[1;4C","_kmscu1":"\u001b[1;10A","_kmscud1":"\u001b[1;10B","_kmscub1":"\u001b[1;10D","_kmscuf1":"\u001b[1;10C","_kcscu1":"\u001b[1;6A","_kcscud1":"\u001b[1;6B","_kcscub1":"\u001b[1;6D","_kcscuf1":"\u001b[1;6C","_kcHOME":"\u001b[1;6H","_kcEND":"\u001b[1;6F","_kaHOME":"\u001b[1;4H","_kaEND":"\u001b[1;4F","_kmHOME":"\u001b[1;10H","_kmEND":"\u001b[1;10F"} +{"name":"xterm-noapp","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","cnorm":"\u001b[?12l\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b(B\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b=","rmkx":"\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[1;2P","kf14":"\u001b[1;2Q","kf15":"\u001b[1;2R","kf16":"\u001b[1;2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001b[1;5P","kf26":"\u001b[1;5Q","kf27":"\u001b[1;5R","kf28":"\u001b[1;5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001b[1;6P","kf38":"\u001b[1;6Q","kf39":"\u001b[1;6R","kf40":"\u001b[1;6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kf49":"\u001b[1;3P","kf50":"\u001b[1;3Q","kf51":"\u001b[1;3R","kf52":"\u001b[1;3S","kf53":"\u001b[15;3~","kf54":"\u001b[17;3~","kf55":"\u001b[18;3~","kf56":"\u001b[19;3~","kf57":"\u001b[20;3~","kf58":"\u001b[21;3~","kf59":"\u001b[23;3~","kf60":"\u001b[24;3~","kf61":"\u001b[1;4P","kf62":"\u001b[1;4Q","kf63":"\u001b[1;4R","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","kRIT":"\u001b[1;2C","kLFT":"\u001b[1;2D","kHOM":"\u001b[1;2H","kEND":"\u001b[1;2F","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kscu1":"\u001b[1;2A","_kscud1":"\u001b[1;2B","_kccu1":"\u001b[1;5A","_kccud1":"\u001b[1;5B","_kccuf1":"\u001b[1;5C","_kccub1":"\u001b[1;5D","_kmcu1":"\u001b[1;9A","_kmcud1":"\u001b[1;9B","_kmcuf1":"\u001b[1;9C","_kmcub1":"\u001b[1;9D","_kacu1":"\u001b[1;3A","_kacud1":"\u001b[1;3B","_kacuf1":"\u001b[1;3C","_kacub1":"\u001b[1;3D","_kchome":"\u001b[1;5H","_kcend":"\u001b[1;5F","_kahome":"\u001b[1;9H","_kaend":"\u001b[1;9F","_kascu1":"\u001b[1;4A","_kascud1":"\u001b[1;4B","_kascub1":"\u001b[1;4D","_kascuf1":"\u001b[1;4C","_kmscu1":"\u001b[1;10A","_kmscud1":"\u001b[1;10B","_kmscub1":"\u001b[1;10D","_kmscuf1":"\u001b[1;10C","_kcscu1":"\u001b[1;6A","_kcscud1":"\u001b[1;6B","_kcscub1":"\u001b[1;6D","_kcscuf1":"\u001b[1;6C","_kcHOME":"\u001b[1;6H","_kcEND":"\u001b[1;6F","_kaHOME":"\u001b[1;4H","_kaEND":"\u001b[1;4F","_kmHOME":"\u001b[1;10H","_kmEND":"\u001b[1;10F"} +{"name":"xterm-pcolor","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[?12l\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b(B\u001b[m","smul":"\u001b[4m\u001b[42m","bold":"\u001b[1m\u001b[43m","blink":"\u001b[5m","rev":"\u001b[7m\u001b[34m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[1;2P","kf14":"\u001b[1;2Q","kf15":"\u001b[1;2R","kf16":"\u001b[1;2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001b[1;5P","kf26":"\u001b[1;5Q","kf27":"\u001b[1;5R","kf28":"\u001b[1;5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001b[1;6P","kf38":"\u001b[1;6Q","kf39":"\u001b[1;6R","kf40":"\u001b[1;6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kf49":"\u001b[1;3P","kf50":"\u001b[1;3Q","kf51":"\u001b[1;3R","kf52":"\u001b[1;3S","kf53":"\u001b[15;3~","kf54":"\u001b[17;3~","kf55":"\u001b[18;3~","kf56":"\u001b[19;3~","kf57":"\u001b[20;3~","kf58":"\u001b[21;3~","kf59":"\u001b[23;3~","kf60":"\u001b[24;3~","kf61":"\u001b[1;4P","kf62":"\u001b[1;4Q","kf63":"\u001b[1;4R","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","enacs":"\u001b)0","kRIT":"\u001b[1;2C","kLFT":"\u001b[1;2D","kHOM":"\u001b[1;2H","kEND":"\u001b[1;2F","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kscu1":"\u001b[1;2A","_kscud1":"\u001b[1;2B","_kccu1":"\u001b[1;5A","_kccud1":"\u001b[1;5B","_kccuf1":"\u001b[1;5C","_kccub1":"\u001b[1;5D","_kmcu1":"\u001b[1;9A","_kmcud1":"\u001b[1;9B","_kmcuf1":"\u001b[1;9C","_kmcub1":"\u001b[1;9D","_kacu1":"\u001b[1;3A","_kacud1":"\u001b[1;3B","_kacuf1":"\u001b[1;3C","_kacub1":"\u001b[1;3D","_kchome":"\u001b[1;5H","_kcend":"\u001b[1;5F","_kahome":"\u001b[1;9H","_kaend":"\u001b[1;9F","_kascu1":"\u001b[1;4A","_kascud1":"\u001b[1;4B","_kascub1":"\u001b[1;4D","_kascuf1":"\u001b[1;4C","_kmscu1":"\u001b[1;10A","_kmscud1":"\u001b[1;10B","_kmscub1":"\u001b[1;10D","_kmscuf1":"\u001b[1;10C","_kcscu1":"\u001b[1;6A","_kcscud1":"\u001b[1;6B","_kcscub1":"\u001b[1;6D","_kcscuf1":"\u001b[1;6C","_kcHOME":"\u001b[1;6H","_kcEND":"\u001b[1;6F","_kaHOME":"\u001b[1;4H","_kaEND":"\u001b[1;4F","_kmHOME":"\u001b[1;10H","_kmEND":"\u001b[1;10F"} +{"name":"xterm-r5","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c"} +{"name":"xterm-r6","aliases":["xterm-old"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b)0"} +{"name":"xterm-sco","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[?12l\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b(B\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[M","kf2":"\u001b[N","kf3":"\u001b[O","kf4":"\u001b[P","kf5":"\u001b[Q","kf6":"\u001b[R","kf7":"\u001b[S","kf8":"\u001b[T","kf9":"\u001b[U","kf10":"\u001b[V","kf11":"\u001b[W","kf12":"\u001b[X","kf13":"\u001b[Y","kf14":"\u001b[Z","kf15":"\u001b[a","kf16":"\u001b[b","kf17":"\u001b[c","kf18":"\u001b[d","kf19":"\u001b[e","kf20":"\u001b[f","kf21":"\u001b[g","kf22":"\u001b[h","kf23":"\u001b[i","kf24":"\u001b[j","kf25":"\u001b[k","kf26":"\u001b[l","kf27":"\u001b[m","kf28":"\u001b[n","kf29":"\u001b[o","kf30":"\u001b[p","kf31":"\u001b[q","kf32":"\u001b[r","kf33":"\u001b[s","kf34":"\u001b[t","kf35":"\u001b[u","kf36":"\u001b[v","kf37":"\u001b[w","kf38":"\u001b[x","kf39":"\u001b[y","kf40":"\u001b[z","kf41":"\u001b[@","kf42":"\u001b[[","kf43":"\u001b[\\","kf44":"\u001b[]","kf45":"\u001b[^","kf46":"\u001b[_","kf47":"\u001b[`","kf48":"\u001b[{","kich":"\u001b[L","kdch":"","khome":"\u001b[H","kend":"\u001b[F","kpp":"\u001b[I","knp":"\u001b[G","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","kmous":"\u001b[\u003eM","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xterm-sun","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[?12l\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b(B\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[224z","kf2":"\u001b[225z","kf3":"\u001b[226z","kf4":"\u001b[227z","kf5":"\u001b[228z","kf6":"\u001b[229z","kf7":"\u001b[230z","kf8":"\u001b[231z","kf9":"\u001b[232z","kf10":"\u001b[233z","kf11":"\u001b[192z","kf12":"\u001b[193z","kf13":"\u001b[194z","kf14":"\u001b[195z","kf15":"\u001b[196z","kf17":"\u001b[198z","kf18":"\u001b[199z","kf19":"\u001b[200z","kf20":"\u001b[201z","kf31":"\u001b[208z","kf32":"\u001b[209z","kf33":"\u001b[210z","kf34":"\u001b[211z","kf35":"\u001b[212z","kf36":"\u001b[213z","kf38":"\u001b[215z","kf40":"\u001b[217z","kf42":"\u001b[219z","kf44":"\u001b[221z","kf45":"\u001b[222z","kf46":"\u001b[234z","kf47":"\u001b[235z","kich":"\u001b[2z","kdch":"\u001b[3z","khome":"\u001b[214z","kend":"\u001b[220z","khlp":"\u001b[196z","kpp":"\u001b[216z","knp":"\u001b[222z","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xterm-vt220","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[?12l\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b(B\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kend":"\u001b[4~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xterm-vt52","cols":80,"lines":24,"bell":"\u0007","clear":"\u001bH\u001bJ","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u001bD","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001bF","rmacs":"\u001bG"} +{"name":"xterm-xf86-v32","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[11~","kf2":"\u001b[12~","kf3":"\u001b[13~","kf4":"\u001b[14~","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xterm-xf86-v33","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xterm-xf86-v333","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1048h\u001b[?1047h","rmcup":"\u001b[?1047l\u001b[?1048l","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xterm-xf86-v40","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001bO2P","kf14":"\u001bO2Q","kf15":"\u001bO2R","kf16":"\u001bO2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001bO5P","kf26":"\u001bO5Q","kf27":"\u001bO5R","kf28":"\u001bO5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001bO6P","kf38":"\u001bO6Q","kf39":"\u001bO6R","kf40":"\u001bO6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","kRIT":"\u001bO5C","kLFT":"\u001bO5D","kHOM":"\u001bO5H","kEND":"\u001bO5F","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xterm-xf86-v43","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001bO2P","kf14":"\u001bO2Q","kf15":"\u001bO2R","kf16":"\u001bO2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001bO5P","kf26":"\u001bO5Q","kf27":"\u001bO5R","kf28":"\u001bO5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001bO6P","kf38":"\u001bO6Q","kf39":"\u001bO6R","kf40":"\u001bO6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","kRIT":"\u001b[1;2C","kLFT":"\u001b[1;2D","kHOM":"\u001b[1;2H","kEND":"\u001b[1;2F","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kscu1":"\u001b[1;2A","_kscud1":"\u001b[1;2B","_kccu1":"\u001b[1;5A","_kccud1":"\u001b[1;5B","_kccuf1":"\u001b[1;5C","_kccub1":"\u001b[1;5D","_kmcu1":"\u001b[1;9A","_kmcud1":"\u001b[1;9B","_kmcuf1":"\u001b[1;9C","_kmcub1":"\u001b[1;9D","_kacu1":"\u001b[1;3A","_kacud1":"\u001b[1;3B","_kacuf1":"\u001b[1;3C","_kacub1":"\u001b[1;3D","_kchome":"\u001b[1;5H","_kcend":"\u001b[1;5F","_kahome":"\u001b[1;9H","_kaend":"\u001b[1;9F","_kascu1":"\u001b[1;4A","_kascud1":"\u001b[1;4B","_kascub1":"\u001b[1;4D","_kascuf1":"\u001b[1;4C","_kmscu1":"\u001b[1;10A","_kmscud1":"\u001b[1;10B","_kmscub1":"\u001b[1;10D","_kmscuf1":"\u001b[1;10C","_kcscu1":"\u001b[1;6A","_kcscud1":"\u001b[1;6B","_kcscub1":"\u001b[1;6D","_kcscuf1":"\u001b[1;6C","_kcHOME":"\u001b[1;6H","_kcEND":"\u001b[1;6F","_kaHOME":"\u001b[1;4H","_kaEND":"\u001b[1;4F","_kmHOME":"\u001b[1;10H","_kmEND":"\u001b[1;10F"} +{"name":"xterm-xf86-v44","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[?12l\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001bO2P","kf14":"\u001bO2Q","kf15":"\u001bO2R","kf16":"\u001bO2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001bO5P","kf26":"\u001bO5Q","kf27":"\u001bO5R","kf28":"\u001bO5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001bO6P","kf38":"\u001bO6Q","kf39":"\u001bO6R","kf40":"\u001bO6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","kRIT":"\u001b[1;2C","kLFT":"\u001b[1;2D","kHOM":"\u001b[1;2H","kEND":"\u001b[1;2F","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kscu1":"\u001b[1;2A","_kscud1":"\u001b[1;2B","_kccu1":"\u001b[1;5A","_kccud1":"\u001b[1;5B","_kccuf1":"\u001b[1;5C","_kccub1":"\u001b[1;5D","_kmcu1":"\u001b[1;9A","_kmcud1":"\u001b[1;9B","_kmcuf1":"\u001b[1;9C","_kmcub1":"\u001b[1;9D","_kacu1":"\u001b[1;3A","_kacud1":"\u001b[1;3B","_kacuf1":"\u001b[1;3C","_kacub1":"\u001b[1;3D","_kchome":"\u001b[1;5H","_kcend":"\u001b[1;5F","_kahome":"\u001b[1;9H","_kaend":"\u001b[1;9F","_kascu1":"\u001b[1;4A","_kascud1":"\u001b[1;4B","_kascub1":"\u001b[1;4D","_kascuf1":"\u001b[1;4C","_kmscu1":"\u001b[1;10A","_kmscud1":"\u001b[1;10B","_kmscub1":"\u001b[1;10D","_kmscuf1":"\u001b[1;10C","_kcscu1":"\u001b[1;6A","_kcscud1":"\u001b[1;6B","_kcscub1":"\u001b[1;6D","_kcscuf1":"\u001b[1;6C","_kcHOME":"\u001b[1;6H","_kcEND":"\u001b[1;6F","_kaHOME":"\u001b[1;4H","_kaEND":"\u001b[1;4F","_kmHOME":"\u001b[1;10H","_kmEND":"\u001b[1;10F"} +{"name":"xterm-xfree86","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[?12l\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001bO2P","kf14":"\u001bO2Q","kf15":"\u001bO2R","kf16":"\u001bO2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001bO5P","kf26":"\u001bO5Q","kf27":"\u001bO5R","kf28":"\u001bO5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001bO6P","kf38":"\u001bO6Q","kf39":"\u001bO6R","kf40":"\u001bO6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","kRIT":"\u001b[1;2C","kLFT":"\u001b[1;2D","kHOM":"\u001b[1;2H","kEND":"\u001b[1;2F","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kscu1":"\u001b[1;2A","_kscud1":"\u001b[1;2B","_kccu1":"\u001b[1;5A","_kccud1":"\u001b[1;5B","_kccuf1":"\u001b[1;5C","_kccub1":"\u001b[1;5D","_kmcu1":"\u001b[1;9A","_kmcud1":"\u001b[1;9B","_kmcuf1":"\u001b[1;9C","_kmcub1":"\u001b[1;9D","_kacu1":"\u001b[1;3A","_kacud1":"\u001b[1;3B","_kacuf1":"\u001b[1;3C","_kacub1":"\u001b[1;3D","_kchome":"\u001b[1;5H","_kcend":"\u001b[1;5F","_kahome":"\u001b[1;9H","_kaend":"\u001b[1;9F","_kascu1":"\u001b[1;4A","_kascud1":"\u001b[1;4B","_kascub1":"\u001b[1;4D","_kascuf1":"\u001b[1;4C","_kmscu1":"\u001b[1;10A","_kmscud1":"\u001b[1;10B","_kmscub1":"\u001b[1;10D","_kmscuf1":"\u001b[1;10C","_kcscu1":"\u001b[1;6A","_kcscud1":"\u001b[1;6B","_kcscub1":"\u001b[1;6D","_kcscuf1":"\u001b[1;6C","_kcHOME":"\u001b[1;6H","_kcEND":"\u001b[1;6F","_kaHOME":"\u001b[1;4H","_kaEND":"\u001b[1;4F","_kmHOME":"\u001b[1;10H","_kmEND":"\u001b[1;10F"} +{"name":"xterm-xi","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b7\u001b[?47h","rmcup":"\u001b[2J\u001b[?47l\u001b8","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u000f","smul":"\u001b[4m","bold":"\u001b[1m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xterm1","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","cnorm":"\u001b[?12l\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b(B\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001b[15~","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[1;2P","kf14":"\u001b[1;2Q","kf15":"\u001b[1;2R","kf16":"\u001b[1;2S","kf17":"\u001b[15;2~","kf18":"\u001b[17;2~","kf19":"\u001b[18;2~","kf20":"\u001b[19;2~","kf21":"\u001b[20;2~","kf22":"\u001b[21;2~","kf23":"\u001b[23;2~","kf24":"\u001b[24;2~","kf25":"\u001b[1;5P","kf26":"\u001b[1;5Q","kf27":"\u001b[1;5R","kf28":"\u001b[1;5S","kf29":"\u001b[15;5~","kf30":"\u001b[17;5~","kf31":"\u001b[18;5~","kf32":"\u001b[19;5~","kf33":"\u001b[20;5~","kf34":"\u001b[21;5~","kf35":"\u001b[23;5~","kf36":"\u001b[24;5~","kf37":"\u001b[1;6P","kf38":"\u001b[1;6Q","kf39":"\u001b[1;6R","kf40":"\u001b[1;6S","kf41":"\u001b[15;6~","kf42":"\u001b[17;6~","kf43":"\u001b[18;6~","kf44":"\u001b[19;6~","kf45":"\u001b[20;6~","kf46":"\u001b[21;6~","kf47":"\u001b[23;6~","kf48":"\u001b[24;6~","kf49":"\u001b[1;3P","kf50":"\u001b[1;3Q","kf51":"\u001b[1;3R","kf52":"\u001b[1;3S","kf53":"\u001b[15;3~","kf54":"\u001b[17;3~","kf55":"\u001b[18;3~","kf56":"\u001b[19;3~","kf57":"\u001b[20;3~","kf58":"\u001b[21;3~","kf59":"\u001b[23;3~","kf60":"\u001b[24;3~","kf61":"\u001b[1;4P","kf62":"\u001b[1;4Q","kf63":"\u001b[1;4R","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001bOH","kend":"\u001bOF","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kcbt":"\u001b[Z","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","kRIT":"\u001b[1;2C","kLFT":"\u001b[1;2D","kHOM":"\u001b[1;2H","kEND":"\u001b[1;2F","_setfgbg":"\u001b[3%p1%d;4%p2%dm","_kscu1":"\u001b[1;2A","_kscud1":"\u001b[1;2B","_kccu1":"\u001b[1;5A","_kccud1":"\u001b[1;5B","_kccuf1":"\u001b[1;5C","_kccub1":"\u001b[1;5D","_kmcu1":"\u001b[1;9A","_kmcud1":"\u001b[1;9B","_kmcuf1":"\u001b[1;9C","_kmcub1":"\u001b[1;9D","_kacu1":"\u001b[1;3A","_kacud1":"\u001b[1;3B","_kacuf1":"\u001b[1;3C","_kacub1":"\u001b[1;3D","_kchome":"\u001b[1;5H","_kcend":"\u001b[1;5F","_kahome":"\u001b[1;9H","_kaend":"\u001b[1;9F","_kascu1":"\u001b[1;4A","_kascud1":"\u001b[1;4B","_kascub1":"\u001b[1;4D","_kascuf1":"\u001b[1;4C","_kmscu1":"\u001b[1;10A","_kmscud1":"\u001b[1;10B","_kmscub1":"\u001b[1;10D","_kmscuf1":"\u001b[1;10C","_kcscu1":"\u001b[1;6A","_kcscud1":"\u001b[1;6B","_kcscub1":"\u001b[1;6D","_kcscuf1":"\u001b[1;6C","_kcHOME":"\u001b[1;6H","_kcEND":"\u001b[1;6F","_kaHOME":"\u001b[1;4H","_kaEND":"\u001b[1;4F","_kmHOME":"\u001b[1;10H","_kmEND":"\u001b[1;10F"} +{"name":"xtermc","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b@0\u001b[?4s\u001b[?4h\u001b@1","rmcup":"\u001b@0\u001b[?4r","sgr0":"\u001b[m\u000f","bold":"\u001b[1m","rev":"\u001b[7m","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[1D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOT","kf6":"\u001bOU","kf7":"\u001bOV","kf8":"\u001bOW","kf9":"\u001bOX","kf10":"\u001bOY","kf11":"\u001bOZ","kf12":"\u001bOA","khome":"\u001b[H","kend":"\u001b[Y","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[\u001f","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"xtermm","cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b@0\u001b[?4s\u001b[?4h\u001b@1","rmcup":"\u001b@0\u001b[?4r","sgr0":"\u001b[m\u000f","bold":"\u001b[1m","rev":"\u001b[7m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u001b[1D","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf5":"\u001bOT","kf6":"\u001bOU","kf7":"\u001bOV","kf8":"\u001bOW","kf9":"\u001bOX","kf10":"\u001bOY","kf11":"\u001bOZ","kf12":"\u001bOA","khome":"\u001b[H","kend":"\u001b[Y","kpp":"\u001b[V","knp":"\u001b[U","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[\u001f","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u000e","rmacs":"\u000f","enacs":"\u001b(B\u001b)0"} +{"name":"xterms-sun","cols":80,"lines":24,"colors":8,"bell":"\u0007","clear":"\u001b[H\u001b[2J","smcup":"\u001b[?1049h","rmcup":"\u001b[?1049l","cnorm":"\u001b[?12l\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b(B\u001b[m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","setaf":"\u001b[3%p1%dm","setbg":"\u001b[4%p1%dm","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001b[224z","kf2":"\u001b[225z","kf3":"\u001b[226z","kf4":"\u001b[227z","kf5":"\u001b[228z","kf6":"\u001b[229z","kf7":"\u001b[230z","kf8":"\u001b[231z","kf9":"\u001b[232z","kf10":"\u001b[233z","kf11":"\u001b[192z","kf12":"\u001b[193z","kf13":"\u001b[194z","kf14":"\u001b[195z","kf15":"\u001b[196z","kf17":"\u001b[198z","kf18":"\u001b[199z","kf19":"\u001b[200z","kf20":"\u001b[201z","kf31":"\u001b[208z","kf32":"\u001b[209z","kf33":"\u001b[210z","kf34":"\u001b[211z","kf35":"\u001b[212z","kf36":"\u001b[213z","kf38":"\u001b[215z","kf40":"\u001b[217z","kf42":"\u001b[219z","kf44":"\u001b[221z","kf45":"\u001b[222z","kf46":"\u001b[234z","kf47":"\u001b[235z","kich":"\u001b[2z","kdch":"\u001b[3z","khome":"\u001b[214z","kend":"\u001b[220z","khlp":"\u001b[196z","kpp":"\u001b[216z","knp":"\u001b[222z","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kmous":"\u001b[M","XM":"%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\u001b[?1000%ga%c\u001b[?1002%ga%c\u001b[?1003%ga%c\u001b[?1006%ga%c","acsc":"``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B","_setfgbg":"\u001b[3%p1%d;4%p2%dm"} +{"name":"z100","aliases":["h-100","h100","z-100","z110"],"cols":80,"lines":24,"clear":"\u001bE$\u003c5*/\u003e","cnorm":"\u001by4\u001bm70","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c$\u003c1*/\u003e","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bS","kf2":"\u001bT","kf3":"\u001bU","kf4":"\u001bV","kf5":"\u001bW","kf6":"\u001bP","kf7":"\u001bQ","kf8":"\u001bR","kf9":"\u001bOI","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","acsc":"~^x`qanbkcjdmelfgg+hai.kwsutvutvozs{","smacs":"\u001bF","rmacs":"\u001bG"} +{"name":"z100bw","aliases":["h-100bw","h100bw","z-100bw","z110bw"],"cols":80,"lines":24,"clear":"\u001bE$\u003c5*/\u003e","cnorm":"\u001by4","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c$\u003c1*/\u003e","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bS","kf2":"\u001bT","kf3":"\u001bU","kf4":"\u001bV","kf5":"\u001bW","kf6":"\u001bP","kf7":"\u001bQ","kf8":"\u001bR","kf9":"\u001bOI","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","acsc":"~^x`qanbkcjdmelfgg+hai.kwsutvutvozs{","smacs":"\u001bF","rmacs":"\u001bG"} +{"name":"z29","aliases":["z29b","zenith29"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001bE$\u003c14\u003e","cnorm":"\u001by4","smul":"\u001bs8","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001b$\u003c1\u003eA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bS","kf2":"\u001bT","kf3":"\u001bU","kf4":"\u001bV","kf5":"\u001bW","kf6":"\u001bP","kf7":"\u001bQ","kf8":"\u001bR","kf9":"\u001b0I","khome":"\u001bH","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC","smacs":"\u001bG","rmacs":"\u001bF"} +{"name":"z29a","aliases":["h29a-kc-bc","z29a-kc-bc"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J","smcup":"\u001b[?7l","rmcup":"\u001b[?7h","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[2m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOS","kf2":"\u001bOT","kf3":"\u001bOU","kf4":"\u001bOV","kf5":"\u001bOW","kf6":"\u001bOP","kf7":"\u001bOQ","kf8":"\u001bOR","kf9":"\u001bOX","khome":"\u001b[H","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kclr":"\u001b[J"} +{"name":"z29a-kc-uc","aliases":["h29a-kc-uc"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J","smcup":"\u001b[?7l","rmcup":"\u001b[?7h","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[2m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOS","kf2":"\u001bOT","kf3":"\u001bOU","kf4":"\u001bOV","kf5":"\u001bOW","kf6":"\u001bOP","kf7":"\u001bOQ","kf8":"\u001bOR","kf9":"\u001bOX","khome":"\u001b[H","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kclr":"\u001b[J"} +{"name":"z29a-nkc-bc","aliases":["h29a-nkc-bc"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J","smcup":"\u001b[?7l","rmcup":"\u001b[?7h","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[2m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOS","kf2":"\u001bOT","kf3":"\u001bOU","kf4":"\u001bOV","kf5":"\u001bOW","kf6":"\u001bOP","kf7":"\u001bOQ","kf8":"\u001bOR","kf9":"\u001bOX","khome":"\u001b[H","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kclr":"\u001b[J"} +{"name":"z29a-nkc-uc","aliases":["h29a-nkc-uc"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J","smcup":"\u001b[?7l","rmcup":"\u001b[?7h","sgr0":"\u001b[m","smul":"\u001b[4m","bold":"\u001b[2m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOS","kf2":"\u001bOT","kf3":"\u001bOU","kf4":"\u001bOV","kf5":"\u001bOW","kf6":"\u001bOP","kf7":"\u001bOQ","kf8":"\u001bOR","kf9":"\u001bOX","khome":"\u001b[H","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","kclr":"\u001b[J"} +{"name":"z340","cols":132,"lines":42,"bell":"\u0007","clear":"\u001b[H\u001b[2J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B"} +{"name":"z340-nam","cols":132,"lines":42,"bell":"\u0007","clear":"\u001b[H\u001b[2J","cnorm":"\u001b[?25h","civis":"\u001b[?25l","sgr0":"\u001b[m\u001b(B","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","smkx":"\u001b[?1h\u001b=","rmkx":"\u001b[?1l\u001b\u003e","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"","kf1":"\u001bOP","kf2":"\u001bOQ","kf3":"\u001bOR","kf4":"\u001bOS","kf6":"\u001b[17~","kf7":"\u001b[18~","kf8":"\u001b[19~","kf9":"\u001b[20~","kf10":"\u001b[21~","kf11":"\u001b[23~","kf12":"\u001b[24~","kf13":"\u001b[25~","kf14":"\u001b[26~","kf15":"\u001b[28~","kf16":"\u001b[29~","kf17":"\u001b[31~","kf18":"\u001b[32~","kf19":"\u001b[33~","kf20":"\u001b[34~","kich":"\u001b[2~","kdch":"\u001b[3~","khome":"\u001b[1~","kpp":"\u001b[5~","knp":"\u001b[6~","kcuu1":"\u001bOA","kcud1":"\u001bOB","kcub1":"\u001bOD","kcuf1":"\u001bOC","acsc":"``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~","smacs":"\u001b(0","rmacs":"\u001b(B"} +{"name":"z39-a","aliases":["z39a","zenith39-a","zenith39-ansi"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b[2J\u001b[H","cnorm":"\u001b[\u003e5l","civis":"\u001b[\u003e5h","sgr0":"\u001b[0m","smul":"\u001b[4m","bold":"\u001b[1m","blink":"\u001b[5m","rev":"\u001b[7m","dim":"\u001b[2m","smkx":"\u001b[\u003e7h","rmkx":"\u001b[\u003e7l","cup":"\u001b[%i%p1%d;%p2%dH","cub1":"\u0008","cuu1":"\u001b[A","pad":"\u0000","kbs":"\u0008","kf1":"\u001bOS","kf2":"\u001bOT","kf3":"\u001bOU","kf4":"\u001bOV","kf5":"\u001bOW","kf6":"\u001bOP","kf7":"\u001bOQ","kf8":"\u001bOR","kf9":"\u001bOX","khome":"\u001b[H","khlp":"\u001b[~","kcuu1":"\u001b[A","kcud1":"\u001b[B","kcub1":"\u001b[D","kcuf1":"\u001b[C","acsc":"0a``aaffggjjkkllmmnnooqqssttuuvvwwxx~~","smacs":"\u001b(0","rmacs":"\u001b(B"} +{"name":"zen30","aliases":["z30"],"cols":80,"lines":24,"bell":"\u0007","clear":"\u001b*","sgr0":"\u001bG0","rev":"\u001bG4","dim":"\u001bG2","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000"} +{"name":"zen50","aliases":["z50"],"cols":80,"lines":24,"clear":"\u001b+","sgr0":"\u001bG0","rev":"\u001bG4","cup":"\u001b=%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u000b","pad":"\u0000","khome":"\u001e","kcuu1":"\u000b","kcud1":"\n","kcub1":"\u0008","kcuf1":"\u000c"} +{"name":"ztx","aliases":["htx11","zt-1","ztx-1-a","ztx11"],"cols":80,"lines":24,"clear":"\u001bE","smul":"\u001bs2","cup":"\u001bY%p1%' '%+%c%p2%' '%+%c","cub1":"\u0008","cuu1":"\u001bA","pad":"\u0000","kbs":"\u0008","kf1":"\u001bB","kf2":"\u001bU","kf3":"\u001bV","kf4":"\u001bW","kf5":"\u001bP","kf6":"\u001bQ","kf7":"\u001bR","kcuu1":"\u001bA","kcud1":"\u001bB","kcub1":"\u001bD","kcuf1":"\u001bC"} diff --git a/vendor/github.com/gdamore/tcell/doc.go b/vendor/github.com/gdamore/tcell/doc.go new file mode 100644 index 00000000..93ebecfd --- /dev/null +++ b/vendor/github.com/gdamore/tcell/doc.go @@ -0,0 +1,40 @@ +// Copyright 2015 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package tcell provides a lower-level, portable API for building +// programs that interact with terminals or consoles. It works with +// both common (and many uncommon!) terminals or terminal emulators, +// and Windows console implementations. +// +// It provides support for up to 256 colors, text attributes, and box drawing +// elements. A database of terminals built from a real terminfo database +// is provided, along with code to generate new database entries. +// +// Tcell offers very rich support for mice, dependent upon the terminal +// of course. (Windows, XTerm, and iTerm 2 are known to work very well.) +// +// If the environment is not Unicode by default, such as an ISO8859 based +// locale or GB18030, Tcell can convert input and outupt, so that your +// terminal can operate in whatever locale is most convenient, while the +// application program can just assume "everything is UTF-8". Reasonable +// defaults are used for updating characters to something suitable for +// display. Unicode box drawing characters will be converted to use the +// alternate character set of your terminal, if native conversions are +// not available. If no ACS is available, then some ASCII fallbacks will +// be used. +// +// A rich set of keycodes is supported, with support for up to 65 function +// keys, and various other special keys. +// +package tcell diff --git a/vendor/github.com/gdamore/tcell/encoding.go b/vendor/github.com/gdamore/tcell/encoding.go new file mode 100644 index 00000000..596a6e80 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/encoding.go @@ -0,0 +1,139 @@ +// Copyright 2015 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcell + +import ( + "strings" + "sync" + + "golang.org/x/text/encoding" + + gencoding "github.com/gdamore/encoding" +) + +var encodings map[string]encoding.Encoding +var encodingLk sync.Mutex +var encodingFallback EncodingFallback = EncodingFallbackFail + +// RegisterEncoding may be called by the application to register an encoding. +// The presence of additional encodings will facilitate application usage with +// terminal environments where the I/O subsystem does not support Unicode. +// +// Windows systems use Unicode natively, and do not need any of the encoding +// subsystem when using Windows Console screens. +// +// Please see the Go documentation for golang.org/x/text/encoding -- most of +// the common ones exist already as stock variables. For example, ISO8859-15 +// can be registered using the following code: +// +// import "golang.org/x/text/encoding/charmap" +// +// ... +// RegisterEncoding("ISO8859-15", charmap.ISO8859_15) +// +// Aliases can be registered as well, for example "8859-15" could be an alias +// for "ISO8859-15". +// +// For POSIX systems, the tcell package will check the environment variables +// LC_ALL, LC_CTYPE, and LANG (in that order) to determine the character set. +// These are expected to have the following pattern: +// +// $language[.$codeset[@$variant] +// +// We extract only the $codeset part, which will usually be something like +// UTF-8 or ISO8859-15 or KOI8-R. Note that if the locale is either "POSIX" +// or "C", then we assume US-ASCII (the POSIX 'portable character set' +// and assume all other characters are somehow invalid.) +// +// Modern POSIX systems and terminal emulators may use UTF-8, and for those +// systems, this API is also unnecessary. For example, Darwin (MacOS X) and +// modern Linux running modern xterm generally will out of the box without +// any of this. Use of UTF-8 is recommended when possible, as it saves +// quite a lot processing overhead. +// +// Note that some encodings are quite large (for example GB18030 which is a +// superset of Unicode) and so the application size can be expected ot +// increase quite a bit as each encoding is added. The East Asian encodings +// have been seen to add 100-200K per encoding to the application size. +// +func RegisterEncoding(charset string, enc encoding.Encoding) { + encodingLk.Lock() + charset = strings.ToLower(charset) + encodings[charset] = enc + encodingLk.Unlock() +} + +// EncodingFallback describes how the system behavees when the locale +// requires a character set that we do not support. The system always +// supports UTF-8 and US-ASCII. On Windows consoles, UTF-16LE is also +// supported automatically. Other character sets must be added using the +// RegisterEncoding API. (A large group of nearly all of them can be +// added using the RegisterAll function in the encoding sub package.) +type EncodingFallback int + +const ( + // EncodingFallbackFail behavior causes GetEncoding to fail + // when it cannot find an encoding. + EncodingFallbackFail = iota + + // EncodingFallbackASCII behaviore causes GetEncoding to fall back + // to a 7-bit ASCII encoding, if no other encoding can be found. + EncodingFallbackASCII + + // EncodingFallbackUTF8 behavior causes GetEncoding to assume + // UTF8 can pass unmodified upon failure. Note that this behavior + // is not recommended, unless you are sure your terminal can cope + // with real UTF8 sequences. + EncodingFallbackUTF8 +) + +// SetEncodingFallback changes the behavior of GetEncoding when a suitable +// encoding is not found. The default is EncodingFallbackFail, which +// causes GetEncoding to simply return nil. +func SetEncodingFallback(fb EncodingFallback) { + encodingLk.Lock() + encodingFallback = fb + encodingLk.Unlock() +} + +// GetEncoding is used by Screen implementors who want to locate an encoding +// for the given character set name. Note that this will return nil for +// either the Unicode (UTF-8) or ASCII encodings, since we don't use +// encodings for them but instead have our own native methods. +func GetEncoding(charset string) encoding.Encoding { + charset = strings.ToLower(charset) + encodingLk.Lock() + defer encodingLk.Unlock() + if enc, ok := encodings[charset]; ok { + return enc + } + switch encodingFallback { + case EncodingFallbackASCII: + return gencoding.ASCII + case EncodingFallbackUTF8: + return encoding.Nop + } + return nil +} + +func init() { + // We always support UTF-8 and ASCII. + encodings = make(map[string]encoding.Encoding) + encodings["utf-8"] = gencoding.UTF8 + encodings["utf8"] = gencoding.UTF8 + encodings["us-ascii"] = gencoding.ASCII + encodings["ascii"] = gencoding.ASCII + encodings["iso646"] = gencoding.ASCII +} diff --git a/vendor/github.com/gdamore/tcell/errors.go b/vendor/github.com/gdamore/tcell/errors.go new file mode 100644 index 00000000..920b64b2 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/errors.go @@ -0,0 +1,73 @@ +// Copyright 2015 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcell + +import ( + "errors" + "time" + + "github.com/gdamore/tcell/terminfo" +) + +var ( + // ErrTermNotFound indicates that a suitable terminal entry could + // not be found. This can result from either not having TERM set, + // or from the TERM failing to support certain minimal functionality, + // in particular absolute cursor addressability (the cup capability) + // is required. For example, legacy "adm3" lacks this capability, + // whereas the slightly newer "adm3a" supports it. This failure + // occurs most often with "dumb". + ErrTermNotFound = terminfo.ErrTermNotFound + + // ErrNoScreen indicates that no suitable screen could be found. + // This may result from attempting to run on a platform where there + // is no support for either termios or console I/O (such as nacl), + // or from running in an environment where there is no access to + // a suitable console/terminal device. (For example, running on + // without a controlling TTY or with no /dev/tty on POSIX platforms.) + ErrNoScreen = errors.New("no suitable screen available") + + // ErrNoCharset indicates that the locale environment the + // program is not supported by the program, because no suitable + // encoding was found for it. This problem never occurs if + // the environment is UTF-8 or UTF-16. + ErrNoCharset = errors.New("character set not supported") + + // ErrEventQFull indicates that the event queue is full, and + // cannot accept more events. + ErrEventQFull = errors.New("event queue full") +) + +// An EventError is an event representing some sort of error, and carries +// an error payload. +type EventError struct { + t time.Time + err error +} + +// When returns the time when the event was created. +func (ev *EventError) When() time.Time { + return ev.t +} + +// Error implements the error. +func (ev *EventError) Error() string { + return ev.err.Error() +} + +// NewEventError creates an ErrorEvent with the given error payload. +func NewEventError(err error) *EventError { + return &EventError{t: time.Now(), err: err} +} diff --git a/vendor/github.com/gdamore/tcell/event.go b/vendor/github.com/gdamore/tcell/event.go new file mode 100644 index 00000000..a3b77006 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/event.go @@ -0,0 +1,53 @@ +// Copyright 2015 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcell + +import ( + "time" +) + +// Event is a generic interface used for passing around Events. +// Concrete types follow. +type Event interface { + // When reports the time when the event was generated. + When() time.Time +} + +// EventTime is a simple base event class, suitable for easy reuse. +// It can be used to deliver actual timer events as well. +type EventTime struct { + when time.Time +} + +// When returns the time stamp when the event occurred. +func (e *EventTime) When() time.Time { + return e.when +} + +// SetEventTime sets the time of occurrence for the event. +func (e *EventTime) SetEventTime(t time.Time) { + e.when = t +} + +// SetEventNow sets the time of occurrence for the event to the current time. +func (e *EventTime) SetEventNow() { + e.SetEventTime(time.Now()) +} + +// EventHandler is anything that handles events. If the handler has +// consumed the event, it should return true. False otherwise. +type EventHandler interface { + HandleEvent(Event) bool +} diff --git a/vendor/github.com/gdamore/tcell/interrupt.go b/vendor/github.com/gdamore/tcell/interrupt.go new file mode 100644 index 00000000..70dddfce --- /dev/null +++ b/vendor/github.com/gdamore/tcell/interrupt.go @@ -0,0 +1,41 @@ +// Copyright 2015 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcell + +import ( + "time" +) + +// EventInterrupt is a generic wakeup event. Its can be used to +// to request a redraw. It can carry an arbitrary payload, as well. +type EventInterrupt struct { + t time.Time + v interface{} +} + +// When returns the time when this event was created. +func (ev *EventInterrupt) When() time.Time { + return ev.t +} + +// Data is used to obtain the opaque event payload. +func (ev *EventInterrupt) Data() interface{} { + return ev.v +} + +// NewEventInterrupt creates an EventInterrupt with the given payload. +func NewEventInterrupt(data interface{}) *EventInterrupt { + return &EventInterrupt{t: time.Now(), v: data} +} diff --git a/vendor/github.com/gdamore/tcell/key.go b/vendor/github.com/gdamore/tcell/key.go new file mode 100644 index 00000000..3545215a --- /dev/null +++ b/vendor/github.com/gdamore/tcell/key.go @@ -0,0 +1,464 @@ +// Copyright 2016 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcell + +import ( + "fmt" + "strings" + "time" +) + +// EventKey represents a key press. Usually this is a key press followed +// by a key release, but since terminal programs don't have a way to report +// key release events, we usually get just one event. If a key is held down +// then the terminal may synthesize repeated key presses at some predefined +// rate. We have no control over that, nor visibility into it. +// +// In some cases, we can have a modifier key, such as ModAlt, that can be +// generated with a key press. (This usually is represented by having the +// high bit set, or in some cases, by sending an ESC prior to the rune.) +// +// If the value of Key() is KeyRune, then the actual key value will be +// available with the Rune() method. This will be the case for most keys. +// In most situations, the modifiers will not be set. For example, if the +// rune is 'A', this will be reported without the ModShift bit set, since +// really can't tell if the Shift key was pressed (it might have been CAPSLOCK, +// or a terminal that only can send capitals, or keyboard with separate +// capital letters from lower case letters). +// +// Generally, terminal applications have far less visibility into keyboard +// activity than graphical applications. Hence, they should avoid depending +// overly much on availability of modifiers, or the availability of any +// specific keys. +type EventKey struct { + t time.Time + mod ModMask + key Key + ch rune +} + +// When returns the time when this Event was created, which should closely +// match the time when the key was pressed. +func (ev *EventKey) When() time.Time { + return ev.t +} + +// Rune returns the rune corresponding to the key press, if it makes sense. +// The result is only defined if the value of Key() is KeyRune. +func (ev *EventKey) Rune() rune { + return ev.ch +} + +// Key returns a virtual key code. We use this to identify specific key +// codes, such as KeyEnter, etc. Most control and function keys are reported +// with unique Key values. Normal alphanumeric and punctuation keys will +// generally return KeyRune here; the specific key can be further decoded +// using the Rune() function. +func (ev *EventKey) Key() Key { + return ev.key +} + +// Modifiers returns the modifiers that were present with the key press. Note +// that not all platforms and terminals support this equally well, and some +// cases we will not not know for sure. Hence, applications should avoid +// using this in most circumstances. +func (ev *EventKey) Modifiers() ModMask { + return ev.mod +} + +// KeyNames holds the written names of special keys. Useful to echo back a key +// name, or to look up a key from a string value. +var KeyNames = map[Key]string{ + KeyEnter: "Enter", + KeyBackspace: "Backspace", + KeyTab: "Tab", + KeyBacktab: "Backtab", + KeyEsc: "Esc", + KeyBackspace2: "Backspace2", + KeyDelete: "Delete", + KeyInsert: "Insert", + KeyUp: "Up", + KeyDown: "Down", + KeyLeft: "Left", + KeyRight: "Right", + KeyHome: "Home", + KeyEnd: "End", + KeyUpLeft: "UpLeft", + KeyUpRight: "UpRight", + KeyDownLeft: "DownLeft", + KeyDownRight: "DownRight", + KeyCenter: "Center", + KeyPgDn: "PgDn", + KeyPgUp: "PgUp", + KeyClear: "Clear", + KeyExit: "Exit", + KeyCancel: "Cancel", + KeyPause: "Pause", + KeyPrint: "Print", + KeyF1: "F1", + KeyF2: "F2", + KeyF3: "F3", + KeyF4: "F4", + KeyF5: "F5", + KeyF6: "F6", + KeyF7: "F7", + KeyF8: "F8", + KeyF9: "F9", + KeyF10: "F10", + KeyF11: "F11", + KeyF12: "F12", + KeyF13: "F13", + KeyF14: "F14", + KeyF15: "F15", + KeyF16: "F16", + KeyF17: "F17", + KeyF18: "F18", + KeyF19: "F19", + KeyF20: "F20", + KeyF21: "F21", + KeyF22: "F22", + KeyF23: "F23", + KeyF24: "F24", + KeyF25: "F25", + KeyF26: "F26", + KeyF27: "F27", + KeyF28: "F28", + KeyF29: "F29", + KeyF30: "F30", + KeyF31: "F31", + KeyF32: "F32", + KeyF33: "F33", + KeyF34: "F34", + KeyF35: "F35", + KeyF36: "F36", + KeyF37: "F37", + KeyF38: "F38", + KeyF39: "F39", + KeyF40: "F40", + KeyF41: "F41", + KeyF42: "F42", + KeyF43: "F43", + KeyF44: "F44", + KeyF45: "F45", + KeyF46: "F46", + KeyF47: "F47", + KeyF48: "F48", + KeyF49: "F49", + KeyF50: "F50", + KeyF51: "F51", + KeyF52: "F52", + KeyF53: "F53", + KeyF54: "F54", + KeyF55: "F55", + KeyF56: "F56", + KeyF57: "F57", + KeyF58: "F58", + KeyF59: "F59", + KeyF60: "F60", + KeyF61: "F61", + KeyF62: "F62", + KeyF63: "F63", + KeyF64: "F64", + KeyCtrlA: "Ctrl-A", + KeyCtrlB: "Ctrl-B", + KeyCtrlC: "Ctrl-C", + KeyCtrlD: "Ctrl-D", + KeyCtrlE: "Ctrl-E", + KeyCtrlF: "Ctrl-F", + KeyCtrlG: "Ctrl-G", + KeyCtrlJ: "Ctrl-J", + KeyCtrlK: "Ctrl-K", + KeyCtrlL: "Ctrl-L", + KeyCtrlN: "Ctrl-N", + KeyCtrlO: "Ctrl-O", + KeyCtrlP: "Ctrl-P", + KeyCtrlQ: "Ctrl-Q", + KeyCtrlR: "Ctrl-R", + KeyCtrlS: "Ctrl-S", + KeyCtrlT: "Ctrl-T", + KeyCtrlU: "Ctrl-U", + KeyCtrlV: "Ctrl-V", + KeyCtrlW: "Ctrl-W", + KeyCtrlX: "Ctrl-X", + KeyCtrlY: "Ctrl-Y", + KeyCtrlZ: "Ctrl-Z", + KeyCtrlSpace: "Ctrl-Space", + KeyCtrlUnderscore: "Ctrl-_", + KeyCtrlRightSq: "Ctrl-]", + KeyCtrlBackslash: "Ctrl-\\", + KeyCtrlCarat: "Ctrl-^", +} + +// Name returns a printable value or the key stroke. This can be used +// when printing the event, for example. +func (ev *EventKey) Name() string { + s := "" + m := []string{} + if ev.mod&ModShift != 0 { + m = append(m, "Shift") + } + if ev.mod&ModAlt != 0 { + m = append(m, "Alt") + } + if ev.mod&ModMeta != 0 { + m = append(m, "Meta") + } + if ev.mod&ModCtrl != 0 { + m = append(m, "Ctrl") + } + + ok := false + if s, ok = KeyNames[ev.key]; !ok { + if ev.key == KeyRune { + s = "Rune[" + string(ev.ch) + "]" + } else { + s = fmt.Sprintf("Key[%d,%d]", ev.key, int(ev.ch)) + } + } + if len(m) != 0 { + if ev.mod&ModCtrl != 0 && strings.HasPrefix(s, "Ctrl-") { + s = s[5:] + } + return fmt.Sprintf("%s+%s", strings.Join(m, "+"), s) + } + return s +} + +// NewEventKey attempts to create a suitable event. It parses the various +// ASCII control sequences if KeyRune is passed for Key, but if the caller +// has more precise information it should set that specifically. Callers +// that aren't sure about modifier state (most) should just pass ModNone. +func NewEventKey(k Key, ch rune, mod ModMask) *EventKey { + if k == KeyRune && (ch < ' ' || ch == 0x7f) { + // Turn specials into proper key codes. This is for + // control characters and the DEL. + k = Key(ch) + if mod == ModNone && ch < ' ' { + switch Key(ch) { + case KeyBackspace, KeyTab, KeyEsc, KeyEnter: + // these keys are directly typeable without CTRL + default: + // most likely entered with a CTRL keypress + mod = ModCtrl + } + } + } + return &EventKey{t: time.Now(), key: k, ch: ch, mod: mod} +} + +// ModMask is a mask of modifier keys. Note that it will not always be +// possible to report modifier keys. +type ModMask int16 + +// These are the modifiers keys that can be sent either with a key press, +// or a mouse event. Note that as of now, due to the confusion associated +// with Meta, and the lack of support for it on many/most platforms, the +// current implementations never use it. Instead, they use ModAlt, even for +// events that could possibly have been distinguished from ModAlt. +const ( + ModShift ModMask = 1 << iota + ModCtrl + ModAlt + ModMeta + ModNone ModMask = 0 +) + +// Key is a generic value for representing keys, and especially special +// keys (function keys, cursor movement keys, etc.) For normal keys, like +// ASCII letters, we use KeyRune, and then expect the application to +// inspect the Rune() member of the EventKey. +type Key int16 + +// This is the list of named keys. KeyRune is special however, in that it is +// a place holder key indicating that a printable character was sent. The +// actual value of the rune will be transported in the Rune of the associated +// EventKey. +const ( + KeyRune Key = iota + 256 + KeyUp + KeyDown + KeyRight + KeyLeft + KeyUpLeft + KeyUpRight + KeyDownLeft + KeyDownRight + KeyCenter + KeyPgUp + KeyPgDn + KeyHome + KeyEnd + KeyInsert + KeyDelete + KeyHelp + KeyExit + KeyClear + KeyCancel + KeyPrint + KeyPause + KeyBacktab + KeyF1 + KeyF2 + KeyF3 + KeyF4 + KeyF5 + KeyF6 + KeyF7 + KeyF8 + KeyF9 + KeyF10 + KeyF11 + KeyF12 + KeyF13 + KeyF14 + KeyF15 + KeyF16 + KeyF17 + KeyF18 + KeyF19 + KeyF20 + KeyF21 + KeyF22 + KeyF23 + KeyF24 + KeyF25 + KeyF26 + KeyF27 + KeyF28 + KeyF29 + KeyF30 + KeyF31 + KeyF32 + KeyF33 + KeyF34 + KeyF35 + KeyF36 + KeyF37 + KeyF38 + KeyF39 + KeyF40 + KeyF41 + KeyF42 + KeyF43 + KeyF44 + KeyF45 + KeyF46 + KeyF47 + KeyF48 + KeyF49 + KeyF50 + KeyF51 + KeyF52 + KeyF53 + KeyF54 + KeyF55 + KeyF56 + KeyF57 + KeyF58 + KeyF59 + KeyF60 + KeyF61 + KeyF62 + KeyF63 + KeyF64 +) + +// These are the control keys. Note that they overlap with other keys, +// perhaps. For example, KeyCtrlH is the same as KeyBackspace. +const ( + KeyCtrlSpace Key = iota + KeyCtrlA + KeyCtrlB + KeyCtrlC + KeyCtrlD + KeyCtrlE + KeyCtrlF + KeyCtrlG + KeyCtrlH + KeyCtrlI + KeyCtrlJ + KeyCtrlK + KeyCtrlL + KeyCtrlM + KeyCtrlN + KeyCtrlO + KeyCtrlP + KeyCtrlQ + KeyCtrlR + KeyCtrlS + KeyCtrlT + KeyCtrlU + KeyCtrlV + KeyCtrlW + KeyCtrlX + KeyCtrlY + KeyCtrlZ + KeyCtrlLeftSq // Escape + KeyCtrlBackslash + KeyCtrlRightSq + KeyCtrlCarat + KeyCtrlUnderscore +) + +// Special values - these are fixed in an attempt to make it more likely +// that aliases will encode the same way. + +// These are the defined ASCII values for key codes. They generally match +// with KeyCtrl values. +const ( + KeyNUL Key = iota + KeySOH + KeySTX + KeyETX + KeyEOT + KeyENQ + KeyACK + KeyBEL + KeyBS + KeyTAB + KeyLF + KeyVT + KeyFF + KeyCR + KeySO + KeySI + KeyDLE + KeyDC1 + KeyDC2 + KeyDC3 + KeyDC4 + KeyNAK + KeySYN + KeyETB + KeyCAN + KeyEM + KeySUB + KeyESC + KeyFS + KeyGS + KeyRS + KeyUS + KeyDEL Key = 0x7F +) + +// These keys are aliases for other names. +const ( + KeyBackspace = KeyBS + KeyTab = KeyTAB + KeyEsc = KeyESC + KeyEscape = KeyESC + KeyEnter = KeyCR + KeyBackspace2 = KeyDEL +) diff --git a/vendor/github.com/gdamore/tcell/mouse.go b/vendor/github.com/gdamore/tcell/mouse.go new file mode 100644 index 00000000..8c51c98e --- /dev/null +++ b/vendor/github.com/gdamore/tcell/mouse.go @@ -0,0 +1,97 @@ +// Copyright 2015 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcell + +import ( + "time" +) + +// EventMouse is a mouse event. It is sent on either mouse up or mouse down +// events. It is also sent on mouse motion events - if the terminal supports +// it. We make every effort to ensure that mouse release events are delivered. +// Hence, click drag can be identified by a motion event with the mouse down, +// without any intervening button release. On some terminals only the initiating +// press and terminating release event will be delivered. +// +// Mouse wheel events, when reported, may appear on their own as individual +// impulses; that is, there will normally not be a release event delivered +// for mouse wheel movements. +// +// Most terminals cannot report the state of more than one button at a time -- +// and some cannot report motion events unless a button is pressed. +// +// Applications can inspect the time between events to resolve double or +// triple clicks. +type EventMouse struct { + t time.Time + btn ButtonMask + mod ModMask + x int + y int +} + +// When returns the time when this EventMouse was created. +func (ev *EventMouse) When() time.Time { + return ev.t +} + +// Buttons returns the list of buttons that were pressed or wheel motions. +func (ev *EventMouse) Buttons() ButtonMask { + return ev.btn +} + +// Modifiers returns a list of keyboard modifiers that were pressed +// with the mouse button(s). +func (ev *EventMouse) Modifiers() ModMask { + return ev.mod +} + +// Position returns the mouse position in character cells. The origin +// 0, 0 is at the upper left corner. +func (ev *EventMouse) Position() (int, int) { + return ev.x, ev.y +} + +// NewEventMouse is used to create a new mouse event. Applications +// shouldn't need to use this; its mostly for screen implementors. +func NewEventMouse(x, y int, btn ButtonMask, mod ModMask) *EventMouse { + return &EventMouse{t: time.Now(), x: x, y: y, btn: btn, mod: mod} +} + +// ButtonMask is a mask of mouse buttons and wheel events. Mouse button presses +// are normally delivered as both press and release events. Mouse wheel events +// are normally just single impulse events. Windows supports up to eight +// separate buttons plus all four wheel directions, but XTerm can only support +// mouse buttons 1-3 and wheel up/down. Its not unheard of for terminals +// to support only one or two buttons (think Macs). Old terminals, and true +// emulations (such as vt100) won't support mice at all, of course. +type ButtonMask int16 + +// These are the actual button values. +const ( + Button1 ButtonMask = 1 << iota // Usually left mouse button. + Button2 // Usually the middle mouse button. + Button3 // Usually the right mouse button. + Button4 // Often a side button (thumb/next). + Button5 // Often a side button (thumb/prev). + Button6 + Button7 + Button8 + WheelUp // Wheel motion up/away from user. + WheelDown // Wheel motion down/towards user. + WheelLeft // Wheel motion to left. + WheelRight // Wheel motion to right. + ButtonNone ButtonMask = 0 // No button or wheel events. +) diff --git a/vendor/github.com/gdamore/tcell/resize.go b/vendor/github.com/gdamore/tcell/resize.go new file mode 100644 index 00000000..0385673c --- /dev/null +++ b/vendor/github.com/gdamore/tcell/resize.go @@ -0,0 +1,42 @@ +// Copyright 2015 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcell + +import ( + "time" +) + +// EventResize is sent when the window size changes. +type EventResize struct { + t time.Time + w int + h int +} + +// NewEventResize creates an EventResize with the new updated window size, +// which is given in character cells. +func NewEventResize(width, height int) *EventResize { + return &EventResize{t: time.Now(), w: width, h: height} +} + +// When returns the time when the Event was created. +func (ev *EventResize) When() time.Time { + return ev.t +} + +// Size returns the new window size as width, height in character cells. +func (ev *EventResize) Size() (int, int) { + return ev.w, ev.h +} diff --git a/vendor/github.com/gdamore/tcell/runes.go b/vendor/github.com/gdamore/tcell/runes.go new file mode 100644 index 00000000..ed9c63b5 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/runes.go @@ -0,0 +1,111 @@ +// Copyright 2015 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcell + +// The names of these constants are chosen to match Terminfo names, +// modulo case, and changing the prefix from ACS_ to Rune. These are +// the runes we provide extra special handling for, with ASCII fallbacks +// for terminals that lack them. +const ( + RuneSterling = '£' + RuneDArrow = '↓' + RuneLArrow = '←' + RuneRArrow = '→' + RuneUArrow = '↑' + RuneBullet = '·' + RuneBoard = '░' + RuneCkBoard = '▒' + RuneDegree = '°' + RuneDiamond = '◆' + RuneGEqual = '≥' + RunePi = 'π' + RuneHLine = '─' + RuneLantern = '§' + RunePlus = '┼' + RuneLEqual = '≤' + RuneLLCorner = '└' + RuneLRCorner = '┘' + RuneNEqual = '≠' + RunePlMinus = '±' + RuneS1 = '⎺' + RuneS3 = '⎻' + RuneS7 = '⎼' + RuneS9 = '⎽' + RuneBlock = '█' + RuneTTee = '┬' + RuneRTee = '┤' + RuneLTee = '├' + RuneBTee = '┴' + RuneULCorner = '┌' + RuneURCorner = '┐' + RuneVLine = '│' +) + +// RuneFallbacks is the default map of fallback strings that will be +// used to replace a rune when no other more appropriate transformation +// is available, and the rune cannot be displayed directly. +// +// New entries may be added to this map over time, as it becomes clear +// that such is desirable. Characters that represent either letters or +// numbers should not be added to this list unless it is certain that +// the meaning will still convey unambiguously. +// +// As an example, it would be appropriate to add an ASCII mapping for +// the full width form of the letter 'A', but it would not be appropriate +// to do so a glyph representing the country China. +// +// Programs that desire richer fallbacks may register additional ones, +// or change or even remove these mappings with Screen.RegisterRuneFallback +// Screen.UnregisterRuneFallback methods. +// +// Note that Unicode is presumed to be able to display all glyphs. +// This is a pretty poor assumption, but there is no easy way to +// figure out which glyphs are supported in a given font. Hence, +// some care in selecting the characters you support in your application +// is still appropriate. +var RuneFallbacks = map[rune]string{ + RuneSterling: "f", + RuneDArrow: "v", + RuneLArrow: "<", + RuneRArrow: ">", + RuneUArrow: "^", + RuneBullet: "o", + RuneBoard: "#", + RuneCkBoard: ":", + RuneDegree: "\\", + RuneDiamond: "+", + RuneGEqual: ">", + RunePi: "*", + RuneHLine: "-", + RuneLantern: "#", + RunePlus: "+", + RuneLEqual: "<", + RuneLLCorner: "+", + RuneLRCorner: "+", + RuneNEqual: "!", + RunePlMinus: "#", + RuneS1: "~", + RuneS3: "-", + RuneS7: "-", + RuneS9: "_", + RuneBlock: "#", + RuneTTee: "+", + RuneRTee: "+", + RuneLTee: "+", + RuneBTee: "+", + RuneULCorner: "+", + RuneURCorner: "+", + RuneVLine: "|", +} diff --git a/vendor/github.com/gdamore/tcell/screen.go b/vendor/github.com/gdamore/tcell/screen.go new file mode 100644 index 00000000..9551af6d --- /dev/null +++ b/vendor/github.com/gdamore/tcell/screen.go @@ -0,0 +1,212 @@ +// Copyright 2016 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcell + +// Screen represents the physical (or emulated) screen. +// This can be a terminal window or a physical console. Platforms implement +// this differerently. +type Screen interface { + // Init initializes the screen for use. + Init() error + + // Fini finalizes the screen also releasing resources. + Fini() + + // Clear erases the screen. The contents of any screen buffers + // will also be cleared. This has the logical effect of + // filling the screen with spaces, using the global default style. + Clear() + + // Fill fills the screen with the given character and style. + Fill(rune, Style) + + // SetCell is an older API, and will be removed. Please use + // SetContent instead; SetCell is implemented in terms of SetContent. + SetCell(x int, y int, style Style, ch ...rune) + + // GetContent returns the contents at the given location. If the + // coordinates are out of range, then the values will be 0, nil, + // StyleDefault. Note that the contents returned are logical contents + // and may not actually be what is displayed, but rather are what will + // be displayed if Show() or Sync() is called. The width is the width + // in screen cells; most often this will be 1, but some East Asian + // characters require two cells. + GetContent(x, y int) (mainc rune, combc []rune, style Style, width int) + + // SetContent sets the contents of the given cell location. If + // the coordinates are out of range, then the operation is ignored. + // + // The first rune is the primary non-zero width rune. The array + // that follows is a possible list of combining characters to append, + // and will usually be nil (no combining characters.) + // + // The results are not displayd until Show() or Sync() is called. + // + // Note that wide (East Asian full width) runes occupy two cells, + // and attempts to place character at next cell to the right will have + // undefined effects. Wide runes that are printed in the + // last column will be replaced with a single width space on output. + SetContent(x int, y int, mainc rune, combc []rune, style Style) + + // SetStyle sets the default style to use when clearing the screen + // or when StyleDefault is specified. If it is also StyleDefault, + // then whatever system/terminal default is relevant will be used. + SetStyle(style Style) + + // ShowCursor is used to display the cursor at a given location. + // If the coordinates -1, -1 are given or are otherwise outside the + // dimensions of the screen, the cursor will be hidden. + ShowCursor(x int, y int) + + // HideCursor is used to hide the cursor. Its an alias for + // ShowCursor(-1, -1). + HideCursor() + + // Size returns the screen size as width, height. This changes in + // response to a call to Clear or Flush. + Size() (int, int) + + // PollEvent waits for events to arrive. Main application loops + // must spin on this to prevent the application from stalling. + // Furthermore, this will return nil if the Screen is finalized. + PollEvent() Event + + // PostEvent tries to post an event into the event stream. This + // can fail if the event queue is full. In that case, the event + // is dropped, and ErrEventQFull is returned. + PostEvent(ev Event) error + + // PostEventWait is like PostEvent, but if the queue is full, it + // blocks until there is space in the queue, making delivery + // reliable. However, it is VERY important that this function + // never be called from within whatever event loop is polling + // with PollEvent(), otherwise a deadlock may arise. + // + // For this reason, when using this function, the use of a + // Goroutine is recommended to ensure no deadlock can occur. + PostEventWait(ev Event) + + // EnableMouse enables the mouse. (If your terminal supports it.) + EnableMouse() + + // DisableMouse disables the mouse. + DisableMouse() + + // HasMouse returns true if the terminal (apparently) supports a + // mouse. Note that the a return value of true doesn't guarantee that + // a mouse/pointing device is present; a false return definitely + // indicates no mouse support is available. + HasMouse() bool + + // Colors returns the number of colors. All colors are assumed to + // use the ANSI color map. If a terminal is monochrome, it will + // return 0. + Colors() int + + // Show makes all the content changes made using SetContent() visible + // on the display. + // + // It does so in the most efficient and least visually disruptive + // manner possible. + Show() + + // Sync works like Show(), but it updates every visible cell on the + // physical display, assuming that it is not synchronized with any + // internal model. This may be both expensive and visually jarring, + // so it should only be used when believed to actually be necessary. + // + // Typically this is called as a result of a user-requested redraw + // (e.g. to clear up on screen corruption caused by some other program), + // or during a resize event. + Sync() + + // CharacterSet returns information about the character set. + // This isn't the full locale, but it does give us the input/output + // character set. Note that this is just for diagnostic purposes, + // we normally translate input/output to/from UTF-8, regardless of + // what the user's environment is. + CharacterSet() string + + // RegisterRuneFallback adds a fallback for runes that are not + // part of the character set -- for example one coudld register + // o as a fallback for ø. This should be done cautiously for + // characters that might be displayed ordinarily in language + // specific text -- characters that could change the meaning of + // of written text would be dangerous. The intention here is to + // facilitate fallback characters in pseudo-graphical applications. + // + // If the terminal has fallbacks already in place via an alternate + // character set, those are used in preference. Also, standard + // fallbacks for graphical characters in the ACSC terminfo string + // are registered implicitly. + + // The display string should be the same width as original rune. + // This makes it possible to register two character replacements + // for full width East Asian characters, for example. + // + // It is recommended that replacement strings consist only of + // 7-bit ASCII, since other characters may not display everywhere. + RegisterRuneFallback(r rune, subst string) + + // UnregisterRuneFallback unmaps a replacement. It will unmap + // the implicit ASCII replacements for alternate characters as well. + // When an unmapped char needs to be displayed, but no suitable + // glyph is available, '?' is emitted instead. It is not possible + // to "disable" the use of alternate characters that are supported + // by your terminal except by changing the terminal database. + UnregisterRuneFallback(r rune) + + // CanDisplay returns true if the given rune can be displayed on + // this screen. Note that this is a best guess effort -- whether + // your fonts support the character or not may be questionable. + // Mostly this is for folks who work outside of Unicode. + // + // If checkFallbacks is true, then if any (possibly imperfect) + // fallbacks are registered, this will return true. This will + // also return true if the terminal can replace the glyph with + // one that is visually indistinguishable from the one requested. + CanDisplay(r rune, checkFallbacks bool) bool + + // Resize does nothing, since its generally not possible to + // ask a screen to resize, but it allows the Screen to implement + // the View interface. + Resize(int, int, int, int) + + // HasKey returns true if the keyboard is believed to have the + // key. In some cases a keyboard may have keys with this name + // but no support for them, while in others a key may be reported + // as supported but not actually be usable (such as some emulators + // that hijack certain keys). Its best not to depend to strictly + // on this function, but it can be used for hinting when building + // menus, displayed hot-keys, etc. Note that KeyRune (literal + // runes) is always true. + HasKey(Key) bool +} + +// NewScreen returns a default Screen suitable for the user's terminal +// environment. +func NewScreen() (Screen, error) { + // First we attempt to obtain a terminfo screen. This should work + // in most places if $TERM is set. + if s, e := NewTerminfoScreen(); s != nil { + return s, nil + + } else if s, _ := NewConsoleScreen(); s != nil { + return s, nil + + } else { + return nil, e + } +} diff --git a/vendor/github.com/gdamore/tcell/simulation.go b/vendor/github.com/gdamore/tcell/simulation.go new file mode 100644 index 00000000..73980239 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/simulation.go @@ -0,0 +1,505 @@ +// Copyright 2016 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcell + +import ( + "sync" + "unicode/utf8" + + "golang.org/x/text/transform" +) + +// NewSimulationScreen returns a SimulationScreen. Note that +// SimulationScreen is also a Screen. +func NewSimulationScreen(charset string) SimulationScreen { + if charset == "" { + charset = "UTF-8" + } + s := &simscreen{charset: charset} + return s +} + +// SimulationScreen represents a screen simulation. This is intended to +// be a superset of normal Screens, but also adds some important interfaces +// for testing. +type SimulationScreen interface { + // InjectKeyBytes injects a stream of bytes corresponding to + // the native encoding (see charset). It turns true if the entire + // set of bytes were processed and delivered as KeyEvents, false + // if any bytes were not fully understood. Any bytes that are not + // fully converted are discarded. + InjectKeyBytes(buf []byte) bool + + // InjectKey injects a key event. The rune is a UTF-8 rune, post + // any translation. + InjectKey(key Key, r rune, mod ModMask) + + // InjectMouse injects a mouse event. + InjectMouse(x, y int, buttons ButtonMask, mod ModMask) + + // SetSize resizes the underlying physical screen. It also causes + // a resize event to be injected during the next Show() or Sync(). + // A new physical contents array will be allocated (with data from + // the old copied), so any prior value obtained with GetContents + // won't be used anymore + SetSize(width, height int) + + // GetContents returns screen contents as an array of + // cells, along with the physical width & height. Note that the + // physical contents will be used until the next time SetSize() + // is called. + GetContents() (cells []SimCell, width int, height int) + + // GetCursor returns the cursor details. + GetCursor() (x int, y int, visible bool) + + Screen +} + +// SimCell represents a simulated screen cell. The purpose of this +// is to track on screen content. +type SimCell struct { + // Bytes is the actual character bytes. Normally this is + // rune data, but it could be be data in another encoding system. + Bytes []byte + + // Style is the style used to display the data. + Style Style + + // Runes is the list of runes, unadulterated, in UTF-8. + Runes []rune +} + +type simscreen struct { + physw int + physh int + fini bool + style Style + evch chan Event + quit chan struct{} + + front []SimCell + back CellBuffer + clear bool + cursorx int + cursory int + cursorvis bool + mouse bool + charset string + encoder transform.Transformer + decoder transform.Transformer + fillchar rune + fillstyle Style + fallback map[rune]string + + sync.Mutex +} + +func (s *simscreen) Init() error { + s.evch = make(chan Event, 10) + s.fillchar = 'X' + s.fillstyle = StyleDefault + s.mouse = false + s.physw = 80 + s.physh = 25 + s.cursorx = -1 + s.cursory = -1 + s.style = StyleDefault + + if enc := GetEncoding(s.charset); enc != nil { + s.encoder = enc.NewEncoder() + s.decoder = enc.NewDecoder() + } else { + return ErrNoCharset + } + + s.front = make([]SimCell, s.physw*s.physh) + s.back.Resize(80, 25) + + // default fallbacks + s.fallback = make(map[rune]string) + for k, v := range RuneFallbacks { + s.fallback[k] = v + } + return nil +} + +func (s *simscreen) Fini() { + s.Lock() + s.fini = true + s.back.Resize(0, 0) + s.Unlock() + if s.quit != nil { + close(s.quit) + } + s.physw = 0 + s.physh = 0 + s.front = nil +} + +func (s *simscreen) SetStyle(style Style) { + s.Lock() + s.style = style + s.Unlock() +} + +func (s *simscreen) Clear() { + s.Fill(' ', s.style) +} + +func (s *simscreen) Fill(r rune, style Style) { + s.Lock() + s.back.Fill(r, style) + s.Unlock() +} + +func (s *simscreen) SetCell(x, y int, style Style, ch ...rune) { + + if len(ch) > 0 { + s.SetContent(x, y, ch[0], ch[1:], style) + } else { + s.SetContent(x, y, ' ', nil, style) + } +} + +func (s *simscreen) SetContent(x, y int, mainc rune, combc []rune, st Style) { + + s.Lock() + s.back.SetContent(x, y, mainc, combc, st) + s.Unlock() +} + +func (s *simscreen) GetContent(x, y int) (rune, []rune, Style, int) { + var mainc rune + var combc []rune + var style Style + var width int + s.Lock() + mainc, combc, style, width = s.back.GetContent(x, y) + s.Unlock() + return mainc, combc, style, width +} + +func (s *simscreen) drawCell(x, y int) int { + + mainc, combc, style, width := s.back.GetContent(x, y) + if !s.back.Dirty(x, y) { + return width + } + if x >= s.physw || y >= s.physh || x < 0 || y < 0 { + return width + } + simc := &s.front[(y*s.physw)+x] + + if style == StyleDefault { + style = s.style + } + simc.Style = style + simc.Runes = append([]rune{mainc}, combc...) + + // now emit runes - taking care to not overrun width with a + // wide character, and to ensure that we emit exactly one regular + // character followed up by any residual combing characters + + simc.Bytes = nil + + if x > s.physw-width { + simc.Runes = []rune{' '} + simc.Bytes = []byte{' '} + return width + } + + lbuf := make([]byte, 12) + ubuf := make([]byte, 12) + nout := 0 + + for _, r := range simc.Runes { + + l := utf8.EncodeRune(ubuf, r) + + nout, _, _ = s.encoder.Transform(lbuf, ubuf[:l], true) + + if nout == 0 || lbuf[0] == '\x1a' { + + // skip combining + + if subst, ok := s.fallback[r]; ok { + simc.Bytes = append(simc.Bytes, + []byte(subst)...) + + } else if r >= ' ' && r <= '~' { + simc.Bytes = append(simc.Bytes, byte(r)) + + } else if simc.Bytes == nil { + simc.Bytes = append(simc.Bytes, '?') + } + } else { + simc.Bytes = append(simc.Bytes, lbuf[:nout]...) + } + } + s.back.SetDirty(x, y, false) + return width +} + +func (s *simscreen) ShowCursor(x, y int) { + s.Lock() + s.cursorx, s.cursory = x, y + s.showCursor() + s.Unlock() +} + +func (s *simscreen) HideCursor() { + s.ShowCursor(-1, -1) +} + +func (s *simscreen) showCursor() { + + x, y := s.cursorx, s.cursory + if x < 0 || y < 0 || x >= s.physw || y >= s.physh { + s.cursorvis = false + } else { + s.cursorvis = true + } +} + +func (s *simscreen) hideCursor() { + // does not update cursor position + s.cursorvis = false +} + +func (s *simscreen) Show() { + s.Lock() + s.resize() + s.draw() + s.Unlock() +} + +func (s *simscreen) clearScreen() { + // We emulate a hardware clear by filling with a specific pattern + for i := range s.front { + s.front[i].Style = s.fillstyle + s.front[i].Runes = []rune{s.fillchar} + s.front[i].Bytes = []byte{byte(s.fillchar)} + } + s.clear = false +} + +func (s *simscreen) draw() { + s.hideCursor() + if s.clear { + s.clearScreen() + } + + w, h := s.back.Size() + for y := 0; y < h; y++ { + for x := 0; x < w; x++ { + width := s.drawCell(x, y) + x += width - 1 + } + } + s.showCursor() +} + +func (s *simscreen) EnableMouse() { + s.mouse = true +} + +func (s *simscreen) DisableMouse() { + s.mouse = false +} + +func (s *simscreen) Size() (int, int) { + s.Lock() + w, h := s.back.Size() + s.Unlock() + return w, h +} + +func (s *simscreen) resize() { + w, h := s.physw, s.physh + ow, oh := s.back.Size() + if w != ow || h != oh { + s.back.Resize(w, h) + ev := NewEventResize(w, h) + s.PostEvent(ev) + } +} + +func (s *simscreen) Colors() int { + return 256 +} + +func (s *simscreen) PollEvent() Event { + select { + case <-s.quit: + return nil + case ev := <-s.evch: + return ev + } +} + +func (s *simscreen) PostEventWait(ev Event) { + s.evch <- ev +} + +func (s *simscreen) PostEvent(ev Event) error { + select { + case s.evch <- ev: + return nil + default: + return ErrEventQFull + } +} + +func (s *simscreen) InjectMouse(x, y int, buttons ButtonMask, mod ModMask) { + ev := NewEventMouse(x, y, buttons, mod) + s.PostEvent(ev) +} + +func (s *simscreen) InjectKey(key Key, r rune, mod ModMask) { + ev := NewEventKey(KeyRune, r, ModNone) + s.PostEvent(ev) +} + +func (s *simscreen) InjectKeyBytes(b []byte) bool { + failed := false + +outer: + for len(b) > 0 { + if b[0] >= ' ' && b[0] <= 0x7F { + // printable ASCII easy to deal with -- no encodings + ev := NewEventKey(KeyRune, rune(b[0]), ModNone) + s.PostEvent(ev) + b = b[1:] + continue + } + + if b[0] < 0x80 { + mod := ModNone + // No encodings start with low numbered values + if Key(b[0]) >= KeyCtrlA && Key(b[0]) <= KeyCtrlZ { + mod = ModCtrl + } + ev := NewEventKey(Key(b[0]), 0, mod) + s.PostEvent(ev) + continue + } + + utfb := make([]byte, len(b)*4) // worst case + for l := 1; l < len(b); l++ { + s.decoder.Reset() + nout, nin, _ := s.decoder.Transform(utfb, b[:l], true) + + if nout != 0 { + r, _ := utf8.DecodeRune(utfb[:nout]) + if r != utf8.RuneError { + ev := NewEventKey(KeyRune, r, ModNone) + s.PostEvent(ev) + } + b = b[nin:] + continue outer + } + } + failed = true + b = b[1:] + continue + } + + return !failed +} + +func (s *simscreen) Sync() { + s.Lock() + s.clear = true + s.resize() + s.back.Invalidate() + s.draw() + s.Unlock() +} + +func (s *simscreen) CharacterSet() string { + return s.charset +} + +func (s *simscreen) SetSize(w, h int) { + s.Lock() + newc := make([]SimCell, w*h) + for row := 0; row < h && row < s.physh; row++ { + for col := 0; col < w && col < s.physw; col++ { + newc[(row*w)+col] = s.front[(row*s.physw)+col] + } + } + s.physw = w + s.physh = h + s.Unlock() +} + +func (s *simscreen) GetContents() ([]SimCell, int, int) { + s.Lock() + cells, w, h := s.front, s.physw, s.physh + s.Unlock() + return cells, w, h +} + +func (s *simscreen) GetCursor() (int, int, bool) { + s.Lock() + x, y, vis := s.cursorx, s.cursory, s.cursorvis + s.Unlock() + return x, y, vis +} + +func (s *simscreen) RegisterRuneFallback(r rune, subst string) { + s.Lock() + s.fallback[r] = subst + s.Unlock() +} + +func (s *simscreen) UnregisterRuneFallback(r rune) { + s.Lock() + delete(s.fallback, r) + s.Unlock() +} + +func (s *simscreen) CanDisplay(r rune, checkFallbacks bool) bool { + + if enc := s.encoder; enc != nil { + nb := make([]byte, 6) + ob := make([]byte, 6) + num := utf8.EncodeRune(ob, r) + + enc.Reset() + dst, _, err := enc.Transform(nb, ob[:num], true) + if dst != 0 && err == nil && nb[0] != '\x1A' { + return true + } + } + if !checkFallbacks { + return false + } + if _, ok := s.fallback[r]; ok { + return true + } + return false +} + +func (s *simscreen) HasMouse() bool { + return false +} + +func (s *simscreen) Resize(int, int, int, int) {} + +func (s *simscreen) HasKey(Key) bool { + return true +} diff --git a/vendor/github.com/gdamore/tcell/style.go b/vendor/github.com/gdamore/tcell/style.go new file mode 100644 index 00000000..c4ee9351 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/style.go @@ -0,0 +1,126 @@ +// Copyright 2015 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcell + +// Style represents a complete text style, including both foreground +// and background color. We encode it in a 64-bit int for efficiency. +// The coding is (MSB): <7b flags><1b><24b fgcolor><7b attr><1b><24b bgcolor>. +// The <1b> is set true to indicate that the color is an RGB color, rather +// than a named index. +// +// This gives 24bit color options, if it ever becomes truly necessary. +// However, applications must not rely on this encoding. +// +// Note that not all terminals can display all colors or attributes, and +// many might have specific incompatibilities between specific attributes +// and color combinations. +// +// The intention is to extend styles to support paletting, in which case +// some flag bit(s) would be set, and the foreground and background colors +// would be replaced with a palette number and palette index. +// +// To use Style, just declare a variable of its type. +type Style int64 + +// StyleDefault represents a default style, based upon the context. +// It is the zero value. +const StyleDefault Style = 0 + +// styleFlags -- used internally for now. +const ( + styleBgSet = 1 << (iota + 57) + styleFgSet + stylePalette +) + +// Foreground returns a new style based on s, with the foreground color set +// as requested. ColorDefault can be used to select the global default. +func (s Style) Foreground(c Color) Style { + if c == ColorDefault { + return (s &^ (0x1ffffff00000000 | styleFgSet)) + } + return (s &^ Style(0x1ffffff00000000)) | + ((Style(c) & 0x1ffffff) << 32) | styleFgSet +} + +// Background returns a new style based on s, with the background color set +// as requested. ColorDefault can be used to select the global default. +func (s Style) Background(c Color) Style { + if c == ColorDefault { + return (s &^ (0x1ffffff | styleBgSet)) + } + return (s &^ (0x1ffffff)) | (Style(c) & 0x1ffffff) | styleBgSet +} + +// Decompose breaks a style up, returning the foreground, background, +// and other attributes. +func (s Style) Decompose() (fg Color, bg Color, attr AttrMask) { + if s&styleFgSet != 0 { + fg = Color(s>>32) & 0x1ffffff + } else { + fg = ColorDefault + } + if s&styleBgSet != 0 { + bg = Color(s & 0x1ffffff) + } else { + bg = ColorDefault + } + attr = AttrMask(s) & attrAll + + return fg, bg, attr +} + +func (s Style) setAttrs(attrs Style, on bool) Style { + if on { + return s | attrs + } + return s &^ attrs +} + +// Normal returns the style with all attributes disabled. +func (s Style) Normal() Style { + return s &^ Style(attrAll) +} + +// Bold returns a new style based on s, with the bold attribute set +// as requested. +func (s Style) Bold(on bool) Style { + return s.setAttrs(Style(AttrBold), on) +} + +// Blink returns a new style based on s, with the blink attribute set +// as requested. +func (s Style) Blink(on bool) Style { + return s.setAttrs(Style(AttrBlink), on) +} + +// Dim returns a new style based on s, with the dim attribute set +// as requested. +func (s Style) Dim(on bool) Style { + return s.setAttrs(Style(AttrDim), on) +} + +// Reverse returns a new style based on s, with the reverse attribute set +// as requested. (Reverse usually changes the foreground and background +// colors.) +func (s Style) Reverse(on bool) Style { + return s.setAttrs(Style(AttrReverse), on) +} + +// Underline returns a new style based on s, with the underline attribute set +// as requested. +func (s Style) Underline(on bool) Style { + return s.setAttrs(Style(AttrUnderline), on) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/.gitignore b/vendor/github.com/gdamore/tcell/terminfo/.gitignore new file mode 100644 index 00000000..74f3c04f --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/.gitignore @@ -0,0 +1 @@ +mkinfo diff --git a/vendor/github.com/gdamore/tcell/terminfo/TERMINALS.md b/vendor/github.com/gdamore/tcell/terminfo/TERMINALS.md new file mode 100644 index 00000000..85c1e61c --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/TERMINALS.md @@ -0,0 +1,7 @@ +TERMINALS +========= + +The best way to populate terminals on Debian is to install ncurses, +ncurses-term, screen, tmux, rxvt-unicode, and dvtm. This populates the +the terminfo database so that we can have a reasonable set of starting +terminals. diff --git a/vendor/github.com/gdamore/tcell/terminfo/mkdatabase.sh b/vendor/github.com/gdamore/tcell/terminfo/mkdatabase.sh new file mode 100755 index 00000000..fd968bdc --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/mkdatabase.sh @@ -0,0 +1,189 @@ +#!/bin/bash + +# Copyright 2017 The TCell Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use file except in compliance with the License. +# You may obtain a copy of the license at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# +# When called with no arguments, this shell script builds the Go database, +# which is somewhat minimal for size reasons (it only contains the most +# commonly used entries), and then builds the complete JSON database. +# +# To limit the action to only building one or more terminals, specify them +# on the command line: +# +# ./mkdatabase xterm +# +# The script will also find and update or add any terminal "aliases". +# It does not remove any old entries. +# +# To add to the set of terminals that we compile into the Go database, +# add their names to the models.txt file. +# + +# This script is not very efficient, but there isn't really a better way +# without writing code to decode the terminfo binary format directly. +# Its not worth worrying about. + +# This script also requires bash, although ksh93 should work as well, because +# we use arrays, which are not specified in POSIX. + +export LANG=C +export LC_CTYPE=C + +progress() +{ + typeset -i num=$1 + typeset -i tot=$2 + typeset -i x + typeset back + typeset s + + if (( tot < 1 )) + then + s=$(printf "[ %d ]" $num) + back="\b\b\b\b\b" + x=$num + while (( x >= 10 )) + do + back="${back}\b" + x=$(( x / 10 )) + done + + else + x=$(( num * 100 / tot )) + s=$(printf "<%3d%%>" $x) + back="\b\b\b\b\b\b" + fi + printf "%s${back}" "$s" +} + +ord() +{ + printf "%02x" "'$1'" +} + +goterms=( $(cat models.txt) ) +args=( $* ) +if (( ${#args[@]} == 0 )) +then + args=( $(toe -a | cut -f1) ) +fi + +printf "Scanning terminal definitions: " +i=0 +aliases=() +models=() +for term in ${args[@]} +do + case "${term}" in + *-truecolor) + line="${term}|24-bit color" + ;; + *) + line=$(infocmp $term | head -2 | tail -1) + if [[ -z "$line" ]] + then + echo "Cannot find terminfo for $term" + exit 1 + fi + # take off the trailing comma + line=${line%,} + esac + + # grab primary name + term=${line%%|*} + all+=( ${term} ) + + # should this be in our go terminals? + for model in ${goterms[@]} + do + if [[ "${model}" == "${term}" ]] + then + models+=( ${term} ) + fi + done + + # chop off primary name + line=${line#${term}} + line=${line#|} + # chop off description + line=${line%|*} + while [[ "$line" != "" ]] + do + a=${line%%|*} + aliases+=( ${a}=${term} ) + line=${line#$a} + line=${line#|} + done + i=$(( i + 1 )) + progress $i ${#args[@]} +done +echo +# make sure we have mkinfo +printf "Building mkinfo: " +go build mkinfo.go +echo "done." + +# Build all the go database files for the "interesting" terminals". +printf "Building Go database: " +i=0 +for model in ${models[@]} +do + safe=$(echo $model | tr - _) + file=term_${safe}.go + ./mkinfo -go $file $model + go fmt ${file} >/dev/null + i=$(( i + 1 )) + progress $i ${#models[@]} +done +echo + +printf "Building JSON database: " + +# The JSON files are located for each terminal in a file with the +# terminal name, in the following fashion "database/x/xterm.json + +i=0 +for model in ${all[@]} +do + letter=$(ord ${model:0:1}) + dir=database/${letter} + file=${dir}/${model}.gz + mkdir -p ${dir} + ./mkinfo -nofatal -quiet -gzip -json ${file} ${model} + i=$(( i + 1 )) + progress $i ${#all[@]} +done +echo + +printf "Building JSON aliases: " +i=0 +for model in ${aliases[@]} +do + canon=${model#*=} + model=${model%=*} + letter=$(ord ${model:0:1}) + cletter=$(ord ${canon:0:1}) + dir=database/${letter} + file=${dir}/${model} + if [[ -f database/${cletter}/${canon}.gz ]] + then + [[ -d ${dir} ]] || mkdir -p ${dir} + # Generally speaking the aliases are better uncompressed + ./mkinfo -nofatal -quiet -json ${file} ${model} + fi + i=$(( i + 1 )) + progress $i ${#aliases[@]} +done +echo diff --git a/vendor/github.com/gdamore/tcell/terminfo/mkinfo.go b/vendor/github.com/gdamore/tcell/terminfo/mkinfo.go new file mode 100644 index 00000000..ba85330c --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/mkinfo.go @@ -0,0 +1,769 @@ +// +build ignore + +// Copyright 2017 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// This command is used to generate suitable configuration files in either +// go syntax or in JSON. It defaults to JSON output on stdout. If no +// term values are specified on the command line, then $TERM is used. +// +// Usage is like this: +// +// mkinfo [-init] [-go file.go] [-json file.json] [-quiet] [-nofatal] [...] +// +// -gzip specifies output should be compressed (json only) +// -go specifies Go output into the named file. Use - for stdout. +// -json specifies JSON output in the named file. Use - for stdout +// -nofatal indicates that errors loading definitions should not be fatal +// + +package main + +import ( + "bytes" + "compress/gzip" + "encoding/json" + "errors" + "flag" + "fmt" + "io" + "os" + "os/exec" + "regexp" + "strconv" + "strings" + + "github.com/gdamore/tcell/terminfo" +) + +type termcap struct { + name string + desc string + aliases []string + bools map[string]bool + nums map[string]int + strs map[string]string +} + +func (tc *termcap) getnum(s string) int { + return (tc.nums[s]) +} + +func (tc *termcap) getflag(s string) bool { + return (tc.bools[s]) +} + +func (tc *termcap) getstr(s string) string { + return (tc.strs[s]) +} + +const ( + NONE = iota + CTRL + ESC +) + +func unescape(s string) string { + // Various escapes are in \x format. Control codes are + // encoded as ^M (carat followed by ASCII equivalent). + // Escapes are: \e, \E - escape + // \0 NULL, \n \l \r \t \b \f \s for equivalent C escape. + buf := &bytes.Buffer{} + esc := NONE + + for i := 0; i < len(s); i++ { + c := s[i] + switch esc { + case NONE: + switch c { + case '\\': + esc = ESC + case '^': + esc = CTRL + default: + buf.WriteByte(c) + } + case CTRL: + buf.WriteByte(c - 0x40) + esc = NONE + case ESC: + switch c { + case 'E', 'e': + buf.WriteByte(0x1b) + case '0': + buf.WriteByte(0) + case 'n': + buf.WriteByte('\n') + case 'r': + buf.WriteByte('\r') + case 't': + buf.WriteByte('\t') + case 'b': + buf.WriteByte('\b') + case 'f': + buf.WriteByte('\f') + case 's': + buf.WriteByte(' ') + case 'l': + panic("WTF: weird format: " + s) + default: + buf.WriteByte(c) + } + esc = NONE + } + } + return (buf.String()) +} + +func (tc *termcap) setupterm(name string) error { + cmd := exec.Command("infocmp", "-1", name) + output := &bytes.Buffer{} + cmd.Stdout = output + + tc.strs = make(map[string]string) + tc.bools = make(map[string]bool) + tc.nums = make(map[string]int) + + err := cmd.Run() + if err != nil { + return err + } + + // Now parse the output. + // We get comment lines (starting with "#"), followed by + // a header line that looks like "||...|" + // then capabilities, one per line, starting with a tab and ending + // with a comma and newline. + lines := strings.Split(output.String(), "\n") + for len(lines) > 0 && strings.HasPrefix(lines[0], "#") { + lines = lines[1:] + } + + // Ditch trailing empty last line + if lines[len(lines)-1] == "" { + lines = lines[:len(lines)-1] + } + header := lines[0] + if strings.HasSuffix(header, ",") { + header = header[:len(header)-1] + } + names := strings.Split(header, "|") + tc.name = names[0] + names = names[1:] + if len(names) > 0 { + tc.desc = names[len(names)-1] + names = names[:len(names)-1] + } + tc.aliases = names + for _, val := range lines[1:] { + if (!strings.HasPrefix(val, "\t")) || + (!strings.HasSuffix(val, ",")) { + return (errors.New("malformed infocmp: " + val)) + } + + val = val[1:] + val = val[:len(val)-1] + + if k := strings.SplitN(val, "=", 2); len(k) == 2 { + tc.strs[k[0]] = unescape(k[1]) + } else if k := strings.SplitN(val, "#", 2); len(k) == 2 { + if u, err := strconv.ParseUint(k[1], 10, 0); err != nil { + return (err) + } else { + tc.nums[k[0]] = int(u) + } + } else { + tc.bools[val] = true + } + } + return nil +} + +// This program is used to collect data from the system's terminfo library, +// and write it into Go source code. That is, we maintain our terminfo +// capabilities encoded in the program. It should never need to be run by +// an end user, but developers can use this to add codes for additional +// terminal types. +// +// If a terminal name ending with -truecolor is given, and we cannot find +// one, we will try to fabricate one from either the -256color (if present) +// or the unadorned base name, adding the XTerm specific 24-bit color +// escapes. We believe that all 24-bit capable terminals use the same +// escape sequences, and terminfo has yet to evolve to support this. +func getinfo(name string) (*terminfo.Terminfo, string, error) { + var tc termcap + addTrueColor := false + if err := tc.setupterm(name); err != nil { + if strings.HasSuffix(name, "-truecolor") { + base := name[:len(name)-len("-truecolor")] + // Probably -256color is closest to what we want + if err = tc.setupterm(base + "-256color"); err != nil { + err = tc.setupterm(base) + } + if err == nil { + addTrueColor = true + } + tc.name = name + } + if err != nil { + return nil, "", err + } + } + t := &terminfo.Terminfo{} + // If this is an alias record, then just emit the alias + t.Name = tc.name + if t.Name != name { + return t, "", nil + } + t.Aliases = tc.aliases + t.Colors = tc.getnum("colors") + t.Columns = tc.getnum("cols") + t.Lines = tc.getnum("lines") + t.Bell = tc.getstr("bel") + t.Clear = tc.getstr("clear") + t.EnterCA = tc.getstr("smcup") + t.ExitCA = tc.getstr("rmcup") + t.ShowCursor = tc.getstr("cnorm") + t.HideCursor = tc.getstr("civis") + t.AttrOff = tc.getstr("sgr0") + t.Underline = tc.getstr("smul") + t.Bold = tc.getstr("bold") + t.Blink = tc.getstr("blink") + t.Dim = tc.getstr("dim") + t.Reverse = tc.getstr("rev") + t.EnterKeypad = tc.getstr("smkx") + t.ExitKeypad = tc.getstr("rmkx") + t.SetFg = tc.getstr("setaf") + t.SetBg = tc.getstr("setab") + t.SetCursor = tc.getstr("cup") + t.CursorBack1 = tc.getstr("cub1") + t.CursorUp1 = tc.getstr("cuu1") + t.KeyF1 = tc.getstr("kf1") + t.KeyF2 = tc.getstr("kf2") + t.KeyF3 = tc.getstr("kf3") + t.KeyF4 = tc.getstr("kf4") + t.KeyF5 = tc.getstr("kf5") + t.KeyF6 = tc.getstr("kf6") + t.KeyF7 = tc.getstr("kf7") + t.KeyF8 = tc.getstr("kf8") + t.KeyF9 = tc.getstr("kf9") + t.KeyF10 = tc.getstr("kf10") + t.KeyF11 = tc.getstr("kf11") + t.KeyF12 = tc.getstr("kf12") + t.KeyF13 = tc.getstr("kf13") + t.KeyF14 = tc.getstr("kf14") + t.KeyF15 = tc.getstr("kf15") + t.KeyF16 = tc.getstr("kf16") + t.KeyF17 = tc.getstr("kf17") + t.KeyF18 = tc.getstr("kf18") + t.KeyF19 = tc.getstr("kf19") + t.KeyF20 = tc.getstr("kf20") + t.KeyF21 = tc.getstr("kf21") + t.KeyF22 = tc.getstr("kf22") + t.KeyF23 = tc.getstr("kf23") + t.KeyF24 = tc.getstr("kf24") + t.KeyF25 = tc.getstr("kf25") + t.KeyF26 = tc.getstr("kf26") + t.KeyF27 = tc.getstr("kf27") + t.KeyF28 = tc.getstr("kf28") + t.KeyF29 = tc.getstr("kf29") + t.KeyF30 = tc.getstr("kf30") + t.KeyF31 = tc.getstr("kf31") + t.KeyF32 = tc.getstr("kf32") + t.KeyF33 = tc.getstr("kf33") + t.KeyF34 = tc.getstr("kf34") + t.KeyF35 = tc.getstr("kf35") + t.KeyF36 = tc.getstr("kf36") + t.KeyF37 = tc.getstr("kf37") + t.KeyF38 = tc.getstr("kf38") + t.KeyF39 = tc.getstr("kf39") + t.KeyF40 = tc.getstr("kf40") + t.KeyF41 = tc.getstr("kf41") + t.KeyF42 = tc.getstr("kf42") + t.KeyF43 = tc.getstr("kf43") + t.KeyF44 = tc.getstr("kf44") + t.KeyF45 = tc.getstr("kf45") + t.KeyF46 = tc.getstr("kf46") + t.KeyF47 = tc.getstr("kf47") + t.KeyF48 = tc.getstr("kf48") + t.KeyF49 = tc.getstr("kf49") + t.KeyF50 = tc.getstr("kf50") + t.KeyF51 = tc.getstr("kf51") + t.KeyF52 = tc.getstr("kf52") + t.KeyF53 = tc.getstr("kf53") + t.KeyF54 = tc.getstr("kf54") + t.KeyF55 = tc.getstr("kf55") + t.KeyF56 = tc.getstr("kf56") + t.KeyF57 = tc.getstr("kf57") + t.KeyF58 = tc.getstr("kf58") + t.KeyF59 = tc.getstr("kf59") + t.KeyF60 = tc.getstr("kf60") + t.KeyF61 = tc.getstr("kf61") + t.KeyF62 = tc.getstr("kf62") + t.KeyF63 = tc.getstr("kf63") + t.KeyF64 = tc.getstr("kf64") + t.KeyInsert = tc.getstr("kich1") + t.KeyDelete = tc.getstr("kdch1") + t.KeyBackspace = tc.getstr("kbs") + t.KeyHome = tc.getstr("khome") + t.KeyEnd = tc.getstr("kend") + t.KeyUp = tc.getstr("kcuu1") + t.KeyDown = tc.getstr("kcud1") + t.KeyRight = tc.getstr("kcuf1") + t.KeyLeft = tc.getstr("kcub1") + t.KeyPgDn = tc.getstr("knp") + t.KeyPgUp = tc.getstr("kpp") + t.KeyBacktab = tc.getstr("kcbt") + t.KeyExit = tc.getstr("kext") + t.KeyCancel = tc.getstr("kcan") + t.KeyPrint = tc.getstr("kprt") + t.KeyHelp = tc.getstr("khlp") + t.KeyClear = tc.getstr("kclr") + t.AltChars = tc.getstr("acsc") + t.EnterAcs = tc.getstr("smacs") + t.ExitAcs = tc.getstr("rmacs") + t.EnableAcs = tc.getstr("enacs") + t.Mouse = tc.getstr("kmous") + t.KeyShfRight = tc.getstr("kRIT") + t.KeyShfLeft = tc.getstr("kLFT") + t.KeyShfHome = tc.getstr("kHOM") + t.KeyShfEnd = tc.getstr("kEND") + + // Terminfo lacks descriptions for a bunch of modified keys, + // but modern XTerm and emulators often have them. Let's add them, + // if the shifted right and left arrows are defined. + if t.KeyShfRight == "\x1b[1;2C" && t.KeyShfLeft == "\x1b[1;2D" { + t.KeyShfUp = "\x1b[1;2A" + t.KeyShfDown = "\x1b[1;2B" + t.KeyMetaUp = "\x1b[1;9A" + t.KeyMetaDown = "\x1b[1;9B" + t.KeyMetaRight = "\x1b[1;9C" + t.KeyMetaLeft = "\x1b[1;9D" + t.KeyAltUp = "\x1b[1;3A" + t.KeyAltDown = "\x1b[1;3B" + t.KeyAltRight = "\x1b[1;3C" + t.KeyAltLeft = "\x1b[1;3D" + t.KeyCtrlUp = "\x1b[1;5A" + t.KeyCtrlDown = "\x1b[1;5B" + t.KeyCtrlRight = "\x1b[1;5C" + t.KeyCtrlLeft = "\x1b[1;5D" + t.KeyAltShfUp = "\x1b[1;4A" + t.KeyAltShfDown = "\x1b[1;4B" + t.KeyAltShfRight = "\x1b[1;4C" + t.KeyAltShfLeft = "\x1b[1;4D" + + t.KeyMetaShfUp = "\x1b[1;10A" + t.KeyMetaShfDown = "\x1b[1;10B" + t.KeyMetaShfRight = "\x1b[1;10C" + t.KeyMetaShfLeft = "\x1b[1;10D" + + t.KeyCtrlShfUp = "\x1b[1;6A" + t.KeyCtrlShfDown = "\x1b[1;6B" + t.KeyCtrlShfRight = "\x1b[1;6C" + t.KeyCtrlShfLeft = "\x1b[1;6D" + } + // And also for Home and End + if t.KeyShfHome == "\x1b[1;2H" && t.KeyShfEnd == "\x1b[1;2F" { + t.KeyCtrlHome = "\x1b[1;5H" + t.KeyCtrlEnd = "\x1b[1;5F" + t.KeyAltHome = "\x1b[1;9H" + t.KeyAltEnd = "\x1b[1;9F" + t.KeyCtrlShfHome = "\x1b[1;6H" + t.KeyCtrlShfEnd = "\x1b[1;6F" + t.KeyAltShfHome = "\x1b[1;4H" + t.KeyAltShfEnd = "\x1b[1;4F" + t.KeyMetaShfHome = "\x1b[1;10H" + t.KeyMetaShfEnd = "\x1b[1;10F" + } + + // And the same thing for rxvt and workalikes (Eterm, aterm, etc.) + // It seems that urxvt at least send ESC as ALT prefix for these, + // although some places seem to indicate a separate ALT key sesquence. + if t.KeyShfRight == "\x1b[c" && t.KeyShfLeft == "\x1b[d" { + t.KeyShfUp = "\x1b[a" + t.KeyShfDown = "\x1b[b" + t.KeyCtrlUp = "\x1b[Oa" + t.KeyCtrlDown = "\x1b[Ob" + t.KeyCtrlRight = "\x1b[Oc" + t.KeyCtrlLeft = "\x1b[Od" + } + if t.KeyShfHome == "\x1b[7$" && t.KeyShfEnd == "\x1b[8$" { + t.KeyCtrlHome = "\x1b[7^" + t.KeyCtrlEnd = "\x1b[8^" + } + + // If the kmous entry is present, then we need to record the + // the codes to enter and exit mouse mode. Sadly, this is not + // part of the terminfo databases anywhere that I've found, but + // is an extension. The escape codes are documented in the XTerm + // manual, and all terminals that have kmous are expected to + // use these same codes, unless explicitly configured otherwise + // vi XM. Note that in any event, we only known how to parse either + // x11 or SGR mouse events -- if your terminal doesn't support one + // of these two forms, you maybe out of luck. + t.MouseMode = tc.getstr("XM") + if t.Mouse != "" && t.MouseMode == "" { + // we anticipate that all xterm mouse tracking compatible + // terminals understand mouse tracking (1000), but we hope + // that those that don't understand any-event tracking (1003) + // will at least ignore it. Likewise we hope that terminals + // that don't understand SGR reporting (1006) just ignore it. + t.MouseMode = "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;" + + "\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c" + } + + // We only support colors in ANSI 8 or 256 color mode. + if t.Colors < 8 || t.SetFg == "" { + t.Colors = 0 + } + if t.SetCursor == "" { + return nil, "", errors.New("terminal not cursor addressable") + } + + // For padding, we lookup the pad char. If that isn't present, + // and npc is *not* set, then we assume a null byte. + t.PadChar = tc.getstr("pad") + if t.PadChar == "" { + if !tc.getflag("npc") { + t.PadChar = "\u0000" + } + } + + // For some terminals we fabricate a -truecolor entry, that may + // not exist in terminfo. + if addTrueColor { + t.SetFgRGB = "\x1b[38;2;%p1%d;%p2%d;%p3%dm" + t.SetBgRGB = "\x1b[48;2;%p1%d;%p2%d;%p3%dm" + t.SetFgBgRGB = "\x1b[38;2;%p1%d;%p2%d;%p3%d;" + + "48;2;%p4%d;%p5%d;%p6%dm" + } + + // For terminals that use "standard" SGR sequences, lets combine the + // foreground and background together. + if strings.HasPrefix(t.SetFg, "\x1b[") && + strings.HasPrefix(t.SetBg, "\x1b[") && + strings.HasSuffix(t.SetFg, "m") && + strings.HasSuffix(t.SetBg, "m") { + fg := t.SetFg[:len(t.SetFg)-1] + r := regexp.MustCompile("%p1") + bg := r.ReplaceAllString(t.SetBg[2:], "%p2") + t.SetFgBg = fg + ";" + bg + } + + return t, tc.desc, nil +} + +func dotGoAddInt(w io.Writer, n string, i int) { + if i == 0 { + // initialized to 0, ignore + return + } + fmt.Fprintf(w, "\t\t%-13s %d,\n", n+":", i) +} +func dotGoAddStr(w io.Writer, n string, s string) { + if s == "" { + return + } + fmt.Fprintf(w, "\t\t%-13s %q,\n", n+":", s) +} + +func dotGoAddArr(w io.Writer, n string, a []string) { + if len(a) == 0 { + return + } + fmt.Fprintf(w, "\t\t%-13s []string{", n+":") + did := false + for _, b := range a { + if did { + fmt.Fprint(w, ", ") + } + did = true + fmt.Fprintf(w, "%q", b) + } + fmt.Fprintln(w, "},") +} + +func dotGoHeader(w io.Writer, packname string) { + fmt.Fprintln(w, "// Generated automatically. DO NOT HAND-EDIT.") + fmt.Fprintln(w, "") + fmt.Fprintf(w, "package %s\n", packname) + fmt.Fprintln(w, "") +} + +func dotGoTrailer(w io.Writer) { +} + +func dotGoInfo(w io.Writer, t *terminfo.Terminfo, desc string) { + + fmt.Fprintln(w, "") + fmt.Fprintln(w, "func init() {") + fmt.Fprintf(w, "\t// %s\n", desc) + fmt.Fprintln(w, "\tAddTerminfo(&Terminfo{") + dotGoAddStr(w, "Name", t.Name) + dotGoAddArr(w, "Aliases", t.Aliases) + dotGoAddInt(w, "Columns", t.Columns) + dotGoAddInt(w, "Lines", t.Lines) + dotGoAddInt(w, "Colors", t.Colors) + dotGoAddStr(w, "Bell", t.Bell) + dotGoAddStr(w, "Clear", t.Clear) + dotGoAddStr(w, "EnterCA", t.EnterCA) + dotGoAddStr(w, "ExitCA", t.ExitCA) + dotGoAddStr(w, "ShowCursor", t.ShowCursor) + dotGoAddStr(w, "HideCursor", t.HideCursor) + dotGoAddStr(w, "AttrOff", t.AttrOff) + dotGoAddStr(w, "Underline", t.Underline) + dotGoAddStr(w, "Bold", t.Bold) + dotGoAddStr(w, "Dim", t.Dim) + dotGoAddStr(w, "Blink", t.Blink) + dotGoAddStr(w, "Reverse", t.Reverse) + dotGoAddStr(w, "EnterKeypad", t.EnterKeypad) + dotGoAddStr(w, "ExitKeypad", t.ExitKeypad) + dotGoAddStr(w, "SetFg", t.SetFg) + dotGoAddStr(w, "SetBg", t.SetBg) + dotGoAddStr(w, "SetFgBg", t.SetFgBg) + dotGoAddStr(w, "PadChar", t.PadChar) + dotGoAddStr(w, "AltChars", t.AltChars) + dotGoAddStr(w, "EnterAcs", t.EnterAcs) + dotGoAddStr(w, "ExitAcs", t.ExitAcs) + dotGoAddStr(w, "EnableAcs", t.EnableAcs) + dotGoAddStr(w, "SetFgRGB", t.SetFgRGB) + dotGoAddStr(w, "SetBgRGB", t.SetBgRGB) + dotGoAddStr(w, "SetFgBgRGB", t.SetFgBgRGB) + dotGoAddStr(w, "Mouse", t.Mouse) + dotGoAddStr(w, "MouseMode", t.MouseMode) + dotGoAddStr(w, "SetCursor", t.SetCursor) + dotGoAddStr(w, "CursorBack1", t.CursorBack1) + dotGoAddStr(w, "CursorUp1", t.CursorUp1) + dotGoAddStr(w, "KeyUp", t.KeyUp) + dotGoAddStr(w, "KeyDown", t.KeyDown) + dotGoAddStr(w, "KeyRight", t.KeyRight) + dotGoAddStr(w, "KeyLeft", t.KeyLeft) + dotGoAddStr(w, "KeyInsert", t.KeyInsert) + dotGoAddStr(w, "KeyDelete", t.KeyDelete) + dotGoAddStr(w, "KeyBackspace", t.KeyBackspace) + dotGoAddStr(w, "KeyHome", t.KeyHome) + dotGoAddStr(w, "KeyEnd", t.KeyEnd) + dotGoAddStr(w, "KeyPgUp", t.KeyPgUp) + dotGoAddStr(w, "KeyPgDn", t.KeyPgDn) + dotGoAddStr(w, "KeyF1", t.KeyF1) + dotGoAddStr(w, "KeyF2", t.KeyF2) + dotGoAddStr(w, "KeyF3", t.KeyF3) + dotGoAddStr(w, "KeyF4", t.KeyF4) + dotGoAddStr(w, "KeyF5", t.KeyF5) + dotGoAddStr(w, "KeyF6", t.KeyF6) + dotGoAddStr(w, "KeyF7", t.KeyF7) + dotGoAddStr(w, "KeyF8", t.KeyF8) + dotGoAddStr(w, "KeyF9", t.KeyF9) + dotGoAddStr(w, "KeyF10", t.KeyF10) + dotGoAddStr(w, "KeyF11", t.KeyF11) + dotGoAddStr(w, "KeyF12", t.KeyF12) + dotGoAddStr(w, "KeyF13", t.KeyF13) + dotGoAddStr(w, "KeyF14", t.KeyF14) + dotGoAddStr(w, "KeyF15", t.KeyF15) + dotGoAddStr(w, "KeyF16", t.KeyF16) + dotGoAddStr(w, "KeyF17", t.KeyF17) + dotGoAddStr(w, "KeyF18", t.KeyF18) + dotGoAddStr(w, "KeyF19", t.KeyF19) + dotGoAddStr(w, "KeyF20", t.KeyF20) + dotGoAddStr(w, "KeyF21", t.KeyF21) + dotGoAddStr(w, "KeyF22", t.KeyF22) + dotGoAddStr(w, "KeyF23", t.KeyF23) + dotGoAddStr(w, "KeyF24", t.KeyF24) + dotGoAddStr(w, "KeyF25", t.KeyF25) + dotGoAddStr(w, "KeyF26", t.KeyF26) + dotGoAddStr(w, "KeyF27", t.KeyF27) + dotGoAddStr(w, "KeyF28", t.KeyF28) + dotGoAddStr(w, "KeyF29", t.KeyF29) + dotGoAddStr(w, "KeyF30", t.KeyF30) + dotGoAddStr(w, "KeyF31", t.KeyF31) + dotGoAddStr(w, "KeyF32", t.KeyF32) + dotGoAddStr(w, "KeyF33", t.KeyF33) + dotGoAddStr(w, "KeyF34", t.KeyF34) + dotGoAddStr(w, "KeyF35", t.KeyF35) + dotGoAddStr(w, "KeyF36", t.KeyF36) + dotGoAddStr(w, "KeyF37", t.KeyF37) + dotGoAddStr(w, "KeyF38", t.KeyF38) + dotGoAddStr(w, "KeyF39", t.KeyF39) + dotGoAddStr(w, "KeyF40", t.KeyF40) + dotGoAddStr(w, "KeyF41", t.KeyF41) + dotGoAddStr(w, "KeyF42", t.KeyF42) + dotGoAddStr(w, "KeyF43", t.KeyF43) + dotGoAddStr(w, "KeyF44", t.KeyF44) + dotGoAddStr(w, "KeyF45", t.KeyF45) + dotGoAddStr(w, "KeyF46", t.KeyF46) + dotGoAddStr(w, "KeyF47", t.KeyF47) + dotGoAddStr(w, "KeyF48", t.KeyF48) + dotGoAddStr(w, "KeyF49", t.KeyF49) + dotGoAddStr(w, "KeyF50", t.KeyF50) + dotGoAddStr(w, "KeyF51", t.KeyF51) + dotGoAddStr(w, "KeyF52", t.KeyF52) + dotGoAddStr(w, "KeyF53", t.KeyF53) + dotGoAddStr(w, "KeyF54", t.KeyF54) + dotGoAddStr(w, "KeyF55", t.KeyF55) + dotGoAddStr(w, "KeyF56", t.KeyF56) + dotGoAddStr(w, "KeyF57", t.KeyF57) + dotGoAddStr(w, "KeyF58", t.KeyF58) + dotGoAddStr(w, "KeyF59", t.KeyF59) + dotGoAddStr(w, "KeyF60", t.KeyF60) + dotGoAddStr(w, "KeyF61", t.KeyF61) + dotGoAddStr(w, "KeyF62", t.KeyF62) + dotGoAddStr(w, "KeyF63", t.KeyF63) + dotGoAddStr(w, "KeyF64", t.KeyF64) + dotGoAddStr(w, "KeyCancel", t.KeyCancel) + dotGoAddStr(w, "KeyPrint", t.KeyPrint) + dotGoAddStr(w, "KeyExit", t.KeyExit) + dotGoAddStr(w, "KeyHelp", t.KeyHelp) + dotGoAddStr(w, "KeyClear", t.KeyClear) + dotGoAddStr(w, "KeyBacktab", t.KeyBacktab) + dotGoAddStr(w, "KeyShfLeft", t.KeyShfLeft) + dotGoAddStr(w, "KeyShfRight", t.KeyShfRight) + dotGoAddStr(w, "KeyShfUp", t.KeyShfUp) + dotGoAddStr(w, "KeyShfDown", t.KeyShfDown) + dotGoAddStr(w, "KeyCtrlLeft", t.KeyCtrlLeft) + dotGoAddStr(w, "KeyCtrlRight", t.KeyCtrlRight) + dotGoAddStr(w, "KeyCtrlUp", t.KeyCtrlUp) + dotGoAddStr(w, "KeyCtrlDown", t.KeyCtrlDown) + dotGoAddStr(w, "KeyMetaLeft", t.KeyMetaLeft) + dotGoAddStr(w, "KeyMetaRight", t.KeyMetaRight) + dotGoAddStr(w, "KeyMetaUp", t.KeyMetaUp) + dotGoAddStr(w, "KeyMetaDown", t.KeyMetaDown) + dotGoAddStr(w, "KeyAltLeft", t.KeyAltLeft) + dotGoAddStr(w, "KeyAltRight", t.KeyAltRight) + dotGoAddStr(w, "KeyAltUp", t.KeyAltUp) + dotGoAddStr(w, "KeyAltDown", t.KeyAltDown) + dotGoAddStr(w, "KeyAltShfLeft", t.KeyAltShfLeft) + dotGoAddStr(w, "KeyAltShfRight", t.KeyAltShfRight) + dotGoAddStr(w, "KeyAltShfUp", t.KeyAltShfUp) + dotGoAddStr(w, "KeyAltShfDown", t.KeyAltShfDown) + dotGoAddStr(w, "KeyMetaShfLeft", t.KeyMetaShfLeft) + dotGoAddStr(w, "KeyMetaShfRight", t.KeyMetaShfRight) + dotGoAddStr(w, "KeyMetaShfUp", t.KeyMetaShfUp) + dotGoAddStr(w, "KeyMetaShfDown", t.KeyMetaShfDown) + dotGoAddStr(w, "KeyCtrlShfLeft", t.KeyCtrlShfLeft) + dotGoAddStr(w, "KeyCtrlShfRight", t.KeyCtrlShfRight) + dotGoAddStr(w, "KeyCtrlShfUp", t.KeyCtrlShfUp) + dotGoAddStr(w, "KeyCtrlShfDown", t.KeyCtrlShfDown) + dotGoAddStr(w, "KeyShfHome", t.KeyShfHome) + dotGoAddStr(w, "KeyShfEnd", t.KeyShfEnd) + dotGoAddStr(w, "KeyCtrlHome", t.KeyCtrlHome) + dotGoAddStr(w, "KeyCtrlEnd", t.KeyCtrlEnd) + dotGoAddStr(w, "KeyMetaHome", t.KeyMetaHome) + dotGoAddStr(w, "KeyMetaEnd", t.KeyMetaEnd) + dotGoAddStr(w, "KeyAltHome", t.KeyAltHome) + dotGoAddStr(w, "KeyAltEnd", t.KeyAltEnd) + dotGoAddStr(w, "KeyCtrlShfHome", t.KeyCtrlShfHome) + dotGoAddStr(w, "KeyCtrlShfEnd", t.KeyCtrlShfEnd) + dotGoAddStr(w, "KeyMetaShfHome", t.KeyMetaShfHome) + dotGoAddStr(w, "KeyMetaShfEnd", t.KeyMetaShfEnd) + dotGoAddStr(w, "KeyAltShfHome", t.KeyAltShfHome) + dotGoAddStr(w, "KeyAltShfEnd", t.KeyAltShfEnd) + fmt.Fprintln(w, "\t})") + fmt.Fprintln(w, "}") +} + +func main() { + gofile := "" + jsonfile := "" + packname := "terminfo" + nofatal := false + quiet := false + dogzip := false + + flag.StringVar(&gofile, "go", "", "generate go source in named file") + flag.StringVar(&jsonfile, "json", "", "generate json in named file") + flag.StringVar(&packname, "P", packname, "package name (go source)") + flag.BoolVar(&nofatal, "nofatal", false, "errors are not fatal") + flag.BoolVar(&quiet, "quiet", false, "suppress error messages") + flag.BoolVar(&dogzip, "gzip", false, "compress json output") + flag.Parse() + var e error + js := []byte{} + + args := flag.Args() + if len(args) == 0 { + args = []string{os.Getenv("TERM")} + } + + tdata := make(map[string]*terminfo.Terminfo) + descs := make(map[string]string) + + for _, term := range args { + if t, desc, e := getinfo(term); e != nil { + if !quiet { + fmt.Fprintf(os.Stderr, + "Failed loading %s: %v\n", term, e) + } + if !nofatal { + os.Exit(1) + } + } else { + tdata[term] = t + descs[term] = desc + } + } + + if len(tdata) == 0 { + // No data. + os.Exit(0) + } + if gofile != "" { + w := os.Stdout + if gofile != "-" { + if w, e = os.Create(gofile); e != nil { + fmt.Fprintf(os.Stderr, "Failed: %v", e) + os.Exit(1) + } + } + dotGoHeader(w, packname) + for term, t := range tdata { + if t.Name == term { + dotGoInfo(w, t, descs[term]) + } + } + dotGoTrailer(w) + if w != os.Stdout { + w.Close() + } + } else { + o := os.Stdout + if jsonfile != "-" && jsonfile != "" { + if o, e = os.Create(jsonfile); e != nil { + fmt.Fprintf(os.Stderr, "Failed: %v", e) + } + } + var w io.WriteCloser + w = o + if dogzip { + w = gzip.NewWriter(o) + } + for _, term := range args { + if t := tdata[term]; t != nil { + js, e = json.Marshal(t) + fmt.Fprintln(w, string(js)) + } + // arguably if there is more than one term, this + // should be a javascript array, but that's not how + // we load it. We marshal objects one at a time from + // the file. + } + if e != nil { + fmt.Fprintf(os.Stderr, "Failed: %v", e) + os.Exit(1) + } + w.Close() + if w != o { + o.Close() + } + } +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/models.txt b/vendor/github.com/gdamore/tcell/terminfo/models.txt new file mode 100644 index 00000000..ac0676d6 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/models.txt @@ -0,0 +1,59 @@ +adm3a +aixterm +ansi +aterm +beterm +bsdos-pc +cygwin +d200 +d210 +dtterm +Eterm +Eterm-256color +eterm +gnome +gnome-256color +hpterm +hz1500 +konsole +konsole-256color +kterm +linux +pcansi +rxvt +rxvt-256color +rxvt-unicode +rxvt-unicode-256color +screen +screen-256color +st +st-256color +st-truecolor +st-meta +st-meta-256color +st-meta-truecolor +sun +sun-color +tvi910 +tvi912 +tvi921 +tvi925 +tvi950 +tvi970 +vt52 +vt100 +vt102 +vt220 +vt320 +vt400 +vt420 +wy50 +wy60 +wy99-ansi +wy99a-ansi +xfce +xnuppc +xterm +xterm +xterm-256color +xterm-truecolor diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_Eterm.go b/vendor/github.com/gdamore/tcell/terminfo/term_Eterm.go new file mode 100644 index 00000000..9290e32b --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_Eterm.go @@ -0,0 +1,24 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // gnu emacs term.el terminal emulation + AddTerminfo(&Terminfo{ + Name: "eterm", + Columns: 80, + Lines: 24, + Bell: "\a", + Clear: "\x1b[H\x1b[J", + EnterCA: "\x1b7\x1b[?47h", + ExitCA: "\x1b[2J\x1b[?47l\x1b8", + AttrOff: "\x1b[m", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Reverse: "\x1b[7m", + PadChar: "\x00", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_Eterm_256color.go b/vendor/github.com/gdamore/tcell/terminfo/term_Eterm_256color.go new file mode 100644 index 00000000..af2f5ff1 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_Eterm_256color.go @@ -0,0 +1,105 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // Eterm with xterm 256-colors + AddTerminfo(&Terminfo{ + Name: "Eterm-256color", + Columns: 80, + Lines: 24, + Colors: 256, + Bell: "\a", + Clear: "\x1b[H\x1b[2J", + EnterCA: "\x1b7\x1b[?47h", + ExitCA: "\x1b[2J\x1b[?47l\x1b8", + ShowCursor: "\x1b[?25h", + HideCursor: "\x1b[?25l", + AttrOff: "\x1b[m\x0017", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + SetFg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m", + SetBg: "\x1b[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m", + SetFgBg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%<%t4%p2%d%e%p2%{16}%<%t10%p2%{8}%-%d%e48;5;%p2%d%;m", + PadChar: "\x00", + AltChars: "``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~", + EnterAcs: "\x0e", + ExitAcs: "\x0f", + EnableAcs: "\x1b)0", + Mouse: "\x1b[M", + MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1b[A", + KeyDown: "\x1b[B", + KeyRight: "\x1b[C", + KeyLeft: "\x1b[D", + KeyInsert: "\x1b[2~", + KeyDelete: "\x1b[3~", + KeyBackspace: "\b", + KeyHome: "\x1b[7~", + KeyEnd: "\x1b[8~", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1b[11~", + KeyF2: "\x1b[12~", + KeyF3: "\x1b[13~", + KeyF4: "\x1b[14~", + KeyF5: "\x1b[15~", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyF13: "\x1b[25~", + KeyF14: "\x1b[26~", + KeyF15: "\x1b[28~", + KeyF16: "\x1b[29~", + KeyF17: "\x1b[31~", + KeyF18: "\x1b[32~", + KeyF19: "\x1b[33~", + KeyF20: "\x1b[34~", + KeyF21: "\x1b[23$", + KeyF22: "\x1b[24$", + KeyF23: "\x1b[11^", + KeyF24: "\x1b[12^", + KeyF25: "\x1b[13^", + KeyF26: "\x1b[14^", + KeyF27: "\x1b[15^", + KeyF28: "\x1b[17^", + KeyF29: "\x1b[18^", + KeyF30: "\x1b[19^", + KeyF31: "\x1b[20^", + KeyF32: "\x1b[21^", + KeyF33: "\x1b[23^", + KeyF34: "\x1b[24^", + KeyF35: "\x1b[25^", + KeyF36: "\x1b[26^", + KeyF37: "\x1b[28^", + KeyF38: "\x1b[29^", + KeyF39: "\x1b[31^", + KeyF40: "\x1b[32^", + KeyF41: "\x1b[33^", + KeyF42: "\x1b[34^", + KeyF43: "\x1b[23@", + KeyF44: "\x1b[24@", + KeyHelp: "\x1b[28~", + KeyShfLeft: "\x1b[d", + KeyShfRight: "\x1b[c", + KeyShfUp: "\x1b[a", + KeyShfDown: "\x1b[b", + KeyCtrlLeft: "\x1b[Od", + KeyCtrlRight: "\x1b[Oc", + KeyCtrlUp: "\x1b[Oa", + KeyCtrlDown: "\x1b[Ob", + KeyShfHome: "\x1b[7$", + KeyShfEnd: "\x1b[8$", + KeyCtrlHome: "\x1b[7^", + KeyCtrlEnd: "\x1b[8^", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_adm3a.go b/vendor/github.com/gdamore/tcell/terminfo/term_adm3a.go new file mode 100644 index 00000000..dc57809e --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_adm3a.go @@ -0,0 +1,22 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // lsi adm3a + AddTerminfo(&Terminfo{ + Name: "adm3a", + Columns: 80, + Lines: 24, + Bell: "\a", + Clear: "\x0032$<1/>", + PadChar: "\x00", + SetCursor: "\x1b=%p1%' '%+%c%p2%' '%+%c", + CursorBack1: "\b", + CursorUp1: "\v", + KeyUp: "\v", + KeyDown: "\n", + KeyRight: "\f", + KeyLeft: "\b", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_aixterm.go b/vendor/github.com/gdamore/tcell/terminfo/term_aixterm.go new file mode 100644 index 00000000..e1d2146a --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_aixterm.go @@ -0,0 +1,76 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // IBM Aixterm Terminal Emulator + AddTerminfo(&Terminfo{ + Name: "aixterm", + Columns: 80, + Lines: 25, + Colors: 8, + Bell: "\a", + Clear: "\x1b[H\x1b[J", + AttrOff: "\x1b[0;10m\x1b(B", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Reverse: "\x1b[7m", + SetFg: "\x1b[3%p1%dm", + SetBg: "\x1b[4%p1%dm", + SetFgBg: "\x1b[3%p1%d;4%p2%dm", + PadChar: "\x00", + AltChars: "jjkkllmmnnqqttuuvvwwxx", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1b[A", + KeyDown: "\x1b[B", + KeyRight: "\x1b[C", + KeyLeft: "\x1b[D", + KeyInsert: "\x1b[139q", + KeyDelete: "\x1b[P", + KeyBackspace: "\b", + KeyHome: "\x1b[H", + KeyEnd: "\x1b[146q", + KeyPgUp: "\x1b[150q", + KeyPgDn: "\x1b[154q", + KeyF1: "\x1b[001q", + KeyF2: "\x1b[002q", + KeyF3: "\x1b[003q", + KeyF4: "\x1b[004q", + KeyF5: "\x1b[005q", + KeyF6: "\x1b[006q", + KeyF7: "\x1b[007q", + KeyF8: "\x1b[008q", + KeyF9: "\x1b[009q", + KeyF10: "\x1b[010q", + KeyF11: "\x1b[011q", + KeyF12: "\x1b[012q", + KeyF13: "\x1b[013q", + KeyF14: "\x1b[014q", + KeyF15: "\x1b[015q", + KeyF16: "\x1b[016q", + KeyF17: "\x1b[017q", + KeyF18: "\x1b[018q", + KeyF19: "\x1b[019q", + KeyF20: "\x1b[020q", + KeyF21: "\x1b[021q", + KeyF22: "\x1b[022q", + KeyF23: "\x1b[023q", + KeyF24: "\x1b[024q", + KeyF25: "\x1b[025q", + KeyF26: "\x1b[026q", + KeyF27: "\x1b[027q", + KeyF28: "\x1b[028q", + KeyF29: "\x1b[029q", + KeyF30: "\x1b[030q", + KeyF31: "\x1b[031q", + KeyF32: "\x1b[032q", + KeyF33: "\x1b[033q", + KeyF34: "\x1b[034q", + KeyF35: "\x1b[035q", + KeyF36: "\x1b[036q", + KeyClear: "\x1b[144q", + KeyBacktab: "\x1b[Z", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_ansi.go b/vendor/github.com/gdamore/tcell/terminfo/term_ansi.go new file mode 100644 index 00000000..52a68ea4 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_ansi.go @@ -0,0 +1,38 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // ansi/pc-term compatible with color + AddTerminfo(&Terminfo{ + Name: "ansi", + Columns: 80, + Lines: 24, + Colors: 8, + Bell: "\a", + Clear: "\x1b[H\x1b[J", + AttrOff: "\x1b[0;10m", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + SetFg: "\x1b[3%p1%dm", + SetBg: "\x1b[4%p1%dm", + SetFgBg: "\x1b[3%p1%d;4%p2%dm", + PadChar: "\x00", + AltChars: "+\x0020,\x0021-\x0030.\x190333`\x0004a261f370g361h260j331k277l332m300n305o~p304q304r304s_t303u264v301w302x263y363z362{343|330}234~376", + EnterAcs: "\x1b[11m", + ExitAcs: "\x1b[10m", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\x1b[D", + CursorUp1: "\x1b[A", + KeyUp: "\x1b[A", + KeyDown: "\x1b[B", + KeyRight: "\x1b[C", + KeyLeft: "\x1b[D", + KeyInsert: "\x1b[L", + KeyBackspace: "\b", + KeyHome: "\x1b[H", + KeyBacktab: "\x1b[Z", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_aterm.go b/vendor/github.com/gdamore/tcell/terminfo/term_aterm.go new file mode 100644 index 00000000..94daaafa --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_aterm.go @@ -0,0 +1,107 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // AfterStep terminal + AddTerminfo(&Terminfo{ + Name: "aterm", + Columns: 80, + Lines: 24, + Colors: 8, + Bell: "\a", + Clear: "\x1b[H\x1b[2J", + EnterCA: "\x1b7\x1b[?47h", + ExitCA: "\x1b[2J\x1b[?47l\x1b8", + ShowCursor: "\x1b[?25h", + HideCursor: "\x1b[?25l", + AttrOff: "\x1b[m\x0017", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + EnterKeypad: "\x1b=", + ExitKeypad: "\x1b>", + SetFg: "\x1b[3%p1%dm", + SetBg: "\x1b[4%p1%dm", + SetFgBg: "\x1b[3%p1%d;4%p2%dm", + PadChar: "\x00", + AltChars: "``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~", + EnterAcs: "\x0e", + ExitAcs: "\x0f", + EnableAcs: "\x1b(B\x1b)0", + Mouse: "\x1b[M", + MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1b[A", + KeyDown: "\x1b[B", + KeyRight: "\x1b[C", + KeyLeft: "\x1b[D", + KeyInsert: "\x1b[2~", + KeyDelete: "\x1b[3~", + KeyBackspace: "177", + KeyHome: "\x1b[7~", + KeyEnd: "\x1b[8~", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1bOP", + KeyF2: "\x1bOQ", + KeyF3: "\x1bOR", + KeyF4: "\x1bOS", + KeyF5: "\x1b[15~", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyF13: "\x1b[25~", + KeyF14: "\x1b[26~", + KeyF15: "\x1b[28~", + KeyF16: "\x1b[29~", + KeyF17: "\x1b[31~", + KeyF18: "\x1b[32~", + KeyF19: "\x1b[33~", + KeyF20: "\x1b[34~", + KeyF21: "\x1b[23$", + KeyF22: "\x1b[24$", + KeyF23: "\x1b[11^", + KeyF24: "\x1b[12^", + KeyF25: "\x1b[13^", + KeyF26: "\x1b[14^", + KeyF27: "\x1b[15^", + KeyF28: "\x1b[17^", + KeyF29: "\x1b[18^", + KeyF30: "\x1b[19^", + KeyF31: "\x1b[20^", + KeyF32: "\x1b[21^", + KeyF33: "\x1b[23^", + KeyF34: "\x1b[24^", + KeyF35: "\x1b[25^", + KeyF36: "\x1b[26^", + KeyF37: "\x1b[28^", + KeyF38: "\x1b[29^", + KeyF39: "\x1b[31^", + KeyF40: "\x1b[32^", + KeyF41: "\x1b[33^", + KeyF42: "\x1b[34^", + KeyF43: "\x1b[23@", + KeyF44: "\x1b[24@", + KeyBacktab: "\x1b[Z", + KeyShfLeft: "\x1b[d", + KeyShfRight: "\x1b[c", + KeyShfUp: "\x1b[a", + KeyShfDown: "\x1b[b", + KeyCtrlLeft: "\x1b[Od", + KeyCtrlRight: "\x1b[Oc", + KeyCtrlUp: "\x1b[Oa", + KeyCtrlDown: "\x1b[Ob", + KeyShfHome: "\x1b[7$", + KeyShfEnd: "\x1b[8$", + KeyCtrlHome: "\x1b[7^", + KeyCtrlEnd: "\x1b[8^", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_beterm.go b/vendor/github.com/gdamore/tcell/terminfo/term_beterm.go new file mode 100644 index 00000000..de1b5d9f --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_beterm.go @@ -0,0 +1,51 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // BeOS Terminal + AddTerminfo(&Terminfo{ + Name: "beterm", + Columns: 80, + Lines: 25, + Colors: 8, + Bell: "\a", + Clear: "\x1b[H\x1b[J", + AttrOff: "\x1b[0;10m", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Reverse: "\x1b[7m", + EnterKeypad: "\x1b[?4h", + ExitKeypad: "\x1b[?4l", + SetFg: "\x1b[3%p1%dm", + SetBg: "\x1b[4%p1%dm", + SetFgBg: "\x1b[3%p1%d;4%p2%dm", + PadChar: "\x00", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1b[A", + KeyDown: "\x1b[B", + KeyRight: "\x1b[C", + KeyLeft: "\x1b[D", + KeyInsert: "\x1b[2~", + KeyDelete: "\x1b[3~", + KeyBackspace: "\b", + KeyHome: "\x1b[1~", + KeyEnd: "\x1b[4~", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1b[11~", + KeyF2: "\x1b[12~", + KeyF3: "\x1b[13~", + KeyF4: "\x1b[14~", + KeyF5: "\x1b[15~", + KeyF6: "\x1b[16~", + KeyF7: "\x1b[17~", + KeyF8: "\x1b[18~", + KeyF9: "\x1b[19~", + KeyF10: "\x1b[20~", + KeyF11: "\x1b[21~", + KeyF12: "\x1b[22~", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_bsdos_pc.go b/vendor/github.com/gdamore/tcell/terminfo/term_bsdos_pc.go new file mode 100644 index 00000000..413ea649 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_bsdos_pc.go @@ -0,0 +1,39 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // IBM PC BSD/OS Console + AddTerminfo(&Terminfo{ + Name: "bsdos-pc", + Columns: 80, + Lines: 25, + Colors: 8, + Bell: "\a", + Clear: "\x1bc", + AttrOff: "\x1b[0;10m", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + SetFg: "\x1b[3%p1%dm", + SetBg: "\x1b[4%p1%dm", + SetFgBg: "\x1b[3%p1%d;4%p2%dm", + PadChar: "\x00", + AltChars: "+\x0020,\x0021-\x0030.\x190333`\x0004a261f370g361h260j331k277l332m300n305o~p304q304r304s_t303u264v301w302x263y363z362{343|330}234~376", + EnterAcs: "\x1b[11m", + ExitAcs: "\x1b[10m", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1b[A", + KeyDown: "\x1b[B", + KeyRight: "\x1b[C", + KeyLeft: "\x1b[D", + KeyInsert: "\x1b[L", + KeyBackspace: "\b", + KeyHome: "\x1b[H", + KeyPgUp: "\x1b[I", + KeyPgDn: "\x1b[G", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_cygwin.go b/vendor/github.com/gdamore/tcell/terminfo/term_cygwin.go new file mode 100644 index 00000000..1fdc571c --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_cygwin.go @@ -0,0 +1,60 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // ansi emulation for Cygwin + AddTerminfo(&Terminfo{ + Name: "cygwin", + Colors: 8, + Bell: "\a", + Clear: "\x1b[H\x1b[J", + EnterCA: "\x1b7\x1b[?47h", + ExitCA: "\x1b[2J\x1b[?47l\x1b8", + AttrOff: "\x1b[0;10m", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Reverse: "\x1b[7m", + SetFg: "\x1b[3%p1%dm", + SetBg: "\x1b[4%p1%dm", + SetFgBg: "\x1b[3%p1%d;4%p2%dm", + PadChar: "\x00", + AltChars: "+\x0020,\x0021-\x0030.\x190333`\x0004a261f370g361h260j331k277l332m300n305o~p304q304r304s_t303u264v301w302x263y363z362{343|330}234~376", + EnterAcs: "\x1b[11m", + ExitAcs: "\x1b[10m", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1b[A", + KeyDown: "\x1b[B", + KeyRight: "\x1b[C", + KeyLeft: "\x1b[D", + KeyInsert: "\x1b[2~", + KeyDelete: "\x1b[3~", + KeyBackspace: "\b", + KeyHome: "\x1b[1~", + KeyEnd: "\x1b[4~", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1b[[A", + KeyF2: "\x1b[[B", + KeyF3: "\x1b[[C", + KeyF4: "\x1b[[D", + KeyF5: "\x1b[[E", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyF13: "\x1b[25~", + KeyF14: "\x1b[26~", + KeyF15: "\x1b[28~", + KeyF16: "\x1b[29~", + KeyF17: "\x1b[31~", + KeyF18: "\x1b[32~", + KeyF19: "\x1b[33~", + KeyF20: "\x1b[34~", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_d200.go b/vendor/github.com/gdamore/tcell/terminfo/term_d200.go new file mode 100644 index 00000000..e8016797 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_d200.go @@ -0,0 +1,94 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // Data General DASHER D200 + AddTerminfo(&Terminfo{ + Name: "d200", + Aliases: []string{"d200-dg"}, + Columns: 80, + Lines: 24, + Bell: "\a", + Clear: "\f", + AttrOff: "\x0017\x0025\x0035\x0036E", + Underline: "\x14", + Bold: "\x1eD\x14", + Dim: "\x1c", + Blink: "\x0e", + Reverse: "\x1eD", + PadChar: "\x00", + SetCursor: "\x0020%p2%c%p1%c", + CursorBack1: "\x19", + CursorUp1: "\x17", + KeyUp: "\x17", + KeyDown: "\x1a", + KeyRight: "\x18", + KeyLeft: "\x19", + KeyHome: "\b", + KeyF1: "\x1eq", + KeyF2: "\x1er", + KeyF3: "\x1es", + KeyF4: "\x1et", + KeyF5: "\x1eu", + KeyF6: "\x1ev", + KeyF7: "\x1ew", + KeyF8: "\x1ex", + KeyF9: "\x1ey", + KeyF10: "\x1ez", + KeyF11: "\x1e{", + KeyF12: "\x1e|", + KeyF13: "\x1e}", + KeyF14: "\x1e~", + KeyF15: "\x1ep", + KeyF16: "\x1ea", + KeyF17: "\x1eb", + KeyF18: "\x1ec", + KeyF19: "\x1ed", + KeyF20: "\x1ee", + KeyF21: "\x1ef", + KeyF22: "\x1eg", + KeyF23: "\x1eh", + KeyF24: "\x1ei", + KeyF25: "\x1ej", + KeyF26: "\x1ek", + KeyF27: "\x1el", + KeyF28: "\x1em", + KeyF29: "\x1en", + KeyF30: "\x1e`", + KeyF31: "\x1e1", + KeyF32: "\x1e2", + KeyF33: "\x1e3", + KeyF34: "\x1e4", + KeyF35: "\x1e5", + KeyF36: "\x1e6", + KeyF37: "\x1e7", + KeyF38: "\x1e8", + KeyF39: "\x1e9", + KeyF40: "\x1e:", + KeyF41: "\x1e;", + KeyF42: "\x1e<", + KeyF43: "\x1e=", + KeyF44: "\x1e>", + KeyF45: "\x1e0", + KeyF46: "\x1e!", + KeyF47: "\x1e\"", + KeyF48: "\x1e#", + KeyF49: "\x1e$", + KeyF50: "\x1e%%", + KeyF51: "\x1e&", + KeyF52: "\x1e'", + KeyF53: "\x1e(", + KeyF54: "\x1e)", + KeyF55: "\x1e*", + KeyF56: "\x1e+", + KeyF57: "\x1e,", + KeyF58: "\x1e-", + KeyF59: "\x1e.", + KeyF60: "\x1e ", + KeyClear: "\f", + KeyShfLeft: "\x1e\x19", + KeyShfRight: "\x1e\x18", + KeyShfHome: "\x1e\b", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_d210.go b/vendor/github.com/gdamore/tcell/terminfo/term_d210.go new file mode 100644 index 00000000..87e0662d --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_d210.go @@ -0,0 +1,92 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // Data General DASHER D210 series + AddTerminfo(&Terminfo{ + Name: "d210", + Aliases: []string{"d214"}, + Columns: 80, + Lines: 24, + Bell: "\a", + Clear: "\x1b[2J", + AttrOff: "\x1b[m", + Underline: "\x1b[4m", + Bold: "\x1b[4;7m", + Dim: "\x1b[2m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + PadChar: "\x00", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1b[A", + KeyDown: "\x1b[B", + KeyRight: "\x1b[C", + KeyLeft: "\x1b[D", + KeyHome: "\x1b[H", + KeyF1: "\x1b[001z", + KeyF2: "\x1b[002z", + KeyF3: "\x1b[003z", + KeyF4: "\x1b[004z", + KeyF5: "\x1b[005z", + KeyF6: "\x1b[006z", + KeyF7: "\x1b[007z", + KeyF8: "\x1b[008z", + KeyF9: "\x1b[009z", + KeyF10: "\x1b[010z", + KeyF11: "\x1b[011z", + KeyF12: "\x1b[012z", + KeyF13: "\x1b[013z", + KeyF14: "\x1b[014z", + KeyF15: "\x1b[000z", + KeyF16: "\x1b[101z", + KeyF17: "\x1b[102z", + KeyF18: "\x1b[103z", + KeyF19: "\x1b[104z", + KeyF20: "\x1b[105z", + KeyF21: "\x1b[106z", + KeyF22: "\x1b[107z", + KeyF23: "\x1b[108z", + KeyF24: "\x1b[109z", + KeyF25: "\x1b[110z", + KeyF26: "\x1b[111z", + KeyF27: "\x1b[112z", + KeyF28: "\x1b[113z", + KeyF29: "\x1b[114z", + KeyF30: "\x1b[100z", + KeyF31: "\x1b[201z", + KeyF32: "\x1b[202z", + KeyF33: "\x1b[203z", + KeyF34: "\x1b[204z", + KeyF35: "\x1b[205z", + KeyF36: "\x1b[206z", + KeyF37: "\x1b[207z", + KeyF38: "\x1b[208z", + KeyF39: "\x1b[209z", + KeyF40: "\x1b[210z", + KeyF41: "\x1b[211z", + KeyF42: "\x1b[212z", + KeyF43: "\x1b[213z", + KeyF44: "\x1b[214z", + KeyF45: "\x1b[200z", + KeyF46: "\x1b[301z", + KeyF47: "\x1b[302z", + KeyF48: "\x1b[303z", + KeyF49: "\x1b[304z", + KeyF50: "\x1b[305z", + KeyF51: "\x1b[306z", + KeyF52: "\x1b[307z", + KeyF53: "\x1b[308z", + KeyF54: "\x1b[309z", + KeyF55: "\x1b[310z", + KeyF56: "\x1b[311z", + KeyF57: "\x1b[312z", + KeyF58: "\x1b[313z", + KeyF59: "\x1b[314z", + KeyF60: "\x1b[300z", + KeyPrint: "\x1b[i", + KeyClear: "\x1b[2J", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_dtterm.go b/vendor/github.com/gdamore/tcell/terminfo/term_dtterm.go new file mode 100644 index 00000000..c173d56b --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_dtterm.go @@ -0,0 +1,64 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // CDE desktop terminal + AddTerminfo(&Terminfo{ + Name: "dtterm", + Columns: 80, + Lines: 24, + Colors: 8, + Bell: "\a", + Clear: "\x1b[H\x1b[J", + ShowCursor: "\x1b[?25h", + HideCursor: "\x1b[?25l", + AttrOff: "\x1b[m\x0017", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Dim: "\x1b[2m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + SetFg: "\x1b[3%p1%dm", + SetBg: "\x1b[4%p1%dm", + SetFgBg: "\x1b[3%p1%d;4%p2%dm", + PadChar: "\x00", + AltChars: "``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~", + EnterAcs: "\x0e", + ExitAcs: "\x0f", + EnableAcs: "\x1b(B\x1b)0", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1b[A", + KeyDown: "\x1b[B", + KeyRight: "\x1b[C", + KeyLeft: "\x1b[D", + KeyInsert: "\x1b[2~", + KeyDelete: "\x1b[3~", + KeyBackspace: "\b", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1b[11~", + KeyF2: "\x1b[12~", + KeyF3: "\x1b[13~", + KeyF4: "\x1b[14~", + KeyF5: "\x1b[15~", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyF13: "\x1b[25~", + KeyF14: "\x1b[26~", + KeyF15: "\x1b[28~", + KeyF16: "\x1b[29~", + KeyF17: "\x1b[31~", + KeyF18: "\x1b[32~", + KeyF19: "\x1b[33~", + KeyF20: "\x1b[34~", + KeyHelp: "\x1b[28~", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_gnome.go b/vendor/github.com/gdamore/tcell/terminfo/term_gnome.go new file mode 100644 index 00000000..0b7b85a7 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_gnome.go @@ -0,0 +1,153 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // GNOME Terminal + AddTerminfo(&Terminfo{ + Name: "gnome", + Columns: 80, + Lines: 24, + Colors: 8, + Bell: "\a", + Clear: "\x1b[H\x1b[2J", + EnterCA: "\x1b7\x1b[?47h", + ExitCA: "\x1b[2J\x1b[?47l\x1b8", + ShowCursor: "\x1b[?25h", + HideCursor: "\x1b[?25l", + AttrOff: "\x1b[0m\x0017", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Reverse: "\x1b[7m", + EnterKeypad: "\x1b[?1h\x1b=", + ExitKeypad: "\x1b[?1l\x1b>", + SetFg: "\x1b[3%p1%dm", + SetBg: "\x1b[4%p1%dm", + SetFgBg: "\x1b[3%p1%d;4%p2%dm", + PadChar: "\x00", + AltChars: "``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~", + EnterAcs: "\x0e", + ExitAcs: "\x0f", + EnableAcs: "\x1b)0", + Mouse: "\x1b[M", + MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1bOA", + KeyDown: "\x1bOB", + KeyRight: "\x1bOC", + KeyLeft: "\x1bOD", + KeyInsert: "\x1b[2~", + KeyDelete: "\x1b[3~", + KeyBackspace: "177", + KeyHome: "\x1bOH", + KeyEnd: "\x1bOF", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1bOP", + KeyF2: "\x1bOQ", + KeyF3: "\x1bOR", + KeyF4: "\x1bOS", + KeyF5: "\x1b[15~", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyF13: "\x1bO1;2P", + KeyF14: "\x1bO1;2Q", + KeyF15: "\x1bO1;2R", + KeyF16: "\x1bO1;2S", + KeyF17: "\x1b[15;2~", + KeyF18: "\x1b[17;2~", + KeyF19: "\x1b[18;2~", + KeyF20: "\x1b[19;2~", + KeyF21: "\x1b[20;2~", + KeyF22: "\x1b[21;2~", + KeyF23: "\x1b[23;2~", + KeyF24: "\x1b[24;2~", + KeyF25: "\x1bO1;5P", + KeyF26: "\x1bO1;5Q", + KeyF27: "\x1bO1;5R", + KeyF28: "\x1bO1;5S", + KeyF29: "\x1b[15;5~", + KeyF30: "\x1b[17;5~", + KeyF31: "\x1b[18;5~", + KeyF32: "\x1b[19;5~", + KeyF33: "\x1b[20;5~", + KeyF34: "\x1b[21;5~", + KeyF35: "\x1b[23;5~", + KeyF36: "\x1b[24;5~", + KeyF37: "\x1bO1;6P", + KeyF38: "\x1bO1;6Q", + KeyF39: "\x1bO1;6R", + KeyF40: "\x1bO1;6S", + KeyF41: "\x1b[15;6~", + KeyF42: "\x1b[17;6~", + KeyF43: "\x1b[18;6~", + KeyF44: "\x1b[19;6~", + KeyF45: "\x1b[20;6~", + KeyF46: "\x1b[21;6~", + KeyF47: "\x1b[23;6~", + KeyF48: "\x1b[24;6~", + KeyF49: "\x1bO1;3P", + KeyF50: "\x1bO1;3Q", + KeyF51: "\x1bO1;3R", + KeyF52: "\x1bO1;3S", + KeyF53: "\x1b[15;3~", + KeyF54: "\x1b[17;3~", + KeyF55: "\x1b[18;3~", + KeyF56: "\x1b[19;3~", + KeyF57: "\x1b[20;3~", + KeyF58: "\x1b[21;3~", + KeyF59: "\x1b[23;3~", + KeyF60: "\x1b[24;3~", + KeyF61: "\x1bO1;4P", + KeyF62: "\x1bO1;4Q", + KeyF63: "\x1bO1;4R", + KeyBacktab: "\x1b[Z", + KeyShfLeft: "\x1b[1;2D", + KeyShfRight: "\x1b[1;2C", + KeyShfUp: "\x1b[1;2A", + KeyShfDown: "\x1b[1;2B", + KeyCtrlLeft: "\x1b[1;5D", + KeyCtrlRight: "\x1b[1;5C", + KeyCtrlUp: "\x1b[1;5A", + KeyCtrlDown: "\x1b[1;5B", + KeyMetaLeft: "\x1b[1;9D", + KeyMetaRight: "\x1b[1;9C", + KeyMetaUp: "\x1b[1;9A", + KeyMetaDown: "\x1b[1;9B", + KeyAltLeft: "\x1b[1;3D", + KeyAltRight: "\x1b[1;3C", + KeyAltUp: "\x1b[1;3A", + KeyAltDown: "\x1b[1;3B", + KeyAltShfLeft: "\x1b[1;4D", + KeyAltShfRight: "\x1b[1;4C", + KeyAltShfUp: "\x1b[1;4A", + KeyAltShfDown: "\x1b[1;4B", + KeyMetaShfLeft: "\x1b[1;10D", + KeyMetaShfRight: "\x1b[1;10C", + KeyMetaShfUp: "\x1b[1;10A", + KeyMetaShfDown: "\x1b[1;10B", + KeyCtrlShfLeft: "\x1b[1;6D", + KeyCtrlShfRight: "\x1b[1;6C", + KeyCtrlShfUp: "\x1b[1;6A", + KeyCtrlShfDown: "\x1b[1;6B", + KeyShfHome: "\x1b[1;2H", + KeyShfEnd: "\x1b[1;2F", + KeyCtrlHome: "\x1b[1;5H", + KeyCtrlEnd: "\x1b[1;5F", + KeyAltHome: "\x1b[1;9H", + KeyAltEnd: "\x1b[1;9F", + KeyCtrlShfHome: "\x1b[1;6H", + KeyCtrlShfEnd: "\x1b[1;6F", + KeyMetaShfHome: "\x1b[1;10H", + KeyMetaShfEnd: "\x1b[1;10F", + KeyAltShfHome: "\x1b[1;4H", + KeyAltShfEnd: "\x1b[1;4F", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_gnome_256color.go b/vendor/github.com/gdamore/tcell/terminfo/term_gnome_256color.go new file mode 100644 index 00000000..23834898 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_gnome_256color.go @@ -0,0 +1,153 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // GNOME Terminal with xterm 256-colors + AddTerminfo(&Terminfo{ + Name: "gnome-256color", + Columns: 80, + Lines: 24, + Colors: 256, + Bell: "\a", + Clear: "\x1b[H\x1b[2J", + EnterCA: "\x1b7\x1b[?47h", + ExitCA: "\x1b[2J\x1b[?47l\x1b8", + ShowCursor: "\x1b[?25h", + HideCursor: "\x1b[?25l", + AttrOff: "\x1b[0m\x0017", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Reverse: "\x1b[7m", + EnterKeypad: "\x1b[?1h\x1b=", + ExitKeypad: "\x1b[?1l\x1b>", + SetFg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m", + SetBg: "\x1b[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m", + SetFgBg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%<%t4%p2%d%e%p2%{16}%<%t10%p2%{8}%-%d%e48;5;%p2%d%;m", + PadChar: "\x00", + AltChars: "``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~", + EnterAcs: "\x0e", + ExitAcs: "\x0f", + EnableAcs: "\x1b)0", + Mouse: "\x1b[M", + MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1bOA", + KeyDown: "\x1bOB", + KeyRight: "\x1bOC", + KeyLeft: "\x1bOD", + KeyInsert: "\x1b[2~", + KeyDelete: "\x1b[3~", + KeyBackspace: "177", + KeyHome: "\x1bOH", + KeyEnd: "\x1bOF", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1bOP", + KeyF2: "\x1bOQ", + KeyF3: "\x1bOR", + KeyF4: "\x1bOS", + KeyF5: "\x1b[15~", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyF13: "\x1bO1;2P", + KeyF14: "\x1bO1;2Q", + KeyF15: "\x1bO1;2R", + KeyF16: "\x1bO1;2S", + KeyF17: "\x1b[15;2~", + KeyF18: "\x1b[17;2~", + KeyF19: "\x1b[18;2~", + KeyF20: "\x1b[19;2~", + KeyF21: "\x1b[20;2~", + KeyF22: "\x1b[21;2~", + KeyF23: "\x1b[23;2~", + KeyF24: "\x1b[24;2~", + KeyF25: "\x1bO1;5P", + KeyF26: "\x1bO1;5Q", + KeyF27: "\x1bO1;5R", + KeyF28: "\x1bO1;5S", + KeyF29: "\x1b[15;5~", + KeyF30: "\x1b[17;5~", + KeyF31: "\x1b[18;5~", + KeyF32: "\x1b[19;5~", + KeyF33: "\x1b[20;5~", + KeyF34: "\x1b[21;5~", + KeyF35: "\x1b[23;5~", + KeyF36: "\x1b[24;5~", + KeyF37: "\x1bO1;6P", + KeyF38: "\x1bO1;6Q", + KeyF39: "\x1bO1;6R", + KeyF40: "\x1bO1;6S", + KeyF41: "\x1b[15;6~", + KeyF42: "\x1b[17;6~", + KeyF43: "\x1b[18;6~", + KeyF44: "\x1b[19;6~", + KeyF45: "\x1b[20;6~", + KeyF46: "\x1b[21;6~", + KeyF47: "\x1b[23;6~", + KeyF48: "\x1b[24;6~", + KeyF49: "\x1bO1;3P", + KeyF50: "\x1bO1;3Q", + KeyF51: "\x1bO1;3R", + KeyF52: "\x1bO1;3S", + KeyF53: "\x1b[15;3~", + KeyF54: "\x1b[17;3~", + KeyF55: "\x1b[18;3~", + KeyF56: "\x1b[19;3~", + KeyF57: "\x1b[20;3~", + KeyF58: "\x1b[21;3~", + KeyF59: "\x1b[23;3~", + KeyF60: "\x1b[24;3~", + KeyF61: "\x1bO1;4P", + KeyF62: "\x1bO1;4Q", + KeyF63: "\x1bO1;4R", + KeyBacktab: "\x1b[Z", + KeyShfLeft: "\x1b[1;2D", + KeyShfRight: "\x1b[1;2C", + KeyShfUp: "\x1b[1;2A", + KeyShfDown: "\x1b[1;2B", + KeyCtrlLeft: "\x1b[1;5D", + KeyCtrlRight: "\x1b[1;5C", + KeyCtrlUp: "\x1b[1;5A", + KeyCtrlDown: "\x1b[1;5B", + KeyMetaLeft: "\x1b[1;9D", + KeyMetaRight: "\x1b[1;9C", + KeyMetaUp: "\x1b[1;9A", + KeyMetaDown: "\x1b[1;9B", + KeyAltLeft: "\x1b[1;3D", + KeyAltRight: "\x1b[1;3C", + KeyAltUp: "\x1b[1;3A", + KeyAltDown: "\x1b[1;3B", + KeyAltShfLeft: "\x1b[1;4D", + KeyAltShfRight: "\x1b[1;4C", + KeyAltShfUp: "\x1b[1;4A", + KeyAltShfDown: "\x1b[1;4B", + KeyMetaShfLeft: "\x1b[1;10D", + KeyMetaShfRight: "\x1b[1;10C", + KeyMetaShfUp: "\x1b[1;10A", + KeyMetaShfDown: "\x1b[1;10B", + KeyCtrlShfLeft: "\x1b[1;6D", + KeyCtrlShfRight: "\x1b[1;6C", + KeyCtrlShfUp: "\x1b[1;6A", + KeyCtrlShfDown: "\x1b[1;6B", + KeyShfHome: "\x1b[1;2H", + KeyShfEnd: "\x1b[1;2F", + KeyCtrlHome: "\x1b[1;5H", + KeyCtrlEnd: "\x1b[1;5F", + KeyAltHome: "\x1b[1;9H", + KeyAltEnd: "\x1b[1;9F", + KeyCtrlShfHome: "\x1b[1;6H", + KeyCtrlShfEnd: "\x1b[1;6F", + KeyMetaShfHome: "\x1b[1;10H", + KeyMetaShfEnd: "\x1b[1;10F", + KeyAltShfHome: "\x1b[1;4H", + KeyAltShfEnd: "\x1b[1;4F", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_hpterm.go b/vendor/github.com/gdamore/tcell/terminfo/term_hpterm.go new file mode 100644 index 00000000..0fa30bc6 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_hpterm.go @@ -0,0 +1,47 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // hp X11 terminal emulator + AddTerminfo(&Terminfo{ + Name: "hpterm", + Aliases: []string{"X-hpterm"}, + Columns: 80, + Lines: 24, + Bell: "\a", + Clear: "\x1b&a0y0C\x1bJ", + AttrOff: "\x1b&d@", + Underline: "\x1b&dD", + Bold: "\x1b&dB", + Dim: "\x1b&dH", + Reverse: "\x1b&dB", + EnterKeypad: "\x1b&s1A", + ExitKeypad: "\x1b&s0A", + PadChar: "\x00", + EnterAcs: "\x0e", + ExitAcs: "\x0f", + SetCursor: "\x1b&a%p1%dy%p2%dC", + CursorBack1: "\b", + CursorUp1: "\x1bA", + KeyUp: "\x1bA", + KeyDown: "\x1bB", + KeyRight: "\x1bC", + KeyLeft: "\x1bD", + KeyInsert: "\x1bQ", + KeyDelete: "\x1bP", + KeyBackspace: "\b", + KeyHome: "\x1bh", + KeyPgUp: "\x1bV", + KeyPgDn: "\x1bU", + KeyF1: "\x1bp", + KeyF2: "\x1bq", + KeyF3: "\x1br", + KeyF4: "\x1bs", + KeyF5: "\x1bt", + KeyF6: "\x1bu", + KeyF7: "\x1bv", + KeyF8: "\x1bw", + KeyClear: "\x1bJ", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_hz1500.go b/vendor/github.com/gdamore/tcell/terminfo/term_hz1500.go new file mode 100644 index 00000000..8af0eff5 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_hz1500.go @@ -0,0 +1,23 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // hazeltine 1500 + AddTerminfo(&Terminfo{ + Name: "hz1500", + Columns: 80, + Lines: 24, + Bell: "\a", + Clear: "~\x1c", + PadChar: "\x00", + SetCursor: "~\x0021%p2%p2%?%{30}%>%t%' '%+%;%'`'%+%c%p1%'`'%+%c", + CursorBack1: "\b", + CursorUp1: "~\f", + KeyUp: "~\f", + KeyDown: "\n", + KeyRight: "\x10", + KeyLeft: "\b", + KeyHome: "~\x12", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_konsole.go b/vendor/github.com/gdamore/tcell/terminfo/term_konsole.go new file mode 100644 index 00000000..c2689de4 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_konsole.go @@ -0,0 +1,112 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // KDE console window + AddTerminfo(&Terminfo{ + Name: "konsole", + Columns: 80, + Lines: 24, + Colors: 8, + Clear: "\x1b[H\x1b[2J", + EnterCA: "\x1b7\x1b[?47h", + ExitCA: "\x1b[2J\x1b[?47l\x1b8", + ShowCursor: "\x1b[?25h", + HideCursor: "\x1b[?25l", + AttrOff: "\x1b[0m\x0017", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + EnterKeypad: "\x1b[?1h\x1b=", + ExitKeypad: "\x1b[?1l\x1b>", + SetFg: "\x1b[3%p1%dm", + SetBg: "\x1b[4%p1%dm", + SetFgBg: "\x1b[3%p1%d;4%p2%dm", + AltChars: "``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~", + EnterAcs: "\x0e", + ExitAcs: "\x0f", + EnableAcs: "\x1b)0", + Mouse: "\x1b[M", + MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1bOA", + KeyDown: "\x1bOB", + KeyRight: "\x1bOC", + KeyLeft: "\x1bOD", + KeyInsert: "\x1b[2~", + KeyDelete: "\x1b[3~", + KeyBackspace: "177", + KeyHome: "\x1bOH", + KeyEnd: "\x1bOF", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1bOP", + KeyF2: "\x1bOQ", + KeyF3: "\x1bOR", + KeyF4: "\x1bOS", + KeyF5: "\x1b[15~", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyF13: "\x1bO2P", + KeyF14: "\x1bO2Q", + KeyF15: "\x1bO2R", + KeyF16: "\x1bO2S", + KeyF17: "\x1b[15;2~", + KeyF18: "\x1b[17;2~", + KeyF19: "\x1b[18;2~", + KeyF20: "\x1b[19;2~", + KeyF21: "\x1b[20;2~", + KeyF22: "\x1b[21;2~", + KeyF23: "\x1b[23;2~", + KeyF24: "\x1b[24;2~", + KeyF25: "\x1bO5P", + KeyF26: "\x1bO5Q", + KeyF27: "\x1bO5R", + KeyF28: "\x1bO5S", + KeyF29: "\x1b[15;5~", + KeyF30: "\x1b[17;5~", + KeyF31: "\x1b[18;5~", + KeyF32: "\x1b[19;5~", + KeyF33: "\x1b[20;5~", + KeyF34: "\x1b[21;5~", + KeyF35: "\x1b[23;5~", + KeyF36: "\x1b[24;5~", + KeyF37: "\x1bO6P", + KeyF38: "\x1bO6Q", + KeyF39: "\x1bO6R", + KeyF40: "\x1bO6S", + KeyF41: "\x1b[15;6~", + KeyF42: "\x1b[17;6~", + KeyF43: "\x1b[18;6~", + KeyF44: "\x1b[19;6~", + KeyF45: "\x1b[20;6~", + KeyF46: "\x1b[21;6~", + KeyF47: "\x1b[23;6~", + KeyF48: "\x1b[24;6~", + KeyF49: "\x1bO3P", + KeyF50: "\x1bO3Q", + KeyF51: "\x1bO3R", + KeyF52: "\x1bO3S", + KeyF53: "\x1b[15;3~", + KeyF54: "\x1b[17;3~", + KeyF55: "\x1b[18;3~", + KeyF56: "\x1b[19;3~", + KeyF57: "\x1b[20;3~", + KeyF58: "\x1b[21;3~", + KeyF59: "\x1b[23;3~", + KeyF60: "\x1b[24;3~", + KeyF61: "\x1bO4P", + KeyF62: "\x1bO4Q", + KeyF63: "\x1bO4R", + KeyBacktab: "\x1b[Z", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_konsole_256color.go b/vendor/github.com/gdamore/tcell/terminfo/term_konsole_256color.go new file mode 100644 index 00000000..7adc8ea2 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_konsole_256color.go @@ -0,0 +1,112 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // KDE console window with xterm 256-colors + AddTerminfo(&Terminfo{ + Name: "konsole-256color", + Columns: 80, + Lines: 24, + Colors: 256, + Clear: "\x1b[H\x1b[2J", + EnterCA: "\x1b7\x1b[?47h", + ExitCA: "\x1b[2J\x1b[?47l\x1b8", + ShowCursor: "\x1b[?25h", + HideCursor: "\x1b[?25l", + AttrOff: "\x1b[0m\x0017", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + EnterKeypad: "\x1b[?1h\x1b=", + ExitKeypad: "\x1b[?1l\x1b>", + SetFg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m", + SetBg: "\x1b[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m", + SetFgBg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%<%t4%p2%d%e%p2%{16}%<%t10%p2%{8}%-%d%e48;5;%p2%d%;m", + AltChars: "``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~", + EnterAcs: "\x0e", + ExitAcs: "\x0f", + EnableAcs: "\x1b)0", + Mouse: "\x1b[M", + MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1bOA", + KeyDown: "\x1bOB", + KeyRight: "\x1bOC", + KeyLeft: "\x1bOD", + KeyInsert: "\x1b[2~", + KeyDelete: "\x1b[3~", + KeyBackspace: "177", + KeyHome: "\x1bOH", + KeyEnd: "\x1bOF", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1bOP", + KeyF2: "\x1bOQ", + KeyF3: "\x1bOR", + KeyF4: "\x1bOS", + KeyF5: "\x1b[15~", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyF13: "\x1bO2P", + KeyF14: "\x1bO2Q", + KeyF15: "\x1bO2R", + KeyF16: "\x1bO2S", + KeyF17: "\x1b[15;2~", + KeyF18: "\x1b[17;2~", + KeyF19: "\x1b[18;2~", + KeyF20: "\x1b[19;2~", + KeyF21: "\x1b[20;2~", + KeyF22: "\x1b[21;2~", + KeyF23: "\x1b[23;2~", + KeyF24: "\x1b[24;2~", + KeyF25: "\x1bO5P", + KeyF26: "\x1bO5Q", + KeyF27: "\x1bO5R", + KeyF28: "\x1bO5S", + KeyF29: "\x1b[15;5~", + KeyF30: "\x1b[17;5~", + KeyF31: "\x1b[18;5~", + KeyF32: "\x1b[19;5~", + KeyF33: "\x1b[20;5~", + KeyF34: "\x1b[21;5~", + KeyF35: "\x1b[23;5~", + KeyF36: "\x1b[24;5~", + KeyF37: "\x1bO6P", + KeyF38: "\x1bO6Q", + KeyF39: "\x1bO6R", + KeyF40: "\x1bO6S", + KeyF41: "\x1b[15;6~", + KeyF42: "\x1b[17;6~", + KeyF43: "\x1b[18;6~", + KeyF44: "\x1b[19;6~", + KeyF45: "\x1b[20;6~", + KeyF46: "\x1b[21;6~", + KeyF47: "\x1b[23;6~", + KeyF48: "\x1b[24;6~", + KeyF49: "\x1bO3P", + KeyF50: "\x1bO3Q", + KeyF51: "\x1bO3R", + KeyF52: "\x1bO3S", + KeyF53: "\x1b[15;3~", + KeyF54: "\x1b[17;3~", + KeyF55: "\x1b[18;3~", + KeyF56: "\x1b[19;3~", + KeyF57: "\x1b[20;3~", + KeyF58: "\x1b[21;3~", + KeyF59: "\x1b[23;3~", + KeyF60: "\x1b[24;3~", + KeyF61: "\x1bO4P", + KeyF62: "\x1bO4Q", + KeyF63: "\x1bO4R", + KeyBacktab: "\x1b[Z", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_kterm.go b/vendor/github.com/gdamore/tcell/terminfo/term_kterm.go new file mode 100644 index 00000000..a7ec2f10 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_kterm.go @@ -0,0 +1,64 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // kterm kanji terminal emulator (X window system) + AddTerminfo(&Terminfo{ + Name: "kterm", + Columns: 80, + Lines: 24, + Colors: 8, + Bell: "\a", + Clear: "\x1b[H\x1b[2J", + EnterCA: "\x1b7\x1b[?47h", + ExitCA: "\x1b[2J\x1b[?47l\x1b8", + AttrOff: "\x1b[m\x1b(B", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Reverse: "\x1b[7m", + EnterKeypad: "\x1b[?1h\x1b=", + ExitKeypad: "\x1b[?1l\x1b>", + SetFg: "\x1b[3%p1%dm", + SetBg: "\x1b[4%p1%dm", + SetFgBg: "\x1b[3%p1%d;4%p2%dm", + PadChar: "\x00", + AltChars: "``aajjkkllmmnnooppqqrrssttuuvvwwxx~~", + EnterAcs: "\x1b(0", + ExitAcs: "\x1b(B", + Mouse: "\x1b[M", + MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1bOA", + KeyDown: "\x1bOB", + KeyRight: "\x1bOC", + KeyLeft: "\x1bOD", + KeyInsert: "\x1b[2~", + KeyDelete: "\x1b[3~", + KeyBackspace: "\b", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1b[11~", + KeyF2: "\x1b[12~", + KeyF3: "\x1b[13~", + KeyF4: "\x1b[14~", + KeyF5: "\x1b[15~", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyF13: "\x1b[25~", + KeyF14: "\x1b[26~", + KeyF15: "\x1b[28~", + KeyF16: "\x1b[29~", + KeyF17: "\x1b[31~", + KeyF18: "\x1b[32~", + KeyF19: "\x1b[33~", + KeyF20: "\x1b[34~", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_linux.go b/vendor/github.com/gdamore/tcell/terminfo/term_linux.go new file mode 100644 index 00000000..e35a4775 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_linux.go @@ -0,0 +1,65 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // linux console + AddTerminfo(&Terminfo{ + Name: "linux", + Colors: 8, + Bell: "\a", + Clear: "\x1b[H\x1b[J", + ShowCursor: "\x1b[?25h\x1b[?0c", + HideCursor: "\x1b[?25l\x1b[?1c", + AttrOff: "\x1b[0;10m", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Dim: "\x1b[2m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + SetFg: "\x1b[3%p1%dm", + SetBg: "\x1b[4%p1%dm", + SetFgBg: "\x1b[3%p1%d;4%p2%dm", + PadChar: "\x00", + AltChars: "+\x0020,\x0021-\x0030.\x190333`\x0004a261f370g361h260i316j331k277l332m300n305o~p304q304r304s_t303u264v301w302x263y363z362{343|330}234~376", + EnterAcs: "\x1b[11m", + ExitAcs: "\x1b[10m", + Mouse: "\x1b[M", + MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1b[A", + KeyDown: "\x1b[B", + KeyRight: "\x1b[C", + KeyLeft: "\x1b[D", + KeyInsert: "\x1b[2~", + KeyDelete: "\x1b[3~", + KeyBackspace: "177", + KeyHome: "\x1b[1~", + KeyEnd: "\x1b[4~", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1b[[A", + KeyF2: "\x1b[[B", + KeyF3: "\x1b[[C", + KeyF4: "\x1b[[D", + KeyF5: "\x1b[[E", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyF13: "\x1b[25~", + KeyF14: "\x1b[26~", + KeyF15: "\x1b[28~", + KeyF16: "\x1b[29~", + KeyF17: "\x1b[31~", + KeyF18: "\x1b[32~", + KeyF19: "\x1b[33~", + KeyF20: "\x1b[34~", + KeyBacktab: "\x1b[Z", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_pcansi.go b/vendor/github.com/gdamore/tcell/terminfo/term_pcansi.go new file mode 100644 index 00000000..055b3acf --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_pcansi.go @@ -0,0 +1,36 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // ibm-pc terminal programs claiming to be ansi + AddTerminfo(&Terminfo{ + Name: "pcansi", + Columns: 80, + Lines: 24, + Colors: 8, + Bell: "\a", + Clear: "\x1b[H\x1b[J", + AttrOff: "\x1b[0;10m", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + SetFg: "\x1b[3%p1%dm", + SetBg: "\x1b[4%p1%dm", + SetFgBg: "\x1b[3%p1%d;4%p2%dm", + PadChar: "\x00", + AltChars: "+\x0020,\x0021-\x0030.\x190333`\x0004a261f370g361h260j331k277l332m300n305o~p304q304r304s_t303u264v301w302x263y363z362{343|330}234~376", + EnterAcs: "\x1b[12m", + ExitAcs: "\x1b[10m", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\x1b[D", + CursorUp1: "\x1b[A", + KeyUp: "\x1b[A", + KeyDown: "\x1b[B", + KeyRight: "\x1b[C", + KeyLeft: "\x1b[D", + KeyBackspace: "\b", + KeyHome: "\x1b[H", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_rxvt.go b/vendor/github.com/gdamore/tcell/terminfo/term_rxvt.go new file mode 100644 index 00000000..dab1758b --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_rxvt.go @@ -0,0 +1,107 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // rxvt terminal emulator (X Window System) + AddTerminfo(&Terminfo{ + Name: "rxvt", + Columns: 80, + Lines: 24, + Colors: 8, + Bell: "\a", + Clear: "\x1b[H\x1b[2J", + EnterCA: "\x1b7\x1b[?47h", + ExitCA: "\x1b[2J\x1b[?47l\x1b8", + ShowCursor: "\x1b[?25h", + HideCursor: "\x1b[?25l", + AttrOff: "\x1b[m\x0017", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + EnterKeypad: "\x1b=", + ExitKeypad: "\x1b>", + SetFg: "\x1b[3%p1%dm", + SetBg: "\x1b[4%p1%dm", + SetFgBg: "\x1b[3%p1%d;4%p2%dm", + PadChar: "\x00", + AltChars: "``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~", + EnterAcs: "\x0e", + ExitAcs: "\x0f", + EnableAcs: "\x1b(B\x1b)0", + Mouse: "\x1b[M", + MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1b[A", + KeyDown: "\x1b[B", + KeyRight: "\x1b[C", + KeyLeft: "\x1b[D", + KeyInsert: "\x1b[2~", + KeyDelete: "\x1b[3~", + KeyBackspace: "\b", + KeyHome: "\x1b[7~", + KeyEnd: "\x1b[8~", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1b[11~", + KeyF2: "\x1b[12~", + KeyF3: "\x1b[13~", + KeyF4: "\x1b[14~", + KeyF5: "\x1b[15~", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyF13: "\x1b[25~", + KeyF14: "\x1b[26~", + KeyF15: "\x1b[28~", + KeyF16: "\x1b[29~", + KeyF17: "\x1b[31~", + KeyF18: "\x1b[32~", + KeyF19: "\x1b[33~", + KeyF20: "\x1b[34~", + KeyF21: "\x1b[23$", + KeyF22: "\x1b[24$", + KeyF23: "\x1b[11^", + KeyF24: "\x1b[12^", + KeyF25: "\x1b[13^", + KeyF26: "\x1b[14^", + KeyF27: "\x1b[15^", + KeyF28: "\x1b[17^", + KeyF29: "\x1b[18^", + KeyF30: "\x1b[19^", + KeyF31: "\x1b[20^", + KeyF32: "\x1b[21^", + KeyF33: "\x1b[23^", + KeyF34: "\x1b[24^", + KeyF35: "\x1b[25^", + KeyF36: "\x1b[26^", + KeyF37: "\x1b[28^", + KeyF38: "\x1b[29^", + KeyF39: "\x1b[31^", + KeyF40: "\x1b[32^", + KeyF41: "\x1b[33^", + KeyF42: "\x1b[34^", + KeyF43: "\x1b[23@", + KeyF44: "\x1b[24@", + KeyBacktab: "\x1b[Z", + KeyShfLeft: "\x1b[d", + KeyShfRight: "\x1b[c", + KeyShfUp: "\x1b[a", + KeyShfDown: "\x1b[b", + KeyCtrlLeft: "\x1b[Od", + KeyCtrlRight: "\x1b[Oc", + KeyCtrlUp: "\x1b[Oa", + KeyCtrlDown: "\x1b[Ob", + KeyShfHome: "\x1b[7$", + KeyShfEnd: "\x1b[8$", + KeyCtrlHome: "\x1b[7^", + KeyCtrlEnd: "\x1b[8^", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_rxvt_256color.go b/vendor/github.com/gdamore/tcell/terminfo/term_rxvt_256color.go new file mode 100644 index 00000000..5aceb4ee --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_rxvt_256color.go @@ -0,0 +1,107 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // rxvt 2.7.9 with xterm 256-colors + AddTerminfo(&Terminfo{ + Name: "rxvt-256color", + Columns: 80, + Lines: 24, + Colors: 256, + Bell: "\a", + Clear: "\x1b[H\x1b[2J", + EnterCA: "\x1b7\x1b[?47h", + ExitCA: "\x1b[2J\x1b[?47l\x1b8", + ShowCursor: "\x1b[?25h", + HideCursor: "\x1b[?25l", + AttrOff: "\x1b[m\x0017", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + EnterKeypad: "\x1b=", + ExitKeypad: "\x1b>", + SetFg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m", + SetBg: "\x1b[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m", + SetFgBg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%<%t4%p2%d%e%p2%{16}%<%t10%p2%{8}%-%d%e48;5;%p2%d%;m", + PadChar: "\x00", + AltChars: "``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~", + EnterAcs: "\x0e", + ExitAcs: "\x0f", + EnableAcs: "\x1b(B\x1b)0", + Mouse: "\x1b[M", + MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1b[A", + KeyDown: "\x1b[B", + KeyRight: "\x1b[C", + KeyLeft: "\x1b[D", + KeyInsert: "\x1b[2~", + KeyDelete: "\x1b[3~", + KeyBackspace: "\b", + KeyHome: "\x1b[7~", + KeyEnd: "\x1b[8~", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1b[11~", + KeyF2: "\x1b[12~", + KeyF3: "\x1b[13~", + KeyF4: "\x1b[14~", + KeyF5: "\x1b[15~", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyF13: "\x1b[25~", + KeyF14: "\x1b[26~", + KeyF15: "\x1b[28~", + KeyF16: "\x1b[29~", + KeyF17: "\x1b[31~", + KeyF18: "\x1b[32~", + KeyF19: "\x1b[33~", + KeyF20: "\x1b[34~", + KeyF21: "\x1b[23$", + KeyF22: "\x1b[24$", + KeyF23: "\x1b[11^", + KeyF24: "\x1b[12^", + KeyF25: "\x1b[13^", + KeyF26: "\x1b[14^", + KeyF27: "\x1b[15^", + KeyF28: "\x1b[17^", + KeyF29: "\x1b[18^", + KeyF30: "\x1b[19^", + KeyF31: "\x1b[20^", + KeyF32: "\x1b[21^", + KeyF33: "\x1b[23^", + KeyF34: "\x1b[24^", + KeyF35: "\x1b[25^", + KeyF36: "\x1b[26^", + KeyF37: "\x1b[28^", + KeyF38: "\x1b[29^", + KeyF39: "\x1b[31^", + KeyF40: "\x1b[32^", + KeyF41: "\x1b[33^", + KeyF42: "\x1b[34^", + KeyF43: "\x1b[23@", + KeyF44: "\x1b[24@", + KeyBacktab: "\x1b[Z", + KeyShfLeft: "\x1b[d", + KeyShfRight: "\x1b[c", + KeyShfUp: "\x1b[a", + KeyShfDown: "\x1b[b", + KeyCtrlLeft: "\x1b[Od", + KeyCtrlRight: "\x1b[Oc", + KeyCtrlUp: "\x1b[Oa", + KeyCtrlDown: "\x1b[Ob", + KeyShfHome: "\x1b[7$", + KeyShfEnd: "\x1b[8$", + KeyCtrlHome: "\x1b[7^", + KeyCtrlEnd: "\x1b[8^", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_rxvt_unicode.go b/vendor/github.com/gdamore/tcell/terminfo/term_rxvt_unicode.go new file mode 100644 index 00000000..6da67b72 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_rxvt_unicode.go @@ -0,0 +1,81 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // rxvt-unicode terminal (X Window System) + AddTerminfo(&Terminfo{ + Name: "rxvt-unicode", + Columns: 80, + Lines: 24, + Colors: 88, + Bell: "\a", + Clear: "\x1b[H\x1b[2J", + EnterCA: "\x1b[?1049h", + ExitCA: "\x1b[r\x1b[?1049l", + ShowCursor: "\x1b[?12l\x1b[?25h", + HideCursor: "\x1b[?25l", + AttrOff: "\x1b[m\x1b(B", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + EnterKeypad: "\x1b=", + ExitKeypad: "\x1b>", + SetFg: "\x1b[38;5;%p1%dm", + SetBg: "\x1b[48;5;%p1%dm", + SetFgBg: "\x1b[38;5;%p1%d;48;5;%p2%dm", + AltChars: "+C,D-A.B0E``aaffgghFiGjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~", + EnterAcs: "\x1b(0", + ExitAcs: "\x1b(B", + Mouse: "\x1b[M", + MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1b[A", + KeyDown: "\x1b[B", + KeyRight: "\x1b[C", + KeyLeft: "\x1b[D", + KeyInsert: "\x1b[2~", + KeyDelete: "\x1b[3~", + KeyBackspace: "177", + KeyHome: "\x1b[7~", + KeyEnd: "\x1b[8~", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1b[11~", + KeyF2: "\x1b[12~", + KeyF3: "\x1b[13~", + KeyF4: "\x1b[14~", + KeyF5: "\x1b[15~", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyF13: "\x1b[25~", + KeyF14: "\x1b[26~", + KeyF15: "\x1b[28~", + KeyF16: "\x1b[29~", + KeyF17: "\x1b[31~", + KeyF18: "\x1b[32~", + KeyF19: "\x1b[33~", + KeyF20: "\x1b[34~", + KeyBacktab: "\x1b[Z", + KeyShfLeft: "\x1b[d", + KeyShfRight: "\x1b[c", + KeyShfUp: "\x1b[a", + KeyShfDown: "\x1b[b", + KeyCtrlLeft: "\x1b[Od", + KeyCtrlRight: "\x1b[Oc", + KeyCtrlUp: "\x1b[Oa", + KeyCtrlDown: "\x1b[Ob", + KeyShfHome: "\x1b[7$", + KeyShfEnd: "\x1b[8$", + KeyCtrlHome: "\x1b[7^", + KeyCtrlEnd: "\x1b[8^", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_rxvt_unicode_256color.go b/vendor/github.com/gdamore/tcell/terminfo/term_rxvt_unicode_256color.go new file mode 100644 index 00000000..ac87fb96 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_rxvt_unicode_256color.go @@ -0,0 +1,81 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // rxvt-unicode terminal with 256 colors (X Window System) + AddTerminfo(&Terminfo{ + Name: "rxvt-unicode-256color", + Columns: 80, + Lines: 24, + Colors: 256, + Bell: "\a", + Clear: "\x1b[H\x1b[2J", + EnterCA: "\x1b[?1049h", + ExitCA: "\x1b[r\x1b[?1049l", + ShowCursor: "\x1b[?12l\x1b[?25h", + HideCursor: "\x1b[?25l", + AttrOff: "\x1b[m\x1b(B", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + EnterKeypad: "\x1b=", + ExitKeypad: "\x1b>", + SetFg: "\x1b[38;5;%p1%dm", + SetBg: "\x1b[48;5;%p1%dm", + SetFgBg: "\x1b[38;5;%p1%d;48;5;%p2%dm", + AltChars: "+C,D-A.B0E``aaffgghFiGjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~", + EnterAcs: "\x1b(0", + ExitAcs: "\x1b(B", + Mouse: "\x1b[M", + MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1b[A", + KeyDown: "\x1b[B", + KeyRight: "\x1b[C", + KeyLeft: "\x1b[D", + KeyInsert: "\x1b[2~", + KeyDelete: "\x1b[3~", + KeyBackspace: "177", + KeyHome: "\x1b[7~", + KeyEnd: "\x1b[8~", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1b[11~", + KeyF2: "\x1b[12~", + KeyF3: "\x1b[13~", + KeyF4: "\x1b[14~", + KeyF5: "\x1b[15~", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyF13: "\x1b[25~", + KeyF14: "\x1b[26~", + KeyF15: "\x1b[28~", + KeyF16: "\x1b[29~", + KeyF17: "\x1b[31~", + KeyF18: "\x1b[32~", + KeyF19: "\x1b[33~", + KeyF20: "\x1b[34~", + KeyBacktab: "\x1b[Z", + KeyShfLeft: "\x1b[d", + KeyShfRight: "\x1b[c", + KeyShfUp: "\x1b[a", + KeyShfDown: "\x1b[b", + KeyCtrlLeft: "\x1b[Od", + KeyCtrlRight: "\x1b[Oc", + KeyCtrlUp: "\x1b[Oa", + KeyCtrlDown: "\x1b[Ob", + KeyShfHome: "\x1b[7$", + KeyShfEnd: "\x1b[8$", + KeyCtrlHome: "\x1b[7^", + KeyCtrlEnd: "\x1b[8^", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_screen.go b/vendor/github.com/gdamore/tcell/terminfo/term_screen.go new file mode 100644 index 00000000..17b6a0c8 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_screen.go @@ -0,0 +1,63 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // VT 100/ANSI X3.64 virtual terminal + AddTerminfo(&Terminfo{ + Name: "screen", + Columns: 80, + Lines: 24, + Colors: 8, + Bell: "\a", + Clear: "\x1b[H\x1b[J", + EnterCA: "\x1b[?1049h", + ExitCA: "\x1b[?1049l", + ShowCursor: "\x1b[34h\x1b[?25h", + HideCursor: "\x1b[?25l", + AttrOff: "\x1b[m\x0017", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + EnterKeypad: "\x1b[?1h\x1b=", + ExitKeypad: "\x1b[?1l\x1b>", + SetFg: "\x1b[3%p1%dm", + SetBg: "\x1b[4%p1%dm", + SetFgBg: "\x1b[3%p1%d;4%p2%dm", + PadChar: "\x00", + AltChars: "++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~", + EnterAcs: "\x0e", + ExitAcs: "\x0f", + EnableAcs: "\x1b(B\x1b)0", + Mouse: "\x1b[M", + MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1bM", + KeyUp: "\x1bOA", + KeyDown: "\x1bOB", + KeyRight: "\x1bOC", + KeyLeft: "\x1bOD", + KeyInsert: "\x1b[2~", + KeyDelete: "\x1b[3~", + KeyBackspace: "\b", + KeyHome: "\x1b[1~", + KeyEnd: "\x1b[4~", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1bOP", + KeyF2: "\x1bOQ", + KeyF3: "\x1bOR", + KeyF4: "\x1bOS", + KeyF5: "\x1b[15~", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyBacktab: "\x1b[Z", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_screen_256color.go b/vendor/github.com/gdamore/tcell/terminfo/term_screen_256color.go new file mode 100644 index 00000000..fdc2c922 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_screen_256color.go @@ -0,0 +1,63 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // GNU Screen with 256 colors + AddTerminfo(&Terminfo{ + Name: "screen-256color", + Columns: 80, + Lines: 24, + Colors: 256, + Bell: "\a", + Clear: "\x1b[H\x1b[J", + EnterCA: "\x1b[?1049h", + ExitCA: "\x1b[?1049l", + ShowCursor: "\x1b[34h\x1b[?25h", + HideCursor: "\x1b[?25l", + AttrOff: "\x1b[m\x0017", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + EnterKeypad: "\x1b[?1h\x1b=", + ExitKeypad: "\x1b[?1l\x1b>", + SetFg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m", + SetBg: "\x1b[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m", + SetFgBg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%<%t4%p2%d%e%p2%{16}%<%t10%p2%{8}%-%d%e48;5;%p2%d%;m", + PadChar: "\x00", + AltChars: "++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~", + EnterAcs: "\x0e", + ExitAcs: "\x0f", + EnableAcs: "\x1b(B\x1b)0", + Mouse: "\x1b[M", + MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1bM", + KeyUp: "\x1bOA", + KeyDown: "\x1bOB", + KeyRight: "\x1bOC", + KeyLeft: "\x1bOD", + KeyInsert: "\x1b[2~", + KeyDelete: "\x1b[3~", + KeyBackspace: "\b", + KeyHome: "\x1b[1~", + KeyEnd: "\x1b[4~", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1bOP", + KeyF2: "\x1bOQ", + KeyF3: "\x1bOR", + KeyF4: "\x1bOS", + KeyF5: "\x1b[15~", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyBacktab: "\x1b[Z", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_st.go b/vendor/github.com/gdamore/tcell/terminfo/term_st.go new file mode 100644 index 00000000..04500529 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_st.go @@ -0,0 +1,155 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // simpleterm + AddTerminfo(&Terminfo{ + Name: "st", + Columns: 80, + Lines: 24, + Colors: 8, + Bell: "\a", + Clear: "\x1b[H\x1b[2J", + EnterCA: "\x1b[?1049h", + ExitCA: "\x1b[?1049l", + ShowCursor: "\x1b[?12l\x1b[?25h", + HideCursor: "\x1b[?25l", + AttrOff: "\x1b[0m", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Dim: "\x1b[2m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + EnterKeypad: "\x1b[?1h\x1b=", + ExitKeypad: "\x1b[?1l\x1b>", + SetFg: "\x1b[3%p1%dm", + SetBg: "\x1b[4%p1%dm", + SetFgBg: "\x1b[3%p1%d;4%p2%dm", + AltChars: "+C,D-A.B0E``aaffgghFiGjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~", + EnterAcs: "\x1b(0", + ExitAcs: "\x1b(B", + EnableAcs: "\x1b)0", + Mouse: "\x1b[M", + MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1bOA", + KeyDown: "\x1bOB", + KeyRight: "\x1bOC", + KeyLeft: "\x1bOD", + KeyInsert: "\x1b[2~", + KeyDelete: "\x1b[3~", + KeyBackspace: "177", + KeyHome: "\x1b[1~", + KeyEnd: "\x1b[4~", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1bOP", + KeyF2: "\x1bOQ", + KeyF3: "\x1bOR", + KeyF4: "\x1bOS", + KeyF5: "\x1b[15~", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyF13: "\x1b[1;2P", + KeyF14: "\x1b[1;2Q", + KeyF15: "\x1b[1;2R", + KeyF16: "\x1b[1;2S", + KeyF17: "\x1b[15;2~", + KeyF18: "\x1b[17;2~", + KeyF19: "\x1b[18;2~", + KeyF20: "\x1b[19;2~", + KeyF21: "\x1b[20;2~", + KeyF22: "\x1b[21;2~", + KeyF23: "\x1b[23;2~", + KeyF24: "\x1b[24;2~", + KeyF25: "\x1b[1;5P", + KeyF26: "\x1b[1;5Q", + KeyF27: "\x1b[1;5R", + KeyF28: "\x1b[1;5S", + KeyF29: "\x1b[15;5~", + KeyF30: "\x1b[17;5~", + KeyF31: "\x1b[18;5~", + KeyF32: "\x1b[19;5~", + KeyF33: "\x1b[20;5~", + KeyF34: "\x1b[21;5~", + KeyF35: "\x1b[23;5~", + KeyF36: "\x1b[24;5~", + KeyF37: "\x1b[1;6P", + KeyF38: "\x1b[1;6Q", + KeyF39: "\x1b[1;6R", + KeyF40: "\x1b[1;6S", + KeyF41: "\x1b[15;6~", + KeyF42: "\x1b[17;6~", + KeyF43: "\x1b[18;6~", + KeyF44: "\x1b[19;6~", + KeyF45: "\x1b[20;6~", + KeyF46: "\x1b[21;6~", + KeyF47: "\x1b[23;6~", + KeyF48: "\x1b[24;6~", + KeyF49: "\x1b[1;3P", + KeyF50: "\x1b[1;3Q", + KeyF51: "\x1b[1;3R", + KeyF52: "\x1b[1;3S", + KeyF53: "\x1b[15;3~", + KeyF54: "\x1b[17;3~", + KeyF55: "\x1b[18;3~", + KeyF56: "\x1b[19;3~", + KeyF57: "\x1b[20;3~", + KeyF58: "\x1b[21;3~", + KeyF59: "\x1b[23;3~", + KeyF60: "\x1b[24;3~", + KeyF61: "\x1b[1;4P", + KeyF62: "\x1b[1;4Q", + KeyF63: "\x1b[1;4R", + KeyClear: "\x1b[3;5~", + KeyBacktab: "\x1b[Z", + KeyShfLeft: "\x1b[1;2D", + KeyShfRight: "\x1b[1;2C", + KeyShfUp: "\x1b[1;2A", + KeyShfDown: "\x1b[1;2B", + KeyCtrlLeft: "\x1b[1;5D", + KeyCtrlRight: "\x1b[1;5C", + KeyCtrlUp: "\x1b[1;5A", + KeyCtrlDown: "\x1b[1;5B", + KeyMetaLeft: "\x1b[1;9D", + KeyMetaRight: "\x1b[1;9C", + KeyMetaUp: "\x1b[1;9A", + KeyMetaDown: "\x1b[1;9B", + KeyAltLeft: "\x1b[1;3D", + KeyAltRight: "\x1b[1;3C", + KeyAltUp: "\x1b[1;3A", + KeyAltDown: "\x1b[1;3B", + KeyAltShfLeft: "\x1b[1;4D", + KeyAltShfRight: "\x1b[1;4C", + KeyAltShfUp: "\x1b[1;4A", + KeyAltShfDown: "\x1b[1;4B", + KeyMetaShfLeft: "\x1b[1;10D", + KeyMetaShfRight: "\x1b[1;10C", + KeyMetaShfUp: "\x1b[1;10A", + KeyMetaShfDown: "\x1b[1;10B", + KeyCtrlShfLeft: "\x1b[1;6D", + KeyCtrlShfRight: "\x1b[1;6C", + KeyCtrlShfUp: "\x1b[1;6A", + KeyCtrlShfDown: "\x1b[1;6B", + KeyShfHome: "\x1b[1;2H", + KeyShfEnd: "\x1b[1;2F", + KeyCtrlHome: "\x1b[1;5H", + KeyCtrlEnd: "\x1b[1;5F", + KeyAltHome: "\x1b[1;9H", + KeyAltEnd: "\x1b[1;9F", + KeyCtrlShfHome: "\x1b[1;6H", + KeyCtrlShfEnd: "\x1b[1;6F", + KeyMetaShfHome: "\x1b[1;10H", + KeyMetaShfEnd: "\x1b[1;10F", + KeyAltShfHome: "\x1b[1;4H", + KeyAltShfEnd: "\x1b[1;4F", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_st_meta.go b/vendor/github.com/gdamore/tcell/terminfo/term_st_meta.go new file mode 100644 index 00000000..f1cfd792 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_st_meta.go @@ -0,0 +1,155 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // simpleterm with meta key + AddTerminfo(&Terminfo{ + Name: "st-meta", + Columns: 80, + Lines: 24, + Colors: 8, + Bell: "\a", + Clear: "\x1b[H\x1b[2J", + EnterCA: "\x1b[?1049h", + ExitCA: "\x1b[?1049l", + ShowCursor: "\x1b[?12l\x1b[?25h", + HideCursor: "\x1b[?25l", + AttrOff: "\x1b[0m", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Dim: "\x1b[2m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + EnterKeypad: "\x1b[?1h\x1b=", + ExitKeypad: "\x1b[?1l\x1b>", + SetFg: "\x1b[3%p1%dm", + SetBg: "\x1b[4%p1%dm", + SetFgBg: "\x1b[3%p1%d;4%p2%dm", + AltChars: "+C,D-A.B0E``aaffgghFiGjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~", + EnterAcs: "\x1b(0", + ExitAcs: "\x1b(B", + EnableAcs: "\x1b)0", + Mouse: "\x1b[M", + MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1bOA", + KeyDown: "\x1bOB", + KeyRight: "\x1bOC", + KeyLeft: "\x1bOD", + KeyInsert: "\x1b[2~", + KeyDelete: "\x1b[3~", + KeyBackspace: "177", + KeyHome: "\x1b[1~", + KeyEnd: "\x1b[4~", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1bOP", + KeyF2: "\x1bOQ", + KeyF3: "\x1bOR", + KeyF4: "\x1bOS", + KeyF5: "\x1b[15~", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyF13: "\x1b[1;2P", + KeyF14: "\x1b[1;2Q", + KeyF15: "\x1b[1;2R", + KeyF16: "\x1b[1;2S", + KeyF17: "\x1b[15;2~", + KeyF18: "\x1b[17;2~", + KeyF19: "\x1b[18;2~", + KeyF20: "\x1b[19;2~", + KeyF21: "\x1b[20;2~", + KeyF22: "\x1b[21;2~", + KeyF23: "\x1b[23;2~", + KeyF24: "\x1b[24;2~", + KeyF25: "\x1b[1;5P", + KeyF26: "\x1b[1;5Q", + KeyF27: "\x1b[1;5R", + KeyF28: "\x1b[1;5S", + KeyF29: "\x1b[15;5~", + KeyF30: "\x1b[17;5~", + KeyF31: "\x1b[18;5~", + KeyF32: "\x1b[19;5~", + KeyF33: "\x1b[20;5~", + KeyF34: "\x1b[21;5~", + KeyF35: "\x1b[23;5~", + KeyF36: "\x1b[24;5~", + KeyF37: "\x1b[1;6P", + KeyF38: "\x1b[1;6Q", + KeyF39: "\x1b[1;6R", + KeyF40: "\x1b[1;6S", + KeyF41: "\x1b[15;6~", + KeyF42: "\x1b[17;6~", + KeyF43: "\x1b[18;6~", + KeyF44: "\x1b[19;6~", + KeyF45: "\x1b[20;6~", + KeyF46: "\x1b[21;6~", + KeyF47: "\x1b[23;6~", + KeyF48: "\x1b[24;6~", + KeyF49: "\x1b[1;3P", + KeyF50: "\x1b[1;3Q", + KeyF51: "\x1b[1;3R", + KeyF52: "\x1b[1;3S", + KeyF53: "\x1b[15;3~", + KeyF54: "\x1b[17;3~", + KeyF55: "\x1b[18;3~", + KeyF56: "\x1b[19;3~", + KeyF57: "\x1b[20;3~", + KeyF58: "\x1b[21;3~", + KeyF59: "\x1b[23;3~", + KeyF60: "\x1b[24;3~", + KeyF61: "\x1b[1;4P", + KeyF62: "\x1b[1;4Q", + KeyF63: "\x1b[1;4R", + KeyClear: "\x1b[3;5~", + KeyBacktab: "\x1b[Z", + KeyShfLeft: "\x1b[1;2D", + KeyShfRight: "\x1b[1;2C", + KeyShfUp: "\x1b[1;2A", + KeyShfDown: "\x1b[1;2B", + KeyCtrlLeft: "\x1b[1;5D", + KeyCtrlRight: "\x1b[1;5C", + KeyCtrlUp: "\x1b[1;5A", + KeyCtrlDown: "\x1b[1;5B", + KeyMetaLeft: "\x1b[1;9D", + KeyMetaRight: "\x1b[1;9C", + KeyMetaUp: "\x1b[1;9A", + KeyMetaDown: "\x1b[1;9B", + KeyAltLeft: "\x1b[1;3D", + KeyAltRight: "\x1b[1;3C", + KeyAltUp: "\x1b[1;3A", + KeyAltDown: "\x1b[1;3B", + KeyAltShfLeft: "\x1b[1;4D", + KeyAltShfRight: "\x1b[1;4C", + KeyAltShfUp: "\x1b[1;4A", + KeyAltShfDown: "\x1b[1;4B", + KeyMetaShfLeft: "\x1b[1;10D", + KeyMetaShfRight: "\x1b[1;10C", + KeyMetaShfUp: "\x1b[1;10A", + KeyMetaShfDown: "\x1b[1;10B", + KeyCtrlShfLeft: "\x1b[1;6D", + KeyCtrlShfRight: "\x1b[1;6C", + KeyCtrlShfUp: "\x1b[1;6A", + KeyCtrlShfDown: "\x1b[1;6B", + KeyShfHome: "\x1b[1;2H", + KeyShfEnd: "\x1b[1;2F", + KeyCtrlHome: "\x1b[1;5H", + KeyCtrlEnd: "\x1b[1;5F", + KeyAltHome: "\x1b[1;9H", + KeyAltEnd: "\x1b[1;9F", + KeyCtrlShfHome: "\x1b[1;6H", + KeyCtrlShfEnd: "\x1b[1;6F", + KeyMetaShfHome: "\x1b[1;10H", + KeyMetaShfEnd: "\x1b[1;10F", + KeyAltShfHome: "\x1b[1;4H", + KeyAltShfEnd: "\x1b[1;4F", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_st_meta_256color.go b/vendor/github.com/gdamore/tcell/terminfo/term_st_meta_256color.go new file mode 100644 index 00000000..10909993 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_st_meta_256color.go @@ -0,0 +1,155 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // simpleterm with meta key and 256 colors + AddTerminfo(&Terminfo{ + Name: "st-meta-256color", + Columns: 80, + Lines: 24, + Colors: 256, + Bell: "\a", + Clear: "\x1b[H\x1b[2J", + EnterCA: "\x1b[?1049h", + ExitCA: "\x1b[?1049l", + ShowCursor: "\x1b[?12l\x1b[?25h", + HideCursor: "\x1b[?25l", + AttrOff: "\x1b[0m", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Dim: "\x1b[2m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + EnterKeypad: "\x1b[?1h\x1b=", + ExitKeypad: "\x1b[?1l\x1b>", + SetFg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m", + SetBg: "\x1b[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m", + SetFgBg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%<%t4%p2%d%e%p2%{16}%<%t10%p2%{8}%-%d%e48;5;%p2%d%;m", + AltChars: "+C,D-A.B0E``aaffgghFiGjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~", + EnterAcs: "\x1b(0", + ExitAcs: "\x1b(B", + EnableAcs: "\x1b)0", + Mouse: "\x1b[M", + MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1bOA", + KeyDown: "\x1bOB", + KeyRight: "\x1bOC", + KeyLeft: "\x1bOD", + KeyInsert: "\x1b[2~", + KeyDelete: "\x1b[3~", + KeyBackspace: "177", + KeyHome: "\x1b[1~", + KeyEnd: "\x1b[4~", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1bOP", + KeyF2: "\x1bOQ", + KeyF3: "\x1bOR", + KeyF4: "\x1bOS", + KeyF5: "\x1b[15~", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyF13: "\x1b[1;2P", + KeyF14: "\x1b[1;2Q", + KeyF15: "\x1b[1;2R", + KeyF16: "\x1b[1;2S", + KeyF17: "\x1b[15;2~", + KeyF18: "\x1b[17;2~", + KeyF19: "\x1b[18;2~", + KeyF20: "\x1b[19;2~", + KeyF21: "\x1b[20;2~", + KeyF22: "\x1b[21;2~", + KeyF23: "\x1b[23;2~", + KeyF24: "\x1b[24;2~", + KeyF25: "\x1b[1;5P", + KeyF26: "\x1b[1;5Q", + KeyF27: "\x1b[1;5R", + KeyF28: "\x1b[1;5S", + KeyF29: "\x1b[15;5~", + KeyF30: "\x1b[17;5~", + KeyF31: "\x1b[18;5~", + KeyF32: "\x1b[19;5~", + KeyF33: "\x1b[20;5~", + KeyF34: "\x1b[21;5~", + KeyF35: "\x1b[23;5~", + KeyF36: "\x1b[24;5~", + KeyF37: "\x1b[1;6P", + KeyF38: "\x1b[1;6Q", + KeyF39: "\x1b[1;6R", + KeyF40: "\x1b[1;6S", + KeyF41: "\x1b[15;6~", + KeyF42: "\x1b[17;6~", + KeyF43: "\x1b[18;6~", + KeyF44: "\x1b[19;6~", + KeyF45: "\x1b[20;6~", + KeyF46: "\x1b[21;6~", + KeyF47: "\x1b[23;6~", + KeyF48: "\x1b[24;6~", + KeyF49: "\x1b[1;3P", + KeyF50: "\x1b[1;3Q", + KeyF51: "\x1b[1;3R", + KeyF52: "\x1b[1;3S", + KeyF53: "\x1b[15;3~", + KeyF54: "\x1b[17;3~", + KeyF55: "\x1b[18;3~", + KeyF56: "\x1b[19;3~", + KeyF57: "\x1b[20;3~", + KeyF58: "\x1b[21;3~", + KeyF59: "\x1b[23;3~", + KeyF60: "\x1b[24;3~", + KeyF61: "\x1b[1;4P", + KeyF62: "\x1b[1;4Q", + KeyF63: "\x1b[1;4R", + KeyClear: "\x1b[3;5~", + KeyBacktab: "\x1b[Z", + KeyShfLeft: "\x1b[1;2D", + KeyShfRight: "\x1b[1;2C", + KeyShfUp: "\x1b[1;2A", + KeyShfDown: "\x1b[1;2B", + KeyCtrlLeft: "\x1b[1;5D", + KeyCtrlRight: "\x1b[1;5C", + KeyCtrlUp: "\x1b[1;5A", + KeyCtrlDown: "\x1b[1;5B", + KeyMetaLeft: "\x1b[1;9D", + KeyMetaRight: "\x1b[1;9C", + KeyMetaUp: "\x1b[1;9A", + KeyMetaDown: "\x1b[1;9B", + KeyAltLeft: "\x1b[1;3D", + KeyAltRight: "\x1b[1;3C", + KeyAltUp: "\x1b[1;3A", + KeyAltDown: "\x1b[1;3B", + KeyAltShfLeft: "\x1b[1;4D", + KeyAltShfRight: "\x1b[1;4C", + KeyAltShfUp: "\x1b[1;4A", + KeyAltShfDown: "\x1b[1;4B", + KeyMetaShfLeft: "\x1b[1;10D", + KeyMetaShfRight: "\x1b[1;10C", + KeyMetaShfUp: "\x1b[1;10A", + KeyMetaShfDown: "\x1b[1;10B", + KeyCtrlShfLeft: "\x1b[1;6D", + KeyCtrlShfRight: "\x1b[1;6C", + KeyCtrlShfUp: "\x1b[1;6A", + KeyCtrlShfDown: "\x1b[1;6B", + KeyShfHome: "\x1b[1;2H", + KeyShfEnd: "\x1b[1;2F", + KeyCtrlHome: "\x1b[1;5H", + KeyCtrlEnd: "\x1b[1;5F", + KeyAltHome: "\x1b[1;9H", + KeyAltEnd: "\x1b[1;9F", + KeyCtrlShfHome: "\x1b[1;6H", + KeyCtrlShfEnd: "\x1b[1;6F", + KeyMetaShfHome: "\x1b[1;10H", + KeyMetaShfEnd: "\x1b[1;10F", + KeyAltShfHome: "\x1b[1;4H", + KeyAltShfEnd: "\x1b[1;4F", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_st_meta_truecolor.go b/vendor/github.com/gdamore/tcell/terminfo/term_st_meta_truecolor.go new file mode 100644 index 00000000..fc53a97f --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_st_meta_truecolor.go @@ -0,0 +1,158 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // simpleterm with meta key and 256 colors + AddTerminfo(&Terminfo{ + Name: "st-meta-truecolor", + Columns: 80, + Lines: 24, + Colors: 256, + Bell: "\a", + Clear: "\x1b[H\x1b[2J", + EnterCA: "\x1b[?1049h", + ExitCA: "\x1b[?1049l", + ShowCursor: "\x1b[?12l\x1b[?25h", + HideCursor: "\x1b[?25l", + AttrOff: "\x1b[0m", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Dim: "\x1b[2m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + EnterKeypad: "\x1b[?1h\x1b=", + ExitKeypad: "\x1b[?1l\x1b>", + SetFg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m", + SetBg: "\x1b[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m", + SetFgBg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%<%t4%p2%d%e%p2%{16}%<%t10%p2%{8}%-%d%e48;5;%p2%d%;m", + AltChars: "+C,D-A.B0E``aaffgghFiGjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~", + EnterAcs: "\x1b(0", + ExitAcs: "\x1b(B", + EnableAcs: "\x1b)0", + SetFgRGB: "\x1b[38;2;%p1%d;%p2%d;%p3%dm", + SetBgRGB: "\x1b[48;2;%p1%d;%p2%d;%p3%dm", + SetFgBgRGB: "\x1b[38;2;%p1%d;%p2%d;%p3%d;48;2;%p4%d;%p5%d;%p6%dm", + Mouse: "\x1b[M", + MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1bOA", + KeyDown: "\x1bOB", + KeyRight: "\x1bOC", + KeyLeft: "\x1bOD", + KeyInsert: "\x1b[2~", + KeyDelete: "\x1b[3~", + KeyBackspace: "177", + KeyHome: "\x1b[1~", + KeyEnd: "\x1b[4~", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1bOP", + KeyF2: "\x1bOQ", + KeyF3: "\x1bOR", + KeyF4: "\x1bOS", + KeyF5: "\x1b[15~", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyF13: "\x1b[1;2P", + KeyF14: "\x1b[1;2Q", + KeyF15: "\x1b[1;2R", + KeyF16: "\x1b[1;2S", + KeyF17: "\x1b[15;2~", + KeyF18: "\x1b[17;2~", + KeyF19: "\x1b[18;2~", + KeyF20: "\x1b[19;2~", + KeyF21: "\x1b[20;2~", + KeyF22: "\x1b[21;2~", + KeyF23: "\x1b[23;2~", + KeyF24: "\x1b[24;2~", + KeyF25: "\x1b[1;5P", + KeyF26: "\x1b[1;5Q", + KeyF27: "\x1b[1;5R", + KeyF28: "\x1b[1;5S", + KeyF29: "\x1b[15;5~", + KeyF30: "\x1b[17;5~", + KeyF31: "\x1b[18;5~", + KeyF32: "\x1b[19;5~", + KeyF33: "\x1b[20;5~", + KeyF34: "\x1b[21;5~", + KeyF35: "\x1b[23;5~", + KeyF36: "\x1b[24;5~", + KeyF37: "\x1b[1;6P", + KeyF38: "\x1b[1;6Q", + KeyF39: "\x1b[1;6R", + KeyF40: "\x1b[1;6S", + KeyF41: "\x1b[15;6~", + KeyF42: "\x1b[17;6~", + KeyF43: "\x1b[18;6~", + KeyF44: "\x1b[19;6~", + KeyF45: "\x1b[20;6~", + KeyF46: "\x1b[21;6~", + KeyF47: "\x1b[23;6~", + KeyF48: "\x1b[24;6~", + KeyF49: "\x1b[1;3P", + KeyF50: "\x1b[1;3Q", + KeyF51: "\x1b[1;3R", + KeyF52: "\x1b[1;3S", + KeyF53: "\x1b[15;3~", + KeyF54: "\x1b[17;3~", + KeyF55: "\x1b[18;3~", + KeyF56: "\x1b[19;3~", + KeyF57: "\x1b[20;3~", + KeyF58: "\x1b[21;3~", + KeyF59: "\x1b[23;3~", + KeyF60: "\x1b[24;3~", + KeyF61: "\x1b[1;4P", + KeyF62: "\x1b[1;4Q", + KeyF63: "\x1b[1;4R", + KeyClear: "\x1b[3;5~", + KeyBacktab: "\x1b[Z", + KeyShfLeft: "\x1b[1;2D", + KeyShfRight: "\x1b[1;2C", + KeyShfUp: "\x1b[1;2A", + KeyShfDown: "\x1b[1;2B", + KeyCtrlLeft: "\x1b[1;5D", + KeyCtrlRight: "\x1b[1;5C", + KeyCtrlUp: "\x1b[1;5A", + KeyCtrlDown: "\x1b[1;5B", + KeyMetaLeft: "\x1b[1;9D", + KeyMetaRight: "\x1b[1;9C", + KeyMetaUp: "\x1b[1;9A", + KeyMetaDown: "\x1b[1;9B", + KeyAltLeft: "\x1b[1;3D", + KeyAltRight: "\x1b[1;3C", + KeyAltUp: "\x1b[1;3A", + KeyAltDown: "\x1b[1;3B", + KeyAltShfLeft: "\x1b[1;4D", + KeyAltShfRight: "\x1b[1;4C", + KeyAltShfUp: "\x1b[1;4A", + KeyAltShfDown: "\x1b[1;4B", + KeyMetaShfLeft: "\x1b[1;10D", + KeyMetaShfRight: "\x1b[1;10C", + KeyMetaShfUp: "\x1b[1;10A", + KeyMetaShfDown: "\x1b[1;10B", + KeyCtrlShfLeft: "\x1b[1;6D", + KeyCtrlShfRight: "\x1b[1;6C", + KeyCtrlShfUp: "\x1b[1;6A", + KeyCtrlShfDown: "\x1b[1;6B", + KeyShfHome: "\x1b[1;2H", + KeyShfEnd: "\x1b[1;2F", + KeyCtrlHome: "\x1b[1;5H", + KeyCtrlEnd: "\x1b[1;5F", + KeyAltHome: "\x1b[1;9H", + KeyAltEnd: "\x1b[1;9F", + KeyCtrlShfHome: "\x1b[1;6H", + KeyCtrlShfEnd: "\x1b[1;6F", + KeyMetaShfHome: "\x1b[1;10H", + KeyMetaShfEnd: "\x1b[1;10F", + KeyAltShfHome: "\x1b[1;4H", + KeyAltShfEnd: "\x1b[1;4F", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_st_truecolor.go b/vendor/github.com/gdamore/tcell/terminfo/term_st_truecolor.go new file mode 100644 index 00000000..006cd1c9 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_st_truecolor.go @@ -0,0 +1,158 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // simpleterm with 256 colors + AddTerminfo(&Terminfo{ + Name: "st-truecolor", + Columns: 80, + Lines: 24, + Colors: 256, + Bell: "\a", + Clear: "\x1b[H\x1b[2J", + EnterCA: "\x1b[?1049h", + ExitCA: "\x1b[?1049l", + ShowCursor: "\x1b[?12l\x1b[?25h", + HideCursor: "\x1b[?25l", + AttrOff: "\x1b[0m", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Dim: "\x1b[2m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + EnterKeypad: "\x1b[?1h\x1b=", + ExitKeypad: "\x1b[?1l\x1b>", + SetFg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m", + SetBg: "\x1b[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m", + SetFgBg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%<%t4%p2%d%e%p2%{16}%<%t10%p2%{8}%-%d%e48;5;%p2%d%;m", + AltChars: "+C,D-A.B0E``aaffgghFiGjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~", + EnterAcs: "\x1b(0", + ExitAcs: "\x1b(B", + EnableAcs: "\x1b)0", + SetFgRGB: "\x1b[38;2;%p1%d;%p2%d;%p3%dm", + SetBgRGB: "\x1b[48;2;%p1%d;%p2%d;%p3%dm", + SetFgBgRGB: "\x1b[38;2;%p1%d;%p2%d;%p3%d;48;2;%p4%d;%p5%d;%p6%dm", + Mouse: "\x1b[M", + MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1bOA", + KeyDown: "\x1bOB", + KeyRight: "\x1bOC", + KeyLeft: "\x1bOD", + KeyInsert: "\x1b[2~", + KeyDelete: "\x1b[3~", + KeyBackspace: "177", + KeyHome: "\x1b[1~", + KeyEnd: "\x1b[4~", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1bOP", + KeyF2: "\x1bOQ", + KeyF3: "\x1bOR", + KeyF4: "\x1bOS", + KeyF5: "\x1b[15~", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyF13: "\x1b[1;2P", + KeyF14: "\x1b[1;2Q", + KeyF15: "\x1b[1;2R", + KeyF16: "\x1b[1;2S", + KeyF17: "\x1b[15;2~", + KeyF18: "\x1b[17;2~", + KeyF19: "\x1b[18;2~", + KeyF20: "\x1b[19;2~", + KeyF21: "\x1b[20;2~", + KeyF22: "\x1b[21;2~", + KeyF23: "\x1b[23;2~", + KeyF24: "\x1b[24;2~", + KeyF25: "\x1b[1;5P", + KeyF26: "\x1b[1;5Q", + KeyF27: "\x1b[1;5R", + KeyF28: "\x1b[1;5S", + KeyF29: "\x1b[15;5~", + KeyF30: "\x1b[17;5~", + KeyF31: "\x1b[18;5~", + KeyF32: "\x1b[19;5~", + KeyF33: "\x1b[20;5~", + KeyF34: "\x1b[21;5~", + KeyF35: "\x1b[23;5~", + KeyF36: "\x1b[24;5~", + KeyF37: "\x1b[1;6P", + KeyF38: "\x1b[1;6Q", + KeyF39: "\x1b[1;6R", + KeyF40: "\x1b[1;6S", + KeyF41: "\x1b[15;6~", + KeyF42: "\x1b[17;6~", + KeyF43: "\x1b[18;6~", + KeyF44: "\x1b[19;6~", + KeyF45: "\x1b[20;6~", + KeyF46: "\x1b[21;6~", + KeyF47: "\x1b[23;6~", + KeyF48: "\x1b[24;6~", + KeyF49: "\x1b[1;3P", + KeyF50: "\x1b[1;3Q", + KeyF51: "\x1b[1;3R", + KeyF52: "\x1b[1;3S", + KeyF53: "\x1b[15;3~", + KeyF54: "\x1b[17;3~", + KeyF55: "\x1b[18;3~", + KeyF56: "\x1b[19;3~", + KeyF57: "\x1b[20;3~", + KeyF58: "\x1b[21;3~", + KeyF59: "\x1b[23;3~", + KeyF60: "\x1b[24;3~", + KeyF61: "\x1b[1;4P", + KeyF62: "\x1b[1;4Q", + KeyF63: "\x1b[1;4R", + KeyClear: "\x1b[3;5~", + KeyBacktab: "\x1b[Z", + KeyShfLeft: "\x1b[1;2D", + KeyShfRight: "\x1b[1;2C", + KeyShfUp: "\x1b[1;2A", + KeyShfDown: "\x1b[1;2B", + KeyCtrlLeft: "\x1b[1;5D", + KeyCtrlRight: "\x1b[1;5C", + KeyCtrlUp: "\x1b[1;5A", + KeyCtrlDown: "\x1b[1;5B", + KeyMetaLeft: "\x1b[1;9D", + KeyMetaRight: "\x1b[1;9C", + KeyMetaUp: "\x1b[1;9A", + KeyMetaDown: "\x1b[1;9B", + KeyAltLeft: "\x1b[1;3D", + KeyAltRight: "\x1b[1;3C", + KeyAltUp: "\x1b[1;3A", + KeyAltDown: "\x1b[1;3B", + KeyAltShfLeft: "\x1b[1;4D", + KeyAltShfRight: "\x1b[1;4C", + KeyAltShfUp: "\x1b[1;4A", + KeyAltShfDown: "\x1b[1;4B", + KeyMetaShfLeft: "\x1b[1;10D", + KeyMetaShfRight: "\x1b[1;10C", + KeyMetaShfUp: "\x1b[1;10A", + KeyMetaShfDown: "\x1b[1;10B", + KeyCtrlShfLeft: "\x1b[1;6D", + KeyCtrlShfRight: "\x1b[1;6C", + KeyCtrlShfUp: "\x1b[1;6A", + KeyCtrlShfDown: "\x1b[1;6B", + KeyShfHome: "\x1b[1;2H", + KeyShfEnd: "\x1b[1;2F", + KeyCtrlHome: "\x1b[1;5H", + KeyCtrlEnd: "\x1b[1;5F", + KeyAltHome: "\x1b[1;9H", + KeyAltEnd: "\x1b[1;9F", + KeyCtrlShfHome: "\x1b[1;6H", + KeyCtrlShfEnd: "\x1b[1;6F", + KeyMetaShfHome: "\x1b[1;10H", + KeyMetaShfEnd: "\x1b[1;10F", + KeyAltShfHome: "\x1b[1;4H", + KeyAltShfEnd: "\x1b[1;4F", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_sun.go b/vendor/github.com/gdamore/tcell/terminfo/term_sun.go new file mode 100644 index 00000000..5c0eaa49 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_sun.go @@ -0,0 +1,43 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // Sun Microsystems Inc. workstation console + AddTerminfo(&Terminfo{ + Name: "sun", + Aliases: []string{"sun1", "sun2"}, + Columns: 80, + Lines: 34, + Bell: "\a", + Clear: "\f", + AttrOff: "\x1b[m", + Reverse: "\x1b[7m", + PadChar: "\x00", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1b[A", + KeyDown: "\x1b[B", + KeyRight: "\x1b[C", + KeyLeft: "\x1b[D", + KeyDelete: "177", + KeyBackspace: "\b", + KeyHome: "\x1b[214z", + KeyEnd: "\x1b[220z", + KeyPgUp: "\x1b[216z", + KeyPgDn: "\x1b[222z", + KeyF1: "\x1b[224z", + KeyF2: "\x1b[225z", + KeyF3: "\x1b[226z", + KeyF4: "\x1b[227z", + KeyF5: "\x1b[228z", + KeyF6: "\x1b[229z", + KeyF7: "\x1b[230z", + KeyF8: "\x1b[231z", + KeyF9: "\x1b[232z", + KeyF10: "\x1b[233z", + KeyF11: "\x1b[234z", + KeyF12: "\x1b[235z", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_sun_color.go b/vendor/github.com/gdamore/tcell/terminfo/term_sun_color.go new file mode 100644 index 00000000..c5dd6ecc --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_sun_color.go @@ -0,0 +1,46 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // Sun Microsystems Workstation console with color support (IA systems) + AddTerminfo(&Terminfo{ + Name: "sun-color", + Columns: 80, + Lines: 34, + Colors: 8, + Bell: "\a", + Clear: "\f", + AttrOff: "\x1b[m", + Reverse: "\x1b[7m", + SetFg: "\x1b[3%p1%dm", + SetBg: "\x1b[4%p1%dm", + SetFgBg: "\x1b[3%p1%d;4%p2%dm", + PadChar: "\x00", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1b[A", + KeyDown: "\x1b[B", + KeyRight: "\x1b[C", + KeyLeft: "\x1b[D", + KeyDelete: "177", + KeyBackspace: "\b", + KeyHome: "\x1b[214z", + KeyEnd: "\x1b[220z", + KeyPgUp: "\x1b[216z", + KeyPgDn: "\x1b[222z", + KeyF1: "\x1b[224z", + KeyF2: "\x1b[225z", + KeyF3: "\x1b[226z", + KeyF4: "\x1b[227z", + KeyF5: "\x1b[228z", + KeyF6: "\x1b[229z", + KeyF7: "\x1b[230z", + KeyF8: "\x1b[231z", + KeyF9: "\x1b[232z", + KeyF10: "\x1b[233z", + KeyF11: "\x1b[234z", + KeyF12: "\x1b[235z", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_tvi910.go b/vendor/github.com/gdamore/tcell/terminfo/term_tvi910.go new file mode 100644 index 00000000..03b4bf98 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_tvi910.go @@ -0,0 +1,36 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // televideo model 910 + AddTerminfo(&Terminfo{ + Name: "tvi910", + Columns: 80, + Lines: 24, + Bell: "\a", + Clear: "\x1a", + AttrOff: "\x1bG0", + Underline: "\x1bG8", + Reverse: "\x1bG4", + PadChar: "\x00", + SetCursor: "\x1b=%p1%' '%+%c%p2%' '%+%c", + CursorBack1: "\b", + CursorUp1: "\v", + KeyUp: "\v", + KeyDown: "\n", + KeyRight: "\f", + KeyLeft: "\b", + KeyBackspace: "\b", + KeyHome: "\x1e", + KeyF1: "\x01@\r", + KeyF2: "\x01A\r", + KeyF3: "\x01B\r", + KeyF4: "\x01C\r", + KeyF5: "\x01D\r", + KeyF6: "\x01E\r", + KeyF7: "\x01F\r", + KeyF8: "\x01G\r", + KeyF9: "\x01H\r", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_tvi912.go b/vendor/github.com/gdamore/tcell/terminfo/term_tvi912.go new file mode 100644 index 00000000..a6eeb8f7 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_tvi912.go @@ -0,0 +1,35 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // old televideo 912/914/920 + AddTerminfo(&Terminfo{ + Name: "tvi912", + Aliases: []string{"tvi914", "tvi920"}, + Columns: 80, + Lines: 24, + Bell: "\a", + Clear: "\x1a", + Underline: "\x1bl", + PadChar: "\x00", + SetCursor: "\x1b=%p1%' '%+%c%p2%' '%+%c", + CursorBack1: "\b", + CursorUp1: "\v", + KeyUp: "\v", + KeyDown: "\n", + KeyRight: "\f", + KeyLeft: "\b", + KeyBackspace: "\b", + KeyHome: "\x1e", + KeyF1: "\x01@\r", + KeyF2: "\x01A\r", + KeyF3: "\x01B\r", + KeyF4: "\x01C\r", + KeyF5: "\x01D\r", + KeyF6: "\x01E\r", + KeyF7: "\x01F\r", + KeyF8: "\x01G\r", + KeyF9: "\x01H\r", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_tvi921.go b/vendor/github.com/gdamore/tcell/terminfo/term_tvi921.go new file mode 100644 index 00000000..10860cfa --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_tvi921.go @@ -0,0 +1,31 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // televideo model 921 with sysline same as page & real vi function + AddTerminfo(&Terminfo{ + Name: "tvi921", + Columns: 80, + Lines: 24, + Clear: "\x1a", + ShowCursor: "\x1b.3", + AttrOff: "\x1bG0", + Underline: "\x1bG8", + Reverse: "\x1bG4", + PadChar: "\x00", + EnterAcs: "\x1b$", + ExitAcs: "\x1b%%", + SetCursor: "\x1b=%p1%' '%+%c%p2%' '%+%c$<3/>", + CursorBack1: "\b", + CursorUp1: "\v", + KeyUp: "\v", + KeyDown: "\x16", + KeyRight: "\f", + KeyLeft: "\b", + KeyInsert: "\x1bQ", + KeyDelete: "\x1bW", + KeyBackspace: "\b", + KeyClear: "\x1a", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_tvi925.go b/vendor/github.com/gdamore/tcell/terminfo/term_tvi925.go new file mode 100644 index 00000000..d678ac03 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_tvi925.go @@ -0,0 +1,40 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // televideo 925 + AddTerminfo(&Terminfo{ + Name: "tvi925", + Columns: 80, + Lines: 24, + Bell: "\a", + Clear: "\x1a", + ShowCursor: "\x1b.4", + AttrOff: "\x1bG0", + Underline: "\x1bG8", + Reverse: "\x1bG4", + PadChar: "\x00", + SetCursor: "\x1b=%p1%' '%+%c%p2%' '%+%c", + CursorBack1: "\b", + CursorUp1: "\v", + KeyUp: "\v", + KeyDown: "\x16", + KeyRight: "\f", + KeyLeft: "\b", + KeyInsert: "\x1bQ", + KeyDelete: "\x1bW", + KeyBackspace: "\b", + KeyHome: "\x1e", + KeyF1: "\x01@\r", + KeyF2: "\x01A\r", + KeyF3: "\x01B\r", + KeyF4: "\x01C\r", + KeyF5: "\x01D\r", + KeyF6: "\x01E\r", + KeyF7: "\x01F\r", + KeyF8: "\x01G\r", + KeyF9: "\x01H\r", + KeyClear: "\x1a", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_tvi950.go b/vendor/github.com/gdamore/tcell/terminfo/term_tvi950.go new file mode 100644 index 00000000..b8222dc1 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_tvi950.go @@ -0,0 +1,43 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // televideo 950 + AddTerminfo(&Terminfo{ + Name: "tvi950", + Columns: 80, + Lines: 24, + Bell: "\a", + Clear: "\x1b*", + AttrOff: "\x1bG0", + Underline: "\x1bG8", + Reverse: "\x1bG4", + PadChar: "\x00", + AltChars: "b\x0011c\x0014d\re\ni\x0013", + EnterAcs: "\x15", + ExitAcs: "\x18", + SetCursor: "\x1b=%p1%' '%+%c%p2%' '%+%c", + CursorBack1: "\b", + CursorUp1: "\v", + KeyUp: "\v", + KeyDown: "\x16", + KeyRight: "\f", + KeyLeft: "\b", + KeyInsert: "\x1bQ", + KeyDelete: "\x1bW", + KeyBackspace: "\b", + KeyHome: "\x1e", + KeyF1: "\x01@\r", + KeyF2: "\x01A\r", + KeyF3: "\x01B\r", + KeyF4: "\x01C\r", + KeyF5: "\x01D\r", + KeyF6: "\x01E\r", + KeyF7: "\x01F\r", + KeyF8: "\x01G\r", + KeyF9: "\x01H\r", + KeyClear: "\x1b*", + KeyBacktab: "\x1bI", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_tvi970.go b/vendor/github.com/gdamore/tcell/terminfo/term_tvi970.go new file mode 100644 index 00000000..ef9166ee --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_tvi970.go @@ -0,0 +1,37 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // televideo 970 + AddTerminfo(&Terminfo{ + Name: "tvi970", + Columns: 80, + Lines: 24, + Clear: "\x1b[H\x1b[2J", + EnterCA: "\x1b[?20l\x1b[?7h\x1b[1Q", + AttrOff: "\x1b[m", + Underline: "\x1b[4m", + PadChar: "\x00", + EnterAcs: "\x1b(B", + ExitAcs: "\x1b(B", + SetCursor: "\x1b[%i%p1%d;%p2%df", + CursorBack1: "\b", + CursorUp1: "\x1bM", + KeyUp: "\x1b[A", + KeyDown: "\x1b[B", + KeyRight: "\x1b[C", + KeyLeft: "\x1b[D", + KeyBackspace: "\b", + KeyHome: "\x1b[H", + KeyF1: "\x1b?a", + KeyF2: "\x1b?b", + KeyF3: "\x1b?c", + KeyF4: "\x1b?d", + KeyF5: "\x1b?e", + KeyF6: "\x1b?f", + KeyF7: "\x1b?g", + KeyF8: "\x1b?h", + KeyF9: "\x1b?i", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_vt100.go b/vendor/github.com/gdamore/tcell/terminfo/term_vt100.go new file mode 100644 index 00000000..47c4996b --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_vt100.go @@ -0,0 +1,45 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // dec vt100 (w/advanced video) + AddTerminfo(&Terminfo{ + Name: "vt100", + Aliases: []string{"vt100-am"}, + Columns: 80, + Lines: 24, + Bell: "\a", + Clear: "\x1b[H\x1b[J$<50>", + AttrOff: "\x1b[m\x0017$<2>", + Underline: "\x1b[4m$<2>", + Bold: "\x1b[1m$<2>", + Blink: "\x1b[5m$<2>", + Reverse: "\x1b[7m$<2>", + EnterKeypad: "\x1b[?1h\x1b=", + ExitKeypad: "\x1b[?1l\x1b>", + PadChar: "\x00", + AltChars: "``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~", + EnterAcs: "\x0e", + ExitAcs: "\x0f", + EnableAcs: "\x1b(B\x1b)0", + SetCursor: "\x1b[%i%p1%d;%p2%dH$<5>", + CursorBack1: "\b", + CursorUp1: "\x1b[A$<2>", + KeyUp: "\x1bOA", + KeyDown: "\x1bOB", + KeyRight: "\x1bOC", + KeyLeft: "\x1bOD", + KeyBackspace: "\b", + KeyF1: "\x1bOP", + KeyF2: "\x1bOQ", + KeyF3: "\x1bOR", + KeyF4: "\x1bOS", + KeyF5: "\x1bOt", + KeyF6: "\x1bOu", + KeyF7: "\x1bOv", + KeyF8: "\x1bOl", + KeyF9: "\x1bOw", + KeyF10: "\x1bOx", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_vt102.go b/vendor/github.com/gdamore/tcell/terminfo/term_vt102.go new file mode 100644 index 00000000..0199eb61 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_vt102.go @@ -0,0 +1,44 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // dec vt102 + AddTerminfo(&Terminfo{ + Name: "vt102", + Columns: 80, + Lines: 24, + Bell: "\a", + Clear: "\x1b[H\x1b[J$<50>", + AttrOff: "\x1b[m\x0017$<2>", + Underline: "\x1b[4m$<2>", + Bold: "\x1b[1m$<2>", + Blink: "\x1b[5m$<2>", + Reverse: "\x1b[7m$<2>", + EnterKeypad: "\x1b[?1h\x1b=", + ExitKeypad: "\x1b[?1l\x1b>", + PadChar: "\x00", + AltChars: "``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~", + EnterAcs: "\x0e", + ExitAcs: "\x0f", + EnableAcs: "\x1b(B\x1b)0", + SetCursor: "\x1b[%i%p1%d;%p2%dH$<5>", + CursorBack1: "\b", + CursorUp1: "\x1b[A$<2>", + KeyUp: "\x1bOA", + KeyDown: "\x1bOB", + KeyRight: "\x1bOC", + KeyLeft: "\x1bOD", + KeyBackspace: "\b", + KeyF1: "\x1bOP", + KeyF2: "\x1bOQ", + KeyF3: "\x1bOR", + KeyF4: "\x1bOS", + KeyF5: "\x1bOt", + KeyF6: "\x1bOu", + KeyF7: "\x1bOv", + KeyF8: "\x1bOl", + KeyF9: "\x1bOw", + KeyF10: "\x1bOx", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_vt220.go b/vendor/github.com/gdamore/tcell/terminfo/term_vt220.go new file mode 100644 index 00000000..a0a2b77a --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_vt220.go @@ -0,0 +1,54 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // dec vt220 + AddTerminfo(&Terminfo{ + Name: "vt220", + Aliases: []string{"vt200"}, + Columns: 80, + Lines: 24, + Bell: "\a", + Clear: "\x1b[H\x1b[J", + AttrOff: "\x1b[m\x1b(B", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + PadChar: "\x00", + AltChars: "``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~", + EnterAcs: "\x1b(0$<2>", + ExitAcs: "\x1b(B$<4>", + EnableAcs: "\x1b)0", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1b[A", + KeyDown: "\x1b[B", + KeyRight: "\x1b[C", + KeyLeft: "\x1b[D", + KeyInsert: "\x1b[2~", + KeyBackspace: "\b", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1bOP", + KeyF2: "\x1bOQ", + KeyF3: "\x1bOR", + KeyF4: "\x1bOS", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyF13: "\x1b[25~", + KeyF14: "\x1b[26~", + KeyF17: "\x1b[31~", + KeyF18: "\x1b[32~", + KeyF19: "\x1b[33~", + KeyF20: "\x1b[34~", + KeyHelp: "\x1b[28~", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_vt320.go b/vendor/github.com/gdamore/tcell/terminfo/term_vt320.go new file mode 100644 index 00000000..cb4da0ae --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_vt320.go @@ -0,0 +1,60 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // dec vt320 7 bit terminal + AddTerminfo(&Terminfo{ + Name: "vt320", + Aliases: []string{"vt300"}, + Columns: 80, + Lines: 24, + Bell: "\a", + Clear: "\x1b[H\x1b[2J", + ShowCursor: "\x1b[?25h", + HideCursor: "\x1b[?25l", + AttrOff: "\x1b[m\x1b(B", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + EnterKeypad: "\x1b[?1h\x1b=", + ExitKeypad: "\x1b[?1l\x1b>", + PadChar: "\x00", + AltChars: "``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~", + EnterAcs: "\x1b(0", + ExitAcs: "\x1b(B", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1bOA", + KeyDown: "\x1bOB", + KeyRight: "\x1bOC", + KeyLeft: "\x1bOD", + KeyInsert: "\x1b[2~", + KeyDelete: "\x1b[3~", + KeyBackspace: "177", + KeyHome: "\x1b[1~", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1bOP", + KeyF2: "\x1bOQ", + KeyF3: "\x1bOR", + KeyF4: "\x1bOS", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyF13: "\x1b[25~", + KeyF14: "\x1b[26~", + KeyF15: "\x1b[28~", + KeyF16: "\x1b[29~", + KeyF17: "\x1b[31~", + KeyF18: "\x1b[32~", + KeyF19: "\x1b[33~", + KeyF20: "\x1b[34~", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_vt400.go b/vendor/github.com/gdamore/tcell/terminfo/term_vt400.go new file mode 100644 index 00000000..2a7cadad --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_vt400.go @@ -0,0 +1,43 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // dec vt400 24x80 column autowrap + AddTerminfo(&Terminfo{ + Name: "vt400", + Aliases: []string{"vt400-24", "dec-vt400"}, + Columns: 80, + Lines: 24, + Clear: "\x1b[H\x1b[J$<10/>", + ShowCursor: "\x1b[?25h", + HideCursor: "\x1b[?25l", + AttrOff: "\x1b[m\x1b(B", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + EnterKeypad: "\x1b[?1h\x1b=", + ExitKeypad: "\x1b[?1l\x1b>", + PadChar: "\x00", + AltChars: "``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~", + EnterAcs: "\x1b(0", + ExitAcs: "\x1b(B", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1bOA", + KeyDown: "\x1bOB", + KeyRight: "\x1bOC", + KeyLeft: "\x1bOD", + KeyBackspace: "\b", + KeyF1: "\x1bOP", + KeyF2: "\x1bOQ", + KeyF3: "\x1bOR", + KeyF4: "\x1bOS", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_vt420.go b/vendor/github.com/gdamore/tcell/terminfo/term_vt420.go new file mode 100644 index 00000000..fbccd1f3 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_vt420.go @@ -0,0 +1,47 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // DEC VT420 + AddTerminfo(&Terminfo{ + Name: "vt420", + Columns: 80, + Lines: 24, + Bell: "\a", + Clear: "\x1b[H\x1b[2J$<50>", + AttrOff: "\x1b[m$<2>", + Underline: "\x1b[4m", + Bold: "\x1b[1m$<2>", + Blink: "\x1b[5m$<2>", + Reverse: "\x1b[7m$<2>", + EnterKeypad: "\x1b=", + ExitKeypad: "\x1b>", + PadChar: "\x00", + AltChars: "``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~", + EnterAcs: "\x1b(0$<2>", + ExitAcs: "\x1b(B$<4>", + SetCursor: "\x1b[%i%p1%d;%p2%dH$<10>", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1b[A", + KeyDown: "\x1b[B", + KeyRight: "\x1b[C", + KeyLeft: "\x1b[D", + KeyInsert: "\x1b[2~", + KeyDelete: "\x1b[3~", + KeyBackspace: "\b", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1bOP", + KeyF2: "\x1bOQ", + KeyF3: "\x1bOR", + KeyF4: "\x1bOS", + KeyF5: "\x1b[17~", + KeyF6: "\x1b[18~", + KeyF7: "\x1b[19~", + KeyF8: "\x1b[20~", + KeyF9: "\x1b[21~", + KeyF10: "\x1b[29~", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_vt52.go b/vendor/github.com/gdamore/tcell/terminfo/term_vt52.go new file mode 100644 index 00000000..a98d0fd3 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_vt52.go @@ -0,0 +1,26 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // dec vt52 + AddTerminfo(&Terminfo{ + Name: "vt52", + Columns: 80, + Lines: 24, + Bell: "\a", + Clear: "\x1bH\x1bJ", + PadChar: "\x00", + AltChars: ".kffgghhompoqqss", + EnterAcs: "\x1bF", + ExitAcs: "\x1bG", + SetCursor: "\x1bY%p1%' '%+%c%p2%' '%+%c", + CursorBack1: "\x1bD", + CursorUp1: "\x1bA", + KeyUp: "\x1bA", + KeyDown: "\x1bB", + KeyRight: "\x1bC", + KeyLeft: "\x1bD", + KeyBackspace: "\b", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_wy50.go b/vendor/github.com/gdamore/tcell/terminfo/term_wy50.go new file mode 100644 index 00000000..1294629c --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_wy50.go @@ -0,0 +1,56 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // Wyse 50 + AddTerminfo(&Terminfo{ + Name: "wy50", + Aliases: []string{"wyse50"}, + Columns: 80, + Lines: 24, + Bell: "\a", + Clear: "\x1b+$<20>", + ShowCursor: "\x1b`1", + HideCursor: "\x1b`0", + AttrOff: "\x1b(\x1bH\x0003", + Dim: "\x1b`7\x1b)", + Reverse: "\x1b`6\x1b)", + PadChar: "\x00", + AltChars: "0wa_h[jukslrmqnxqzttuyv]wpxv", + EnterAcs: "\x1bH\x02", + ExitAcs: "\x1bH\x03", + SetCursor: "\x1b=%p1%' '%+%c%p2%' '%+%c", + CursorBack1: "\b", + CursorUp1: "\v", + KeyUp: "\v", + KeyDown: "\n", + KeyRight: "\f", + KeyLeft: "\b", + KeyInsert: "\x1bQ", + KeyDelete: "\x1bW", + KeyBackspace: "\b", + KeyHome: "\x1e", + KeyPgUp: "\x1bJ", + KeyPgDn: "\x1bK", + KeyF1: "\x01@\r", + KeyF2: "\x01A\r", + KeyF3: "\x01B\r", + KeyF4: "\x01C\r", + KeyF5: "\x01D\r", + KeyF6: "\x01E\r", + KeyF7: "\x01F\r", + KeyF8: "\x01G\r", + KeyF9: "\x01H\r", + KeyF10: "\x01I\r", + KeyF11: "\x01J\r", + KeyF12: "\x01K\r", + KeyF13: "\x01L\r", + KeyF14: "\x01M\r", + KeyF15: "\x01N\r", + KeyF16: "\x01O\r", + KeyPrint: "\x1bP", + KeyBacktab: "\x1bI", + KeyShfHome: "\x1b{", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_wy60.go b/vendor/github.com/gdamore/tcell/terminfo/term_wy60.go new file mode 100644 index 00000000..7427fdbf --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_wy60.go @@ -0,0 +1,60 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // Wyse 60 + AddTerminfo(&Terminfo{ + Name: "wy60", + Aliases: []string{"wyse60"}, + Columns: 80, + Lines: 24, + Bell: "\a", + Clear: "\x1b+$<100>", + EnterCA: "\x1bw0", + ExitCA: "\x1bw1", + ShowCursor: "\x1b`1", + HideCursor: "\x1b`0", + AttrOff: "\x1b(\x1bH\x0003\x1bG0\x1bcD", + Underline: "\x1bG8", + Dim: "\x1bGp", + Blink: "\x1bG2", + Reverse: "\x1bG4", + PadChar: "\x00", + AltChars: "+/,.0[a2fxgqh1ihjYk?lZm@nEqDtCu4vAwBx3yszr{c~~", + EnterAcs: "\x1bcE", + ExitAcs: "\x1bcD", + SetCursor: "\x1b=%p1%' '%+%c%p2%' '%+%c", + CursorBack1: "\b", + CursorUp1: "\v", + KeyUp: "\v", + KeyDown: "\n", + KeyRight: "\f", + KeyLeft: "\b", + KeyInsert: "\x1bQ", + KeyDelete: "\x1bW", + KeyBackspace: "\b", + KeyHome: "\x1e", + KeyPgUp: "\x1bJ", + KeyPgDn: "\x1bK", + KeyF1: "\x01@\r", + KeyF2: "\x01A\r", + KeyF3: "\x01B\r", + KeyF4: "\x01C\r", + KeyF5: "\x01D\r", + KeyF6: "\x01E\r", + KeyF7: "\x01F\r", + KeyF8: "\x01G\r", + KeyF9: "\x01H\r", + KeyF10: "\x01I\r", + KeyF11: "\x01J\r", + KeyF12: "\x01K\r", + KeyF13: "\x01L\r", + KeyF14: "\x01M\r", + KeyF15: "\x01N\r", + KeyF16: "\x01O\r", + KeyPrint: "\x1bP", + KeyBacktab: "\x1bI", + KeyShfHome: "\x1b{", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_wy99_ansi.go b/vendor/github.com/gdamore/tcell/terminfo/term_wy99_ansi.go new file mode 100644 index 00000000..41e31c52 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_wy99_ansi.go @@ -0,0 +1,58 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // Wyse WY-99GT in ansi mode (int'l PC keyboard) + AddTerminfo(&Terminfo{ + Name: "wy99-ansi", + Columns: 80, + Lines: 25, + Bell: "\a", + Clear: "\x1b[H\x1b[J$<200>", + ShowCursor: "\x1b[34h\x1b[?25h", + HideCursor: "\x1b[?25l", + AttrOff: "\x1b[m\x0017\x1b[\"q", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Dim: "\x1b[2m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + EnterKeypad: "\x1b[?1h", + ExitKeypad: "\x1b[?1l", + PadChar: "\x00", + AltChars: "``aaffggjjkkllmmnnooqqssttuuvvwwxx{{||}}~~", + EnterAcs: "\x0e", + ExitAcs: "\x0f", + EnableAcs: "\x1b)0", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\x0010$<1>", + CursorUp1: "\x1bM", + KeyUp: "\x1bOA", + KeyDown: "\x1bOB", + KeyRight: "\x1bOC", + KeyLeft: "\x1bOD", + KeyBackspace: "\b", + KeyF1: "\x1bOP", + KeyF2: "\x1bOQ", + KeyF3: "\x1bOR", + KeyF4: "\x1bOS", + KeyF5: "\x1b[M", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyF17: "\x1b[K", + KeyF18: "\x1b[31~", + KeyF19: "\x1b[32~", + KeyF20: "\x1b[33~", + KeyF21: "\x1b[34~", + KeyF22: "\x1b[35~", + KeyF23: "\x1b[1~", + KeyF24: "\x1b[2~", + KeyBacktab: "\x1b[z", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_wy99a_ansi.go b/vendor/github.com/gdamore/tcell/terminfo/term_wy99a_ansi.go new file mode 100644 index 00000000..6cdac0db --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_wy99a_ansi.go @@ -0,0 +1,58 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // Wyse WY-99GT in ansi mode (US PC keyboard) + AddTerminfo(&Terminfo{ + Name: "wy99a-ansi", + Columns: 80, + Lines: 25, + Bell: "\a", + Clear: "\x1b[H\x1b[J$<200>", + ShowCursor: "\x1b[34h\x1b[?25h", + HideCursor: "\x1b[?25l", + AttrOff: "\x1b[m\x0017\x1b[\"q", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Dim: "\x1b[2m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + EnterKeypad: "\x1b[?1h", + ExitKeypad: "\x1b[?1l", + PadChar: "\x00", + AltChars: "``aaffggjjkkllmmnnooqqssttuuvvwwxx{{||}}~~", + EnterAcs: "\x0e", + ExitAcs: "\x0f", + EnableAcs: "\x1b)0", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\x0010$<1>", + CursorUp1: "\x1bM", + KeyUp: "\x1bOA", + KeyDown: "\x1bOB", + KeyRight: "\x1bOC", + KeyLeft: "\x1bOD", + KeyBackspace: "\b", + KeyF1: "\x1bOP", + KeyF2: "\x1bOQ", + KeyF3: "\x1bOR", + KeyF4: "\x1bOS", + KeyF5: "\x1b[M", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyF17: "\x1b[K", + KeyF18: "\x1b[31~", + KeyF19: "\x1b[32~", + KeyF20: "\x1b[33~", + KeyF21: "\x1b[34~", + KeyF22: "\x1b[35~", + KeyF23: "\x1b[1~", + KeyF24: "\x1b[2~", + KeyBacktab: "\x1b[z", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_xfce.go b/vendor/github.com/gdamore/tcell/terminfo/term_xfce.go new file mode 100644 index 00000000..3651dd70 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_xfce.go @@ -0,0 +1,153 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // Xfce Terminal + AddTerminfo(&Terminfo{ + Name: "xfce", + Columns: 80, + Lines: 24, + Colors: 8, + Bell: "\a", + Clear: "\x1b[H\x1b[2J", + EnterCA: "\x1b7\x1b[?47h", + ExitCA: "\x1b[2J\x1b[?47l\x1b8", + ShowCursor: "\x1b[?25h", + HideCursor: "\x1b[?25l", + AttrOff: "\x1b[0m\x0017", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Reverse: "\x1b[7m", + EnterKeypad: "\x1b[?1h\x1b=", + ExitKeypad: "\x1b[?1l\x1b>", + SetFg: "\x1b[3%p1%dm", + SetBg: "\x1b[4%p1%dm", + SetFgBg: "\x1b[3%p1%d;4%p2%dm", + PadChar: "\x00", + AltChars: "``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~", + EnterAcs: "\x0e", + ExitAcs: "\x0f", + EnableAcs: "\x1b)0", + Mouse: "\x1b[M", + MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1bOA", + KeyDown: "\x1bOB", + KeyRight: "\x1bOC", + KeyLeft: "\x1bOD", + KeyInsert: "\x1b[2~", + KeyDelete: "\x1b[3~", + KeyBackspace: "177", + KeyHome: "\x1bOH", + KeyEnd: "\x1bOF", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1bOP", + KeyF2: "\x1bOQ", + KeyF3: "\x1bOR", + KeyF4: "\x1bOS", + KeyF5: "\x1b[15~", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyF13: "\x1bO1;2P", + KeyF14: "\x1bO1;2Q", + KeyF15: "\x1bO1;2R", + KeyF16: "\x1bO1;2S", + KeyF17: "\x1b[15;2~", + KeyF18: "\x1b[17;2~", + KeyF19: "\x1b[18;2~", + KeyF20: "\x1b[19;2~", + KeyF21: "\x1b[20;2~", + KeyF22: "\x1b[21;2~", + KeyF23: "\x1b[23;2~", + KeyF24: "\x1b[24;2~", + KeyF25: "\x1bO1;5P", + KeyF26: "\x1bO1;5Q", + KeyF27: "\x1bO1;5R", + KeyF28: "\x1bO1;5S", + KeyF29: "\x1b[15;5~", + KeyF30: "\x1b[17;5~", + KeyF31: "\x1b[18;5~", + KeyF32: "\x1b[19;5~", + KeyF33: "\x1b[20;5~", + KeyF34: "\x1b[21;5~", + KeyF35: "\x1b[23;5~", + KeyF36: "\x1b[24;5~", + KeyF37: "\x1bO1;6P", + KeyF38: "\x1bO1;6Q", + KeyF39: "\x1bO1;6R", + KeyF40: "\x1bO1;6S", + KeyF41: "\x1b[15;6~", + KeyF42: "\x1b[17;6~", + KeyF43: "\x1b[18;6~", + KeyF44: "\x1b[19;6~", + KeyF45: "\x1b[20;6~", + KeyF46: "\x1b[21;6~", + KeyF47: "\x1b[23;6~", + KeyF48: "\x1b[24;6~", + KeyF49: "\x1bO1;3P", + KeyF50: "\x1bO1;3Q", + KeyF51: "\x1bO1;3R", + KeyF52: "\x1bO1;3S", + KeyF53: "\x1b[15;3~", + KeyF54: "\x1b[17;3~", + KeyF55: "\x1b[18;3~", + KeyF56: "\x1b[19;3~", + KeyF57: "\x1b[20;3~", + KeyF58: "\x1b[21;3~", + KeyF59: "\x1b[23;3~", + KeyF60: "\x1b[24;3~", + KeyF61: "\x1bO1;4P", + KeyF62: "\x1bO1;4Q", + KeyF63: "\x1bO1;4R", + KeyBacktab: "\x1b[Z", + KeyShfLeft: "\x1b[1;2D", + KeyShfRight: "\x1b[1;2C", + KeyShfUp: "\x1b[1;2A", + KeyShfDown: "\x1b[1;2B", + KeyCtrlLeft: "\x1b[1;5D", + KeyCtrlRight: "\x1b[1;5C", + KeyCtrlUp: "\x1b[1;5A", + KeyCtrlDown: "\x1b[1;5B", + KeyMetaLeft: "\x1b[1;9D", + KeyMetaRight: "\x1b[1;9C", + KeyMetaUp: "\x1b[1;9A", + KeyMetaDown: "\x1b[1;9B", + KeyAltLeft: "\x1b[1;3D", + KeyAltRight: "\x1b[1;3C", + KeyAltUp: "\x1b[1;3A", + KeyAltDown: "\x1b[1;3B", + KeyAltShfLeft: "\x1b[1;4D", + KeyAltShfRight: "\x1b[1;4C", + KeyAltShfUp: "\x1b[1;4A", + KeyAltShfDown: "\x1b[1;4B", + KeyMetaShfLeft: "\x1b[1;10D", + KeyMetaShfRight: "\x1b[1;10C", + KeyMetaShfUp: "\x1b[1;10A", + KeyMetaShfDown: "\x1b[1;10B", + KeyCtrlShfLeft: "\x1b[1;6D", + KeyCtrlShfRight: "\x1b[1;6C", + KeyCtrlShfUp: "\x1b[1;6A", + KeyCtrlShfDown: "\x1b[1;6B", + KeyShfHome: "\x1b[1;2H", + KeyShfEnd: "\x1b[1;2F", + KeyCtrlHome: "\x1b[1;5H", + KeyCtrlEnd: "\x1b[1;5F", + KeyAltHome: "\x1b[1;9H", + KeyAltEnd: "\x1b[1;9F", + KeyCtrlShfHome: "\x1b[1;6H", + KeyCtrlShfEnd: "\x1b[1;6F", + KeyMetaShfHome: "\x1b[1;10H", + KeyMetaShfEnd: "\x1b[1;10F", + KeyAltShfHome: "\x1b[1;4H", + KeyAltShfEnd: "\x1b[1;4F", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_xnuppc.go b/vendor/github.com/gdamore/tcell/terminfo/term_xnuppc.go new file mode 100644 index 00000000..d3d68820 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_xnuppc.go @@ -0,0 +1,31 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // Darwin PowerPC Console (color) + AddTerminfo(&Terminfo{ + Name: "xnuppc", + Aliases: []string{"darwin"}, + Colors: 8, + Clear: "\x1b[H\x1b[J", + AttrOff: "\x1b[m\x0017", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Reverse: "\x1b[7m", + EnterKeypad: "\x1b[?1h\x1b=", + ExitKeypad: "\x1b[?1l\x1b>", + SetFg: "\x1b[3%p1%dm", + SetBg: "\x1b[4%p1%dm", + SetFgBg: "\x1b[3%p1%d;4%p2%dm", + PadChar: "\x00", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\x1b[D", + CursorUp1: "\x1b[A", + KeyUp: "\x1bOA", + KeyDown: "\x1bOB", + KeyRight: "\x1bOC", + KeyLeft: "\x1bOD", + KeyBackspace: "177", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_xterm.go b/vendor/github.com/gdamore/tcell/terminfo/term_xterm.go new file mode 100644 index 00000000..9cab4a20 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_xterm.go @@ -0,0 +1,152 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // xterm terminal emulator (X Window System) + AddTerminfo(&Terminfo{ + Name: "xterm", + Columns: 80, + Lines: 24, + Colors: 8, + Bell: "\a", + Clear: "\x1b[H\x1b[2J", + EnterCA: "\x1b[?1049h", + ExitCA: "\x1b[?1049l", + ShowCursor: "\x1b[?12l\x1b[?25h", + HideCursor: "\x1b[?25l", + AttrOff: "\x1b(B\x1b[m", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + EnterKeypad: "\x1b[?1h\x1b=", + ExitKeypad: "\x1b[?1l\x1b>", + SetFg: "\x1b[3%p1%dm", + SetBg: "\x1b[4%p1%dm", + SetFgBg: "\x1b[3%p1%d;4%p2%dm", + AltChars: "``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~", + EnterAcs: "\x1b(0", + ExitAcs: "\x1b(B", + Mouse: "\x1b[M", + MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1bOA", + KeyDown: "\x1bOB", + KeyRight: "\x1bOC", + KeyLeft: "\x1bOD", + KeyInsert: "\x1b[2~", + KeyDelete: "\x1b[3~", + KeyBackspace: "\b", + KeyHome: "\x1bOH", + KeyEnd: "\x1bOF", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1bOP", + KeyF2: "\x1bOQ", + KeyF3: "\x1bOR", + KeyF4: "\x1bOS", + KeyF5: "\x1b[15~", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyF13: "\x1b[1;2P", + KeyF14: "\x1b[1;2Q", + KeyF15: "\x1b[1;2R", + KeyF16: "\x1b[1;2S", + KeyF17: "\x1b[15;2~", + KeyF18: "\x1b[17;2~", + KeyF19: "\x1b[18;2~", + KeyF20: "\x1b[19;2~", + KeyF21: "\x1b[20;2~", + KeyF22: "\x1b[21;2~", + KeyF23: "\x1b[23;2~", + KeyF24: "\x1b[24;2~", + KeyF25: "\x1b[1;5P", + KeyF26: "\x1b[1;5Q", + KeyF27: "\x1b[1;5R", + KeyF28: "\x1b[1;5S", + KeyF29: "\x1b[15;5~", + KeyF30: "\x1b[17;5~", + KeyF31: "\x1b[18;5~", + KeyF32: "\x1b[19;5~", + KeyF33: "\x1b[20;5~", + KeyF34: "\x1b[21;5~", + KeyF35: "\x1b[23;5~", + KeyF36: "\x1b[24;5~", + KeyF37: "\x1b[1;6P", + KeyF38: "\x1b[1;6Q", + KeyF39: "\x1b[1;6R", + KeyF40: "\x1b[1;6S", + KeyF41: "\x1b[15;6~", + KeyF42: "\x1b[17;6~", + KeyF43: "\x1b[18;6~", + KeyF44: "\x1b[19;6~", + KeyF45: "\x1b[20;6~", + KeyF46: "\x1b[21;6~", + KeyF47: "\x1b[23;6~", + KeyF48: "\x1b[24;6~", + KeyF49: "\x1b[1;3P", + KeyF50: "\x1b[1;3Q", + KeyF51: "\x1b[1;3R", + KeyF52: "\x1b[1;3S", + KeyF53: "\x1b[15;3~", + KeyF54: "\x1b[17;3~", + KeyF55: "\x1b[18;3~", + KeyF56: "\x1b[19;3~", + KeyF57: "\x1b[20;3~", + KeyF58: "\x1b[21;3~", + KeyF59: "\x1b[23;3~", + KeyF60: "\x1b[24;3~", + KeyF61: "\x1b[1;4P", + KeyF62: "\x1b[1;4Q", + KeyF63: "\x1b[1;4R", + KeyBacktab: "\x1b[Z", + KeyShfLeft: "\x1b[1;2D", + KeyShfRight: "\x1b[1;2C", + KeyShfUp: "\x1b[1;2A", + KeyShfDown: "\x1b[1;2B", + KeyCtrlLeft: "\x1b[1;5D", + KeyCtrlRight: "\x1b[1;5C", + KeyCtrlUp: "\x1b[1;5A", + KeyCtrlDown: "\x1b[1;5B", + KeyMetaLeft: "\x1b[1;9D", + KeyMetaRight: "\x1b[1;9C", + KeyMetaUp: "\x1b[1;9A", + KeyMetaDown: "\x1b[1;9B", + KeyAltLeft: "\x1b[1;3D", + KeyAltRight: "\x1b[1;3C", + KeyAltUp: "\x1b[1;3A", + KeyAltDown: "\x1b[1;3B", + KeyAltShfLeft: "\x1b[1;4D", + KeyAltShfRight: "\x1b[1;4C", + KeyAltShfUp: "\x1b[1;4A", + KeyAltShfDown: "\x1b[1;4B", + KeyMetaShfLeft: "\x1b[1;10D", + KeyMetaShfRight: "\x1b[1;10C", + KeyMetaShfUp: "\x1b[1;10A", + KeyMetaShfDown: "\x1b[1;10B", + KeyCtrlShfLeft: "\x1b[1;6D", + KeyCtrlShfRight: "\x1b[1;6C", + KeyCtrlShfUp: "\x1b[1;6A", + KeyCtrlShfDown: "\x1b[1;6B", + KeyShfHome: "\x1b[1;2H", + KeyShfEnd: "\x1b[1;2F", + KeyCtrlHome: "\x1b[1;5H", + KeyCtrlEnd: "\x1b[1;5F", + KeyAltHome: "\x1b[1;9H", + KeyAltEnd: "\x1b[1;9F", + KeyCtrlShfHome: "\x1b[1;6H", + KeyCtrlShfEnd: "\x1b[1;6F", + KeyMetaShfHome: "\x1b[1;10H", + KeyMetaShfEnd: "\x1b[1;10F", + KeyAltShfHome: "\x1b[1;4H", + KeyAltShfEnd: "\x1b[1;4F", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_xterm_256color.go b/vendor/github.com/gdamore/tcell/terminfo/term_xterm_256color.go new file mode 100644 index 00000000..d30ceeef --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_xterm_256color.go @@ -0,0 +1,152 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // xterm with 256 colors + AddTerminfo(&Terminfo{ + Name: "xterm-256color", + Columns: 80, + Lines: 24, + Colors: 256, + Bell: "\a", + Clear: "\x1b[H\x1b[2J", + EnterCA: "\x1b[?1049h", + ExitCA: "\x1b[?1049l", + ShowCursor: "\x1b[?12l\x1b[?25h", + HideCursor: "\x1b[?25l", + AttrOff: "\x1b(B\x1b[m", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + EnterKeypad: "\x1b[?1h\x1b=", + ExitKeypad: "\x1b[?1l\x1b>", + SetFg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m", + SetBg: "\x1b[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m", + SetFgBg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%<%t4%p2%d%e%p2%{16}%<%t10%p2%{8}%-%d%e48;5;%p2%d%;m", + AltChars: "``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~", + EnterAcs: "\x1b(0", + ExitAcs: "\x1b(B", + Mouse: "\x1b[M", + MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1bOA", + KeyDown: "\x1bOB", + KeyRight: "\x1bOC", + KeyLeft: "\x1bOD", + KeyInsert: "\x1b[2~", + KeyDelete: "\x1b[3~", + KeyBackspace: "\b", + KeyHome: "\x1bOH", + KeyEnd: "\x1bOF", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1bOP", + KeyF2: "\x1bOQ", + KeyF3: "\x1bOR", + KeyF4: "\x1bOS", + KeyF5: "\x1b[15~", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyF13: "\x1b[1;2P", + KeyF14: "\x1b[1;2Q", + KeyF15: "\x1b[1;2R", + KeyF16: "\x1b[1;2S", + KeyF17: "\x1b[15;2~", + KeyF18: "\x1b[17;2~", + KeyF19: "\x1b[18;2~", + KeyF20: "\x1b[19;2~", + KeyF21: "\x1b[20;2~", + KeyF22: "\x1b[21;2~", + KeyF23: "\x1b[23;2~", + KeyF24: "\x1b[24;2~", + KeyF25: "\x1b[1;5P", + KeyF26: "\x1b[1;5Q", + KeyF27: "\x1b[1;5R", + KeyF28: "\x1b[1;5S", + KeyF29: "\x1b[15;5~", + KeyF30: "\x1b[17;5~", + KeyF31: "\x1b[18;5~", + KeyF32: "\x1b[19;5~", + KeyF33: "\x1b[20;5~", + KeyF34: "\x1b[21;5~", + KeyF35: "\x1b[23;5~", + KeyF36: "\x1b[24;5~", + KeyF37: "\x1b[1;6P", + KeyF38: "\x1b[1;6Q", + KeyF39: "\x1b[1;6R", + KeyF40: "\x1b[1;6S", + KeyF41: "\x1b[15;6~", + KeyF42: "\x1b[17;6~", + KeyF43: "\x1b[18;6~", + KeyF44: "\x1b[19;6~", + KeyF45: "\x1b[20;6~", + KeyF46: "\x1b[21;6~", + KeyF47: "\x1b[23;6~", + KeyF48: "\x1b[24;6~", + KeyF49: "\x1b[1;3P", + KeyF50: "\x1b[1;3Q", + KeyF51: "\x1b[1;3R", + KeyF52: "\x1b[1;3S", + KeyF53: "\x1b[15;3~", + KeyF54: "\x1b[17;3~", + KeyF55: "\x1b[18;3~", + KeyF56: "\x1b[19;3~", + KeyF57: "\x1b[20;3~", + KeyF58: "\x1b[21;3~", + KeyF59: "\x1b[23;3~", + KeyF60: "\x1b[24;3~", + KeyF61: "\x1b[1;4P", + KeyF62: "\x1b[1;4Q", + KeyF63: "\x1b[1;4R", + KeyBacktab: "\x1b[Z", + KeyShfLeft: "\x1b[1;2D", + KeyShfRight: "\x1b[1;2C", + KeyShfUp: "\x1b[1;2A", + KeyShfDown: "\x1b[1;2B", + KeyCtrlLeft: "\x1b[1;5D", + KeyCtrlRight: "\x1b[1;5C", + KeyCtrlUp: "\x1b[1;5A", + KeyCtrlDown: "\x1b[1;5B", + KeyMetaLeft: "\x1b[1;9D", + KeyMetaRight: "\x1b[1;9C", + KeyMetaUp: "\x1b[1;9A", + KeyMetaDown: "\x1b[1;9B", + KeyAltLeft: "\x1b[1;3D", + KeyAltRight: "\x1b[1;3C", + KeyAltUp: "\x1b[1;3A", + KeyAltDown: "\x1b[1;3B", + KeyAltShfLeft: "\x1b[1;4D", + KeyAltShfRight: "\x1b[1;4C", + KeyAltShfUp: "\x1b[1;4A", + KeyAltShfDown: "\x1b[1;4B", + KeyMetaShfLeft: "\x1b[1;10D", + KeyMetaShfRight: "\x1b[1;10C", + KeyMetaShfUp: "\x1b[1;10A", + KeyMetaShfDown: "\x1b[1;10B", + KeyCtrlShfLeft: "\x1b[1;6D", + KeyCtrlShfRight: "\x1b[1;6C", + KeyCtrlShfUp: "\x1b[1;6A", + KeyCtrlShfDown: "\x1b[1;6B", + KeyShfHome: "\x1b[1;2H", + KeyShfEnd: "\x1b[1;2F", + KeyCtrlHome: "\x1b[1;5H", + KeyCtrlEnd: "\x1b[1;5F", + KeyAltHome: "\x1b[1;9H", + KeyAltEnd: "\x1b[1;9F", + KeyCtrlShfHome: "\x1b[1;6H", + KeyCtrlShfEnd: "\x1b[1;6F", + KeyMetaShfHome: "\x1b[1;10H", + KeyMetaShfEnd: "\x1b[1;10F", + KeyAltShfHome: "\x1b[1;4H", + KeyAltShfEnd: "\x1b[1;4F", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/term_xterm_truecolor.go b/vendor/github.com/gdamore/tcell/terminfo/term_xterm_truecolor.go new file mode 100644 index 00000000..d035e44e --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/term_xterm_truecolor.go @@ -0,0 +1,155 @@ +// Generated automatically. DO NOT HAND-EDIT. + +package terminfo + +func init() { + // xterm with 256 colors + AddTerminfo(&Terminfo{ + Name: "xterm-truecolor", + Columns: 80, + Lines: 24, + Colors: 256, + Bell: "\a", + Clear: "\x1b[H\x1b[2J", + EnterCA: "\x1b[?1049h", + ExitCA: "\x1b[?1049l", + ShowCursor: "\x1b[?12l\x1b[?25h", + HideCursor: "\x1b[?25l", + AttrOff: "\x1b(B\x1b[m", + Underline: "\x1b[4m", + Bold: "\x1b[1m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + EnterKeypad: "\x1b[?1h\x1b=", + ExitKeypad: "\x1b[?1l\x1b>", + SetFg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m", + SetBg: "\x1b[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m", + SetFgBg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%<%t4%p2%d%e%p2%{16}%<%t10%p2%{8}%-%d%e48;5;%p2%d%;m", + AltChars: "``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~", + EnterAcs: "\x1b(0", + ExitAcs: "\x1b(B", + SetFgRGB: "\x1b[38;2;%p1%d;%p2%d;%p3%dm", + SetBgRGB: "\x1b[48;2;%p1%d;%p2%d;%p3%dm", + SetFgBgRGB: "\x1b[38;2;%p1%d;%p2%d;%p3%d;48;2;%p4%d;%p5%d;%p6%dm", + Mouse: "\x1b[M", + MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c", + SetCursor: "\x1b[%i%p1%d;%p2%dH", + CursorBack1: "\b", + CursorUp1: "\x1b[A", + KeyUp: "\x1bOA", + KeyDown: "\x1bOB", + KeyRight: "\x1bOC", + KeyLeft: "\x1bOD", + KeyInsert: "\x1b[2~", + KeyDelete: "\x1b[3~", + KeyBackspace: "\b", + KeyHome: "\x1bOH", + KeyEnd: "\x1bOF", + KeyPgUp: "\x1b[5~", + KeyPgDn: "\x1b[6~", + KeyF1: "\x1bOP", + KeyF2: "\x1bOQ", + KeyF3: "\x1bOR", + KeyF4: "\x1bOS", + KeyF5: "\x1b[15~", + KeyF6: "\x1b[17~", + KeyF7: "\x1b[18~", + KeyF8: "\x1b[19~", + KeyF9: "\x1b[20~", + KeyF10: "\x1b[21~", + KeyF11: "\x1b[23~", + KeyF12: "\x1b[24~", + KeyF13: "\x1b[1;2P", + KeyF14: "\x1b[1;2Q", + KeyF15: "\x1b[1;2R", + KeyF16: "\x1b[1;2S", + KeyF17: "\x1b[15;2~", + KeyF18: "\x1b[17;2~", + KeyF19: "\x1b[18;2~", + KeyF20: "\x1b[19;2~", + KeyF21: "\x1b[20;2~", + KeyF22: "\x1b[21;2~", + KeyF23: "\x1b[23;2~", + KeyF24: "\x1b[24;2~", + KeyF25: "\x1b[1;5P", + KeyF26: "\x1b[1;5Q", + KeyF27: "\x1b[1;5R", + KeyF28: "\x1b[1;5S", + KeyF29: "\x1b[15;5~", + KeyF30: "\x1b[17;5~", + KeyF31: "\x1b[18;5~", + KeyF32: "\x1b[19;5~", + KeyF33: "\x1b[20;5~", + KeyF34: "\x1b[21;5~", + KeyF35: "\x1b[23;5~", + KeyF36: "\x1b[24;5~", + KeyF37: "\x1b[1;6P", + KeyF38: "\x1b[1;6Q", + KeyF39: "\x1b[1;6R", + KeyF40: "\x1b[1;6S", + KeyF41: "\x1b[15;6~", + KeyF42: "\x1b[17;6~", + KeyF43: "\x1b[18;6~", + KeyF44: "\x1b[19;6~", + KeyF45: "\x1b[20;6~", + KeyF46: "\x1b[21;6~", + KeyF47: "\x1b[23;6~", + KeyF48: "\x1b[24;6~", + KeyF49: "\x1b[1;3P", + KeyF50: "\x1b[1;3Q", + KeyF51: "\x1b[1;3R", + KeyF52: "\x1b[1;3S", + KeyF53: "\x1b[15;3~", + KeyF54: "\x1b[17;3~", + KeyF55: "\x1b[18;3~", + KeyF56: "\x1b[19;3~", + KeyF57: "\x1b[20;3~", + KeyF58: "\x1b[21;3~", + KeyF59: "\x1b[23;3~", + KeyF60: "\x1b[24;3~", + KeyF61: "\x1b[1;4P", + KeyF62: "\x1b[1;4Q", + KeyF63: "\x1b[1;4R", + KeyBacktab: "\x1b[Z", + KeyShfLeft: "\x1b[1;2D", + KeyShfRight: "\x1b[1;2C", + KeyShfUp: "\x1b[1;2A", + KeyShfDown: "\x1b[1;2B", + KeyCtrlLeft: "\x1b[1;5D", + KeyCtrlRight: "\x1b[1;5C", + KeyCtrlUp: "\x1b[1;5A", + KeyCtrlDown: "\x1b[1;5B", + KeyMetaLeft: "\x1b[1;9D", + KeyMetaRight: "\x1b[1;9C", + KeyMetaUp: "\x1b[1;9A", + KeyMetaDown: "\x1b[1;9B", + KeyAltLeft: "\x1b[1;3D", + KeyAltRight: "\x1b[1;3C", + KeyAltUp: "\x1b[1;3A", + KeyAltDown: "\x1b[1;3B", + KeyAltShfLeft: "\x1b[1;4D", + KeyAltShfRight: "\x1b[1;4C", + KeyAltShfUp: "\x1b[1;4A", + KeyAltShfDown: "\x1b[1;4B", + KeyMetaShfLeft: "\x1b[1;10D", + KeyMetaShfRight: "\x1b[1;10C", + KeyMetaShfUp: "\x1b[1;10A", + KeyMetaShfDown: "\x1b[1;10B", + KeyCtrlShfLeft: "\x1b[1;6D", + KeyCtrlShfRight: "\x1b[1;6C", + KeyCtrlShfUp: "\x1b[1;6A", + KeyCtrlShfDown: "\x1b[1;6B", + KeyShfHome: "\x1b[1;2H", + KeyShfEnd: "\x1b[1;2F", + KeyCtrlHome: "\x1b[1;5H", + KeyCtrlEnd: "\x1b[1;5F", + KeyAltHome: "\x1b[1;9H", + KeyAltEnd: "\x1b[1;9F", + KeyCtrlShfHome: "\x1b[1;6H", + KeyCtrlShfEnd: "\x1b[1;6F", + KeyMetaShfHome: "\x1b[1;10H", + KeyMetaShfEnd: "\x1b[1;10F", + KeyAltShfHome: "\x1b[1;4H", + KeyAltShfEnd: "\x1b[1;4F", + }) +} diff --git a/vendor/github.com/gdamore/tcell/terminfo/terminfo.go b/vendor/github.com/gdamore/tcell/terminfo/terminfo.go new file mode 100644 index 00000000..ea8c6d7b --- /dev/null +++ b/vendor/github.com/gdamore/tcell/terminfo/terminfo.go @@ -0,0 +1,831 @@ +// Copyright 2017 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package terminfo + +import ( + "bytes" + "compress/gzip" + "encoding/json" + "errors" + "fmt" + "io" + "os" + "path" + "strconv" + "strings" + "sync" +) + +var ( + // ErrTermNotFound indicates that a suitable terminal entry could + // not be found. This can result from either not having TERM set, + // or from the TERM failing to support certain minimal functionality, + // in particular absolute cursor addressability (the cup capability) + // is required. For example, legacy "adm3" lacks this capability, + // whereas the slightly newer "adm3a" supports it. This failure + // occurs most often with "dumb". + ErrTermNotFound = errors.New("terminal entry not found") +) + +// Terminfo represents a terminfo entry. Note that we use friendly names +// in Go, but when we write out JSON, we use the same names as terminfo. +// The name, aliases and smous, rmous fields do not come from terminfo directly. +type Terminfo struct { + Name string `json:"name"` + Aliases []string `json:"aliases,omitempty"` + Columns int `json:"cols,omitempty"` // cols + Lines int `json:"lines,omitempty"` // lines + Colors int `json:"colors,omitempty"` // colors + Bell string `json:"bell,omitempty"` // bell + Clear string `json:"clear,omitempty"` // clear + EnterCA string `json:"smcup,omitempty"` // smcup + ExitCA string `json:"rmcup,omitempty"` // rmcup + ShowCursor string `json:"cnorm,omitempty"` // cnorm + HideCursor string `json:"civis,omitempty"` // civis + AttrOff string `json:"sgr0,omitempty"` // sgr0 + Underline string `json:"smul,omitempty"` // smul + Bold string `json:"bold,omitempty"` // bold + Blink string `json:"blink,omitempty"` // blink + Reverse string `json:"rev,omitempty"` // rev + Dim string `json:"dim,omitempty"` // dim + EnterKeypad string `json:"smkx,omitempty"` // smkx + ExitKeypad string `json:"rmkx,omitempty"` // rmkx + SetFg string `json:"setaf,omitempty"` // setaf + SetBg string `json:"setbg,omitempty"` // setab + SetCursor string `json:"cup,omitempty"` // cup + CursorBack1 string `json:"cub1,omitempty"` // cub1 + CursorUp1 string `json:"cuu1,omitempty"` // cuu1 + PadChar string `json:"pad,omitempty"` // pad + KeyBackspace string `json:"kbs,omitempty"` // kbs + KeyF1 string `json:"kf1,omitempty"` // kf1 + KeyF2 string `json:"kf2,omitempty"` // kf2 + KeyF3 string `json:"kf3,omitempty"` // kf3 + KeyF4 string `json:"kf4,omitempty"` // kf4 + KeyF5 string `json:"kf5,omitempty"` // kf5 + KeyF6 string `json:"kf6,omitempty"` // kf6 + KeyF7 string `json:"kf7,omitempty"` // kf7 + KeyF8 string `json:"kf8,omitempty"` // kf8 + KeyF9 string `json:"kf9,omitempty"` // kf9 + KeyF10 string `json:"kf10,omitempty"` // kf10 + KeyF11 string `json:"kf11,omitempty"` // kf11 + KeyF12 string `json:"kf12,omitempty"` // kf12 + KeyF13 string `json:"kf13,omitempty"` // kf13 + KeyF14 string `json:"kf14,omitempty"` // kf14 + KeyF15 string `json:"kf15,omitempty"` // kf15 + KeyF16 string `json:"kf16,omitempty"` // kf16 + KeyF17 string `json:"kf17,omitempty"` // kf17 + KeyF18 string `json:"kf18,omitempty"` // kf18 + KeyF19 string `json:"kf19,omitempty"` // kf19 + KeyF20 string `json:"kf20,omitempty"` // kf20 + KeyF21 string `json:"kf21,omitempty"` // kf21 + KeyF22 string `json:"kf22,omitempty"` // kf22 + KeyF23 string `json:"kf23,omitempty"` // kf23 + KeyF24 string `json:"kf24,omitempty"` // kf24 + KeyF25 string `json:"kf25,omitempty"` // kf25 + KeyF26 string `json:"kf26,omitempty"` // kf26 + KeyF27 string `json:"kf27,omitempty"` // kf27 + KeyF28 string `json:"kf28,omitempty"` // kf28 + KeyF29 string `json:"kf29,omitempty"` // kf29 + KeyF30 string `json:"kf30,omitempty"` // kf30 + KeyF31 string `json:"kf31,omitempty"` // kf31 + KeyF32 string `json:"kf32,omitempty"` // kf32 + KeyF33 string `json:"kf33,omitempty"` // kf33 + KeyF34 string `json:"kf34,omitempty"` // kf34 + KeyF35 string `json:"kf35,omitempty"` // kf35 + KeyF36 string `json:"kf36,omitempty"` // kf36 + KeyF37 string `json:"kf37,omitempty"` // kf37 + KeyF38 string `json:"kf38,omitempty"` // kf38 + KeyF39 string `json:"kf39,omitempty"` // kf39 + KeyF40 string `json:"kf40,omitempty"` // kf40 + KeyF41 string `json:"kf41,omitempty"` // kf41 + KeyF42 string `json:"kf42,omitempty"` // kf42 + KeyF43 string `json:"kf43,omitempty"` // kf43 + KeyF44 string `json:"kf44,omitempty"` // kf44 + KeyF45 string `json:"kf45,omitempty"` // kf45 + KeyF46 string `json:"kf46,omitempty"` // kf46 + KeyF47 string `json:"kf47,omitempty"` // kf47 + KeyF48 string `json:"kf48,omitempty"` // kf48 + KeyF49 string `json:"kf49,omitempty"` // kf49 + KeyF50 string `json:"kf50,omitempty"` // kf50 + KeyF51 string `json:"kf51,omitempty"` // kf51 + KeyF52 string `json:"kf52,omitempty"` // kf52 + KeyF53 string `json:"kf53,omitempty"` // kf53 + KeyF54 string `json:"kf54,omitempty"` // kf54 + KeyF55 string `json:"kf55,omitempty"` // kf55 + KeyF56 string `json:"kf56,omitempty"` // kf56 + KeyF57 string `json:"kf57,omitempty"` // kf57 + KeyF58 string `json:"kf58,omitempty"` // kf58 + KeyF59 string `json:"kf59,omitempty"` // kf59 + KeyF60 string `json:"kf60,omitempty"` // kf60 + KeyF61 string `json:"kf61,omitempty"` // kf61 + KeyF62 string `json:"kf62,omitempty"` // kf62 + KeyF63 string `json:"kf63,omitempty"` // kf63 + KeyF64 string `json:"kf64,omitempty"` // kf64 + KeyInsert string `json:"kich,omitempty"` // kich1 + KeyDelete string `json:"kdch,omitempty"` // kdch1 + KeyHome string `json:"khome,omitempty"` // khome + KeyEnd string `json:"kend,omitempty"` // kend + KeyHelp string `json:"khlp,omitempty"` // khlp + KeyPgUp string `json:"kpp,omitempty"` // kpp + KeyPgDn string `json:"knp,omitempty"` // knp + KeyUp string `json:"kcuu1,omitempty"` // kcuu1 + KeyDown string `json:"kcud1,omitempty"` // kcud1 + KeyLeft string `json:"kcub1,omitempty"` // kcub1 + KeyRight string `json:"kcuf1,omitempty"` // kcuf1 + KeyBacktab string `json:"kcbt,omitempty"` // kcbt + KeyExit string `json:"kext,omitempty"` // kext + KeyClear string `json:"kclr,omitempty"` // kclr + KeyPrint string `json:"kprt,omitempty"` // kprt + KeyCancel string `json:"kcan,omitempty"` // kcan + Mouse string `json:"kmous,omitempty"` // kmous + MouseMode string `json:"XM,omitempty"` // XM + AltChars string `json:"acsc,omitempty"` // acsc + EnterAcs string `json:"smacs,omitempty"` // smacs + ExitAcs string `json:"rmacs,omitempty"` // rmacs + EnableAcs string `json:"enacs,omitempty"` // enacs + KeyShfRight string `json:"kRIT,omitempty"` // kRIT + KeyShfLeft string `json:"kLFT,omitempty"` // kLFT + KeyShfHome string `json:"kHOM,omitempty"` // kHOM + KeyShfEnd string `json:"kEND,omitempty"` // kEND + + // These are non-standard extensions to terminfo. This includes + // true color support, and some additional keys. Its kind of bizarre + // that shifted variants of left and right exist, but not up and down. + // Terminal support for these are going to vary amongst XTerm + // emulations, so don't depend too much on them in your application. + + SetFgBg string `json:"_setfgbg,omitempty"` // setfgbg + SetFgBgRGB string `json:"_setfgbgrgb,omitempty"` // setfgbgrgb + SetFgRGB string `json:"_setfrgb,omitempty"` // setfrgb + SetBgRGB string `json:"_setbrgb,omitempty"` // setbrgb + KeyShfUp string `json:"_kscu1,omitempty"` // shift-up + KeyShfDown string `json:"_kscud1,omitempty"` // shift-down + KeyCtrlUp string `json:"_kccu1,omitempty"` // ctrl-up + KeyCtrlDown string `json:"_kccud1,omitempty"` // ctrl-left + KeyCtrlRight string `json:"_kccuf1,omitempty"` // ctrl-right + KeyCtrlLeft string `json:"_kccub1,omitempty"` // ctrl-left + KeyMetaUp string `json:"_kmcu1,omitempty"` // meta-up + KeyMetaDown string `json:"_kmcud1,omitempty"` // meta-left + KeyMetaRight string `json:"_kmcuf1,omitempty"` // meta-right + KeyMetaLeft string `json:"_kmcub1,omitempty"` // meta-left + KeyAltUp string `json:"_kacu1,omitempty"` // alt-up + KeyAltDown string `json:"_kacud1,omitempty"` // alt-left + KeyAltRight string `json:"_kacuf1,omitempty"` // alt-right + KeyAltLeft string `json:"_kacub1,omitempty"` // alt-left + KeyCtrlHome string `json:"_kchome,omitempty"` + KeyCtrlEnd string `json:"_kcend,omitempty"` + KeyMetaHome string `json:"_kmhome,omitempty"` + KeyMetaEnd string `json:"_kmend,omitempty"` + KeyAltHome string `json:"_kahome,omitempty"` + KeyAltEnd string `json:"_kaend,omitempty"` + KeyAltShfUp string `json:"_kascu1,omitempty"` + KeyAltShfDown string `json:"_kascud1,omitempty"` + KeyAltShfLeft string `json:"_kascub1,omitempty"` + KeyAltShfRight string `json:"_kascuf1,omitempty"` + KeyMetaShfUp string `json:"_kmscu1,omitempty"` + KeyMetaShfDown string `json:"_kmscud1,omitempty"` + KeyMetaShfLeft string `json:"_kmscub1,omitempty"` + KeyMetaShfRight string `json:"_kmscuf1,omitempty"` + KeyCtrlShfUp string `json:"_kcscu1,omitempty"` + KeyCtrlShfDown string `json:"_kcscud1,omitempty"` + KeyCtrlShfLeft string `json:"_kcscub1,omitempty"` + KeyCtrlShfRight string `json:"_kcscuf1,omitempty"` + KeyCtrlShfHome string `json:"_kcHOME,omitempty"` + KeyCtrlShfEnd string `json:"_kcEND,omitempty"` + KeyAltShfHome string `json:"_kaHOME,omitempty"` + KeyAltShfEnd string `json:"_kaEND,omitempty"` + KeyMetaShfHome string `json:"_kmHOME,omitempty"` + KeyMetaShfEnd string `json:"_kmEND,omitempty"` +} + +type stackElem struct { + s string + i int + isStr bool + isInt bool +} + +type stack []stackElem + +func (st stack) Push(v string) stack { + e := stackElem{ + s: v, + isStr: true, + } + return append(st, e) +} + +func (st stack) Pop() (string, stack) { + v := "" + if len(st) > 0 { + e := st[len(st)-1] + st = st[:len(st)-1] + if e.isStr { + v = e.s + } else { + v = strconv.Itoa(e.i) + } + } + return v, st +} + +func (st stack) PopInt() (int, stack) { + if len(st) > 0 { + e := st[len(st)-1] + st = st[:len(st)-1] + if e.isInt { + return e.i, st + } else if e.isStr { + i, _ := strconv.Atoi(e.s) + return i, st + } + } + return 0, st +} + +func (st stack) PopBool() (bool, stack) { + if len(st) > 0 { + e := st[len(st)-1] + st = st[:len(st)-1] + if e.isStr { + if e.s == "1" { + return true, st + } + return false, st + } else if e.i == 1 { + return true, st + } else { + return false, st + } + } + return false, st +} + +func (st stack) PushInt(i int) stack { + e := stackElem{ + i: i, + isInt: true, + } + return append(st, e) +} + +func (st stack) PushBool(i bool) stack { + if i { + return st.PushInt(1) + } + return st.PushInt(0) +} + +func nextch(s string, index int) (byte, int) { + if index < len(s) { + return s[index], index + 1 + } + return 0, index +} + +// static vars +var svars [26]string + +// paramsBuffer handles some persistent state for TParam. Technically we +// could probably dispense with this, but caching buffer arrays gives us +// a nice little performance boost. Furthermore, we know that TParam is +// rarely (never?) called re-entrantly, so we can just reuse the same +// buffers, making it thread-safe by stashing a lock. +type paramsBuffer struct { + out bytes.Buffer + buf bytes.Buffer + lk sync.Mutex +} + +// Start initializes the params buffer with the initial string data. +// It also locks the paramsBuffer. The caller must call End() when +// finished. +func (pb *paramsBuffer) Start(s string) { + pb.lk.Lock() + pb.out.Reset() + pb.buf.Reset() + pb.buf.WriteString(s) +} + +// End returns the final output from TParam, but it also releases the lock. +func (pb *paramsBuffer) End() string { + s := pb.out.String() + pb.lk.Unlock() + return s +} + +// NextCh returns the next input character to the expander. +func (pb *paramsBuffer) NextCh() (byte, error) { + return pb.buf.ReadByte() +} + +// PutCh "emits" (rather schedules for output) a single byte character. +func (pb *paramsBuffer) PutCh(ch byte) { + pb.out.WriteByte(ch) +} + +// PutString schedules a string for output. +func (pb *paramsBuffer) PutString(s string) { + pb.out.WriteString(s) +} + +var pb = ¶msBuffer{} + +// TParm takes a terminfo parameterized string, such as setaf or cup, and +// evaluates the string, and returns the result with the parameter +// applied. +func (t *Terminfo) TParm(s string, p ...int) string { + var stk stack + var a, b string + var ai, bi int + var ab bool + var dvars [26]string + var params [9]int + + pb.Start(s) + + // make sure we always have 9 parameters -- makes it easier + // later to skip checks + for i := 0; i < len(params) && i < len(p); i++ { + params[i] = p[i] + } + + nest := 0 + + for { + + ch, err := pb.NextCh() + if err != nil { + break + } + + if ch != '%' { + pb.PutCh(ch) + continue + } + + ch, err = pb.NextCh() + if err != nil { + // XXX Error + break + } + + switch ch { + case '%': // quoted % + pb.PutCh(ch) + + case 'i': // increment both parameters (ANSI cup support) + params[0]++ + params[1]++ + + case 'c', 's': + // NB: these, and 'd' below are special cased for + // efficiency. They could be handled by the richer + // format support below, less efficiently. + a, stk = stk.Pop() + pb.PutString(a) + + case 'd': + ai, stk = stk.PopInt() + pb.PutString(strconv.Itoa(ai)) + + case '0', '1', '2', '3', '4', 'x', 'X', 'o', ':': + // This is pretty suboptimal, but this is rarely used. + // None of the mainstream terminals use any of this, + // and it would surprise me if this code is ever + // executed outside of test cases. + f := "%" + if ch == ':' { + ch, _ = pb.NextCh() + } + f += string(ch) + for ch == '+' || ch == '-' || ch == '#' || ch == ' ' { + ch, _ = pb.NextCh() + f += string(ch) + } + for (ch >= '0' && ch <= '9') || ch == '.' { + ch, _ = pb.NextCh() + f += string(ch) + } + switch ch { + case 'd', 'x', 'X', 'o': + ai, stk = stk.PopInt() + pb.PutString(fmt.Sprintf(f, ai)) + case 'c', 's': + a, stk = stk.Pop() + pb.PutString(fmt.Sprintf(f, a)) + } + + case 'p': // push parameter + ch, _ = pb.NextCh() + ai = int(ch - '1') + if ai >= 0 && ai < len(params) { + stk = stk.PushInt(params[ai]) + } else { + stk = stk.PushInt(0) + } + + case 'P': // pop & store variable + ch, _ = pb.NextCh() + if ch >= 'A' && ch <= 'Z' { + svars[int(ch-'A')], stk = stk.Pop() + } else if ch >= 'a' && ch <= 'z' { + dvars[int(ch-'a')], stk = stk.Pop() + } + + case 'g': // recall & push variable + ch, _ = pb.NextCh() + if ch >= 'A' && ch <= 'Z' { + stk = stk.Push(svars[int(ch-'A')]) + } else if ch >= 'a' && ch <= 'z' { + stk = stk.Push(dvars[int(ch-'a')]) + } + + case '\'': // push(char) + ch, _ = pb.NextCh() + pb.NextCh() // must be ' but we don't check + stk = stk.Push(string(ch)) + + case '{': // push(int) + ai = 0 + ch, _ = pb.NextCh() + for ch >= '0' && ch <= '9' { + ai *= 10 + ai += int(ch - '0') + ch, _ = pb.NextCh() + } + // ch must be '}' but no verification + stk = stk.PushInt(ai) + + case 'l': // push(strlen(pop)) + a, stk = stk.Pop() + stk = stk.PushInt(len(a)) + + case '+': + bi, stk = stk.PopInt() + ai, stk = stk.PopInt() + stk = stk.PushInt(ai + bi) + + case '-': + bi, stk = stk.PopInt() + ai, stk = stk.PopInt() + stk = stk.PushInt(ai - bi) + + case '*': + bi, stk = stk.PopInt() + ai, stk = stk.PopInt() + stk = stk.PushInt(ai * bi) + + case '/': + bi, stk = stk.PopInt() + ai, stk = stk.PopInt() + if bi != 0 { + stk = stk.PushInt(ai / bi) + } else { + stk = stk.PushInt(0) + } + + case 'm': // push(pop mod pop) + bi, stk = stk.PopInt() + ai, stk = stk.PopInt() + if bi != 0 { + stk = stk.PushInt(ai % bi) + } else { + stk = stk.PushInt(0) + } + + case '&': // AND + bi, stk = stk.PopInt() + ai, stk = stk.PopInt() + stk = stk.PushInt(ai & bi) + + case '|': // OR + bi, stk = stk.PopInt() + ai, stk = stk.PopInt() + stk = stk.PushInt(ai | bi) + + case '^': // XOR + bi, stk = stk.PopInt() + ai, stk = stk.PopInt() + stk = stk.PushInt(ai ^ bi) + + case '~': // bit complement + ai, stk = stk.PopInt() + stk = stk.PushInt(ai ^ -1) + + case '!': // logical NOT + ai, stk = stk.PopInt() + stk = stk.PushBool(ai != 0) + + case '=': // numeric compare or string compare + b, stk = stk.Pop() + a, stk = stk.Pop() + stk = stk.PushBool(a == b) + + case '>': // greater than, numeric + bi, stk = stk.PopInt() + ai, stk = stk.PopInt() + stk = stk.PushBool(ai > bi) + + case '<': // less than, numeric + bi, stk = stk.PopInt() + ai, stk = stk.PopInt() + stk = stk.PushBool(ai < bi) + + case '?': // start conditional + + case 't': + ab, stk = stk.PopBool() + if ab { + // just keep going + break + } + nest = 0 + ifloop: + // this loop consumes everything until we hit our else, + // or the end of the conditional + for { + ch, err = pb.NextCh() + if err != nil { + break + } + if ch != '%' { + continue + } + ch, _ = pb.NextCh() + switch ch { + case ';': + if nest == 0 { + break ifloop + } + nest-- + case '?': + nest++ + case 'e': + if nest == 0 { + break ifloop + } + } + } + + case 'e': + // if we got here, it means we didn't use the else + // in the 't' case above, and we should skip until + // the end of the conditional + nest = 0 + elloop: + for { + ch, err = pb.NextCh() + if err != nil { + break + } + if ch != '%' { + continue + } + ch, _ = pb.NextCh() + switch ch { + case ';': + if nest == 0 { + break elloop + } + nest-- + case '?': + nest++ + } + } + + case ';': // endif + + } + } + + return pb.End() +} + +// TPuts emits the string to the writer, but expands inline padding +// indications (of the form $<[delay]> where [delay] is msec) to +// a suitable number of padding characters (usually null bytes) based +// upon the supplied baud. At high baud rates, more padding characters +// will be inserted. All Terminfo based strings should be emitted using +// this function. +func (t *Terminfo) TPuts(w io.Writer, s string, baud int) { + for { + beg := strings.Index(s, "$<") + if beg < 0 { + // Most strings don't need padding, which is good news! + io.WriteString(w, s) + return + } + io.WriteString(w, s[:beg]) + s = s[beg+2:] + end := strings.Index(s, ">") + if end < 0 { + // unterminated.. just emit bytes unadulterated + io.WriteString(w, "$<"+s) + return + } + val := s[:end] + s = s[end+1:] + padus := 0 + unit := 1000 + dot := false + loop: + for i := range val { + switch val[i] { + case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': + padus *= 10 + padus += int(val[i] - '0') + if dot { + unit *= 10 + } + case '.': + if !dot { + dot = true + } else { + break loop + } + default: + break loop + } + } + cnt := int(((baud / 8) * padus) / unit) + for cnt > 0 { + io.WriteString(w, t.PadChar) + cnt-- + } + } +} + +// TGoto returns a string suitable for addressing the cursor at the given +// row and column. The origin 0, 0 is in the upper left corner of the screen. +func (t *Terminfo) TGoto(col, row int) string { + return t.TParm(t.SetCursor, row, col) +} + +// TColor returns a string corresponding to the given foreground and background +// colors. Either fg or bg can be set to -1 to elide. +func (t *Terminfo) TColor(fi, bi int) string { + rv := "" + // As a special case, we map bright colors to lower versions if the + // color table only holds 8. For the remaining 240 colors, the user + // is out of luck. Someday we could create a mapping table, but its + // not worth it. + if t.Colors == 8 { + if fi > 7 && fi < 16 { + fi -= 8 + } + if bi > 7 && bi < 16 { + bi -= 8 + } + } + if t.Colors > fi && fi >= 0 { + rv += t.TParm(t.SetFg, fi) + } + if t.Colors > bi && bi >= 0 { + rv += t.TParm(t.SetBg, bi) + } + return rv +} + +var ( + dblock sync.Mutex + terminfos = make(map[string]*Terminfo) + aliases = make(map[string]string) +) + +// AddTerminfo can be called to register a new Terminfo entry. +func AddTerminfo(t *Terminfo) { + dblock.Lock() + terminfos[t.Name] = t + for _, x := range t.Aliases { + terminfos[x] = t + } + dblock.Unlock() +} + +func loadFromFile(fname string, term string) (*Terminfo, error) { + var e error + var f io.Reader + if f, e = os.Open(fname); e != nil { + return nil, e + } + if strings.HasSuffix(fname, ".gz") { + if f, e = gzip.NewReader(f); e != nil { + return nil, e + } + } + d := json.NewDecoder(f) + for { + t := &Terminfo{} + if e := d.Decode(t); e != nil { + if e == io.EOF { + return nil, ErrTermNotFound + } + return nil, e + } + if t.SetCursor == "" { + // This must be an alias record, return it. + return t, nil + } + if t.Name == term { + return t, nil + } + for _, a := range t.Aliases { + if a == term { + return t, nil + } + } + } +} + +// LookupTerminfo attempts to find a definition for the named $TERM. +// It first looks in the builtin database, which should cover just about +// everyone. If it can't find one there, then it will attempt to read +// one from the JSON file located in either $TCELLDB, $HOME/.tcelldb +// or in this package's source directory as database.json). +func LookupTerminfo(name string) (*Terminfo, error) { + dblock.Lock() + t := terminfos[name] + dblock.Unlock() + + if t == nil { + + var files []string + letter := fmt.Sprintf("%02x", name[0]) + gzfile := path.Join(letter, name+".gz") + jsfile := path.Join(letter, name) + + // Build up the search path. Old versions of tcell used a + // single database file, whereas the new ones locate them + // in JSON (optionally compressed) files. + // + // The search path looks like: + // + // $TCELLDB/x/xterm.gz + // $TCELLDB/x/xterm + // $TCELLDB + // $HOME/.tcelldb/x/xterm.gz + // $HOME/.tcelldb/x/xterm + // $HOME/.tcelldb + // $GOPATH/terminfo/database/x/xterm.gz + // $GOPATH/terminfo/database/x/xterm + // + if pth := os.Getenv("TCELLDB"); pth != "" { + files = append(files, path.Join(pth, gzfile)) + files = append(files, path.Join(pth, jsfile)) + files = append(files, pth) + } + if pth := os.Getenv("HOME"); pth != "" { + pth = path.Join(pth, ".tcelldb") + files = append(files, path.Join(pth, gzfile)) + files = append(files, path.Join(pth, jsfile)) + files = append(files, pth) + } + + for _, pth := range strings.Split(os.Getenv("GOPATH"), string(os.PathListSeparator)) { + pth = path.Join(pth, "src", "github.com", "gdamore", "tcell", "terminfo", "database") + files = append(files, path.Join(pth, gzfile)) + files = append(files, path.Join(pth, jsfile)) + } + + for _, fname := range files { + t, _ = loadFromFile(fname, name) + if t != nil { + break + } + } + if t != nil { + if t.Name != name { + // Check for a database loop (no infinite + // recursion). + dblock.Lock() + if aliases[name] != "" { + dblock.Unlock() + return nil, ErrTermNotFound + } + aliases[name] = t.Name + dblock.Unlock() + return LookupTerminfo(t.Name) + } + dblock.Lock() + terminfos[name] = t + dblock.Unlock() + } + } + if t == nil { + return nil, ErrTermNotFound + } + return t, nil +} diff --git a/vendor/github.com/gdamore/tcell/tscreen.go b/vendor/github.com/gdamore/tcell/tscreen.go new file mode 100644 index 00000000..7e0d0b97 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/tscreen.go @@ -0,0 +1,1382 @@ +// Copyright 2017 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcell + +import ( + "bytes" + "io" + "os" + "strconv" + "sync" + "time" + "unicode/utf8" + + "golang.org/x/text/transform" + + "github.com/gdamore/tcell/terminfo" +) + +// NewTerminfoScreen returns a Screen that uses the stock TTY interface +// and POSIX termios, combined with a terminfo description taken from +// the $TERM environment variable. It returns an error if the terminal +// is not supported for any reason. +// +// For terminals that do not support dynamic resize events, the $LINES +// $COLUMNS environment variables can be set to the actual window size, +// otherwise defaults taken from the terminal database are used. +func NewTerminfoScreen() (Screen, error) { + ti, e := terminfo.LookupTerminfo(os.Getenv("TERM")) + if e != nil { + return nil, e + } + t := &tScreen{ti: ti} + + t.keyexist = make(map[Key]bool) + t.keycodes = make(map[string]*tKeyCode) + if len(ti.Mouse) > 0 { + t.mouse = []byte(ti.Mouse) + } + t.prepareKeys() + t.buildAcsMap() + t.sigwinch = make(chan os.Signal, 10) + t.fallback = make(map[rune]string) + for k, v := range RuneFallbacks { + t.fallback[k] = v + } + + return t, nil +} + +// tKeyCode represents a combination of a key code and modifiers. +type tKeyCode struct { + key Key + mod ModMask +} + +// tScreen represents a screen backed by a terminfo implementation. +type tScreen struct { + ti *terminfo.Terminfo + h int + w int + fini bool + cells CellBuffer + in *os.File + out *os.File + curstyle Style + style Style + evch chan Event + sigwinch chan os.Signal + quit chan struct{} + indoneq chan struct{} + keyexist map[Key]bool + keycodes map[string]*tKeyCode + keychan chan []byte + keytimer *time.Timer + keyexpire time.Time + cx int + cy int + mouse []byte + clear bool + cursorx int + cursory int + tiosp *termiosPrivate + baud int + wasbtn bool + acs map[rune]string + charset string + encoder transform.Transformer + decoder transform.Transformer + fallback map[rune]string + colors map[Color]Color + palette []Color + truecolor bool + escaped bool + buttondn bool + + sync.Mutex +} + +func (t *tScreen) Init() error { + t.evch = make(chan Event, 10) + t.indoneq = make(chan struct{}) + t.keychan = make(chan []byte, 10) + t.keytimer = time.NewTimer(time.Millisecond * 50) + t.charset = "UTF-8" + + t.charset = getCharset() + if enc := GetEncoding(t.charset); enc != nil { + t.encoder = enc.NewEncoder() + t.decoder = enc.NewDecoder() + } else { + return ErrNoCharset + } + ti := t.ti + + // environment overrides + w := ti.Columns + h := ti.Lines + if i, _ := strconv.Atoi(os.Getenv("LINES")); i != 0 { + h = i + } + if i, _ := strconv.Atoi(os.Getenv("COLUMNS")); i != 0 { + w = i + } + if e := t.termioInit(); e != nil { + return e + } + + if t.ti.SetFgBgRGB != "" || t.ti.SetFgRGB != "" || t.ti.SetBgRGB != "" { + t.truecolor = true + } + // A user who wants to have his themes honored can + // set this environment variable. + if os.Getenv("TCELL_TRUECOLOR") == "disable" { + t.truecolor = false + } + if !t.truecolor { + t.colors = make(map[Color]Color) + t.palette = make([]Color, t.Colors()) + for i := 0; i < t.Colors(); i++ { + t.palette[i] = Color(i) + // identity map for our builtin colors + t.colors[Color(i)] = Color(i) + } + } + + t.TPuts(ti.EnterCA) + t.TPuts(ti.HideCursor) + t.TPuts(ti.EnableAcs) + t.TPuts(ti.Clear) + + t.quit = make(chan struct{}) + + t.Lock() + t.cx = -1 + t.cy = -1 + t.style = StyleDefault + t.cells.Resize(w, h) + t.cursorx = -1 + t.cursory = -1 + t.resize() + t.Unlock() + + go t.mainLoop() + go t.inputLoop() + + return nil +} + +func (t *tScreen) prepareKeyMod(key Key, mod ModMask, val string) { + if val != "" { + // Do not overrride codes that already exist + if _, exist := t.keycodes[val]; !exist { + t.keyexist[key] = true + t.keycodes[val] = &tKeyCode{key: key, mod: mod} + } + } +} + +func (t *tScreen) prepareKey(key Key, val string) { + t.prepareKeyMod(key, ModNone, val) +} + +func (t *tScreen) prepareKeys() { + ti := t.ti + t.prepareKey(KeyBackspace, ti.KeyBackspace) + t.prepareKey(KeyF1, ti.KeyF1) + t.prepareKey(KeyF2, ti.KeyF2) + t.prepareKey(KeyF3, ti.KeyF3) + t.prepareKey(KeyF4, ti.KeyF4) + t.prepareKey(KeyF5, ti.KeyF5) + t.prepareKey(KeyF6, ti.KeyF6) + t.prepareKey(KeyF7, ti.KeyF7) + t.prepareKey(KeyF8, ti.KeyF8) + t.prepareKey(KeyF9, ti.KeyF9) + t.prepareKey(KeyF10, ti.KeyF10) + t.prepareKey(KeyF11, ti.KeyF11) + t.prepareKey(KeyF12, ti.KeyF12) + t.prepareKey(KeyF13, ti.KeyF13) + t.prepareKey(KeyF14, ti.KeyF14) + t.prepareKey(KeyF15, ti.KeyF15) + t.prepareKey(KeyF16, ti.KeyF16) + t.prepareKey(KeyF17, ti.KeyF17) + t.prepareKey(KeyF18, ti.KeyF18) + t.prepareKey(KeyF19, ti.KeyF19) + t.prepareKey(KeyF20, ti.KeyF20) + t.prepareKey(KeyF21, ti.KeyF21) + t.prepareKey(KeyF22, ti.KeyF22) + t.prepareKey(KeyF23, ti.KeyF23) + t.prepareKey(KeyF24, ti.KeyF24) + t.prepareKey(KeyF25, ti.KeyF25) + t.prepareKey(KeyF26, ti.KeyF26) + t.prepareKey(KeyF27, ti.KeyF27) + t.prepareKey(KeyF28, ti.KeyF28) + t.prepareKey(KeyF29, ti.KeyF29) + t.prepareKey(KeyF30, ti.KeyF30) + t.prepareKey(KeyF31, ti.KeyF31) + t.prepareKey(KeyF32, ti.KeyF32) + t.prepareKey(KeyF33, ti.KeyF33) + t.prepareKey(KeyF34, ti.KeyF34) + t.prepareKey(KeyF35, ti.KeyF35) + t.prepareKey(KeyF36, ti.KeyF36) + t.prepareKey(KeyF37, ti.KeyF37) + t.prepareKey(KeyF38, ti.KeyF38) + t.prepareKey(KeyF39, ti.KeyF39) + t.prepareKey(KeyF40, ti.KeyF40) + t.prepareKey(KeyF41, ti.KeyF41) + t.prepareKey(KeyF42, ti.KeyF42) + t.prepareKey(KeyF43, ti.KeyF43) + t.prepareKey(KeyF44, ti.KeyF44) + t.prepareKey(KeyF45, ti.KeyF45) + t.prepareKey(KeyF46, ti.KeyF46) + t.prepareKey(KeyF47, ti.KeyF47) + t.prepareKey(KeyF48, ti.KeyF48) + t.prepareKey(KeyF49, ti.KeyF49) + t.prepareKey(KeyF50, ti.KeyF50) + t.prepareKey(KeyF51, ti.KeyF51) + t.prepareKey(KeyF52, ti.KeyF52) + t.prepareKey(KeyF53, ti.KeyF53) + t.prepareKey(KeyF54, ti.KeyF54) + t.prepareKey(KeyF55, ti.KeyF55) + t.prepareKey(KeyF56, ti.KeyF56) + t.prepareKey(KeyF57, ti.KeyF57) + t.prepareKey(KeyF58, ti.KeyF58) + t.prepareKey(KeyF59, ti.KeyF59) + t.prepareKey(KeyF60, ti.KeyF60) + t.prepareKey(KeyF61, ti.KeyF61) + t.prepareKey(KeyF62, ti.KeyF62) + t.prepareKey(KeyF63, ti.KeyF63) + t.prepareKey(KeyF64, ti.KeyF64) + t.prepareKey(KeyInsert, ti.KeyInsert) + t.prepareKey(KeyDelete, ti.KeyDelete) + t.prepareKey(KeyHome, ti.KeyHome) + t.prepareKey(KeyEnd, ti.KeyEnd) + t.prepareKey(KeyUp, ti.KeyUp) + t.prepareKey(KeyDown, ti.KeyDown) + t.prepareKey(KeyLeft, ti.KeyLeft) + t.prepareKey(KeyRight, ti.KeyRight) + t.prepareKey(KeyPgUp, ti.KeyPgUp) + t.prepareKey(KeyPgDn, ti.KeyPgDn) + t.prepareKey(KeyHelp, ti.KeyHelp) + t.prepareKey(KeyPrint, ti.KeyPrint) + t.prepareKey(KeyCancel, ti.KeyCancel) + t.prepareKey(KeyExit, ti.KeyExit) + t.prepareKey(KeyBacktab, ti.KeyBacktab) + + t.prepareKeyMod(KeyRight, ModShift, ti.KeyShfRight) + t.prepareKeyMod(KeyLeft, ModShift, ti.KeyShfLeft) + t.prepareKeyMod(KeyUp, ModShift, ti.KeyShfUp) + t.prepareKeyMod(KeyDown, ModShift, ti.KeyShfDown) + t.prepareKeyMod(KeyHome, ModShift, ti.KeyShfHome) + t.prepareKeyMod(KeyEnd, ModShift, ti.KeyShfEnd) + + t.prepareKeyMod(KeyRight, ModCtrl, ti.KeyCtrlRight) + t.prepareKeyMod(KeyLeft, ModCtrl, ti.KeyCtrlLeft) + t.prepareKeyMod(KeyUp, ModCtrl, ti.KeyCtrlUp) + t.prepareKeyMod(KeyDown, ModCtrl, ti.KeyCtrlDown) + t.prepareKeyMod(KeyHome, ModCtrl, ti.KeyCtrlHome) + t.prepareKeyMod(KeyEnd, ModCtrl, ti.KeyCtrlEnd) + + t.prepareKeyMod(KeyRight, ModAlt, ti.KeyAltRight) + t.prepareKeyMod(KeyLeft, ModAlt, ti.KeyAltLeft) + t.prepareKeyMod(KeyUp, ModAlt, ti.KeyAltUp) + t.prepareKeyMod(KeyDown, ModAlt, ti.KeyAltDown) + t.prepareKeyMod(KeyHome, ModAlt, ti.KeyAltHome) + t.prepareKeyMod(KeyEnd, ModAlt, ti.KeyAltEnd) + + t.prepareKeyMod(KeyRight, ModAlt, ti.KeyMetaRight) + t.prepareKeyMod(KeyLeft, ModAlt, ti.KeyMetaLeft) + t.prepareKeyMod(KeyUp, ModAlt, ti.KeyMetaUp) + t.prepareKeyMod(KeyDown, ModAlt, ti.KeyMetaDown) + t.prepareKeyMod(KeyHome, ModAlt, ti.KeyMetaHome) + t.prepareKeyMod(KeyEnd, ModAlt, ti.KeyMetaEnd) + + t.prepareKeyMod(KeyRight, ModAlt|ModShift, ti.KeyAltShfRight) + t.prepareKeyMod(KeyLeft, ModAlt|ModShift, ti.KeyAltShfLeft) + t.prepareKeyMod(KeyUp, ModAlt|ModShift, ti.KeyAltShfUp) + t.prepareKeyMod(KeyDown, ModAlt|ModShift, ti.KeyAltShfDown) + t.prepareKeyMod(KeyHome, ModAlt|ModShift, ti.KeyAltShfHome) + t.prepareKeyMod(KeyEnd, ModAlt|ModShift, ti.KeyAltShfEnd) + + t.prepareKeyMod(KeyRight, ModAlt|ModShift, ti.KeyMetaShfRight) + t.prepareKeyMod(KeyLeft, ModAlt|ModShift, ti.KeyMetaShfLeft) + t.prepareKeyMod(KeyUp, ModAlt|ModShift, ti.KeyMetaShfUp) + t.prepareKeyMod(KeyDown, ModAlt|ModShift, ti.KeyMetaShfDown) + t.prepareKeyMod(KeyHome, ModAlt|ModShift, ti.KeyMetaShfHome) + t.prepareKeyMod(KeyEnd, ModAlt|ModShift, ti.KeyMetaShfEnd) + + t.prepareKeyMod(KeyRight, ModCtrl|ModShift, ti.KeyCtrlShfRight) + t.prepareKeyMod(KeyLeft, ModCtrl|ModShift, ti.KeyCtrlShfLeft) + t.prepareKeyMod(KeyUp, ModCtrl|ModShift, ti.KeyCtrlShfUp) + t.prepareKeyMod(KeyDown, ModCtrl|ModShift, ti.KeyCtrlShfDown) + t.prepareKeyMod(KeyHome, ModCtrl|ModShift, ti.KeyCtrlShfHome) + t.prepareKeyMod(KeyEnd, ModCtrl|ModShift, ti.KeyCtrlShfEnd) + + // Sadly, xterm handling of keycodes is somewhat erratic. In + // particular, different codes are sent depending on application + // mode is in use or not, and the entries for many of these are + // simply absent from terminfo on many systems. So we insert + // a number of escape sequences if they are not already used, in + // order to have the widest correct usage. Note that prepareKey + // will not inject codes if the escape sequence is already known. + // We also only do this for terminals that have the application + // mode present. + + // Cursor mode + if ti.EnterKeypad != "" { + t.prepareKey(KeyUp, "\x1b[A") + t.prepareKey(KeyDown, "\x1b[B") + t.prepareKey(KeyRight, "\x1b[C") + t.prepareKey(KeyLeft, "\x1b[D") + t.prepareKey(KeyEnd, "\x1b[F") + t.prepareKey(KeyHome, "\x1b[H") + t.prepareKey(KeyDelete, "\x1b[3~") + t.prepareKey(KeyHome, "\x1b[1~") + t.prepareKey(KeyEnd, "\x1b[4~") + t.prepareKey(KeyPgUp, "\x1b[5~") + t.prepareKey(KeyPgDn, "\x1b[6~") + + // Application mode + t.prepareKey(KeyUp, "\x1bOA") + t.prepareKey(KeyDown, "\x1bOB") + t.prepareKey(KeyRight, "\x1bOC") + t.prepareKey(KeyLeft, "\x1bOD") + t.prepareKey(KeyHome, "\x1bOH") + } + +outer: + // Add key mappings for control keys. + for i := 0; i < ' '; i++ { + // Do not insert direct key codes for ambiguous keys. + // For example, ESC is used for lots of other keys, so + // when parsing this we don't want to fast path handling + // of it, but instead wait a bit before parsing it as in + // isolation. + for esc := range t.keycodes { + if []byte(esc)[0] == byte(i) { + continue outer + } + } + + t.keyexist[Key(i)] = true + + mod := ModCtrl + switch Key(i) { + case KeyBS, KeyTAB, KeyESC, KeyCR: + // directly typeable- no control sequence + mod = ModNone + } + t.keycodes[string(rune(i))] = &tKeyCode{key: Key(i), mod: mod} + } +} + +func (t *tScreen) Fini() { + ti := t.ti + t.Lock() + t.cells.Resize(0, 0) + t.TPuts(ti.ShowCursor) + t.TPuts(ti.AttrOff) + t.TPuts(ti.Clear) + t.TPuts(ti.ExitCA) + t.TPuts(ti.ExitKeypad) + t.TPuts(ti.TParm(ti.MouseMode, 0)) + t.curstyle = Style(-1) + t.clear = false + t.fini = true + t.Unlock() + + if t.quit != nil { + close(t.quit) + } + t.termioFini() +} + +func (t *tScreen) SetStyle(style Style) { + t.Lock() + if !t.fini { + t.style = style + } + t.Unlock() +} + +func (t *tScreen) Clear() { + t.Fill(' ', t.style) +} + +func (t *tScreen) Fill(r rune, style Style) { + t.Lock() + if !t.fini { + t.cells.Fill(r, style) + } + t.Unlock() +} + +func (t *tScreen) SetContent(x, y int, mainc rune, combc []rune, style Style) { + t.Lock() + if !t.fini { + t.cells.SetContent(x, y, mainc, combc, style) + } + t.Unlock() +} + +func (t *tScreen) GetContent(x, y int) (rune, []rune, Style, int) { + t.Lock() + mainc, combc, style, width := t.cells.GetContent(x, y) + t.Unlock() + return mainc, combc, style, width +} + +func (t *tScreen) SetCell(x, y int, style Style, ch ...rune) { + if len(ch) > 0 { + t.SetContent(x, y, ch[0], ch[1:], style) + } else { + t.SetContent(x, y, ' ', nil, style) + } +} + +func (t *tScreen) encodeRune(r rune, buf []byte) []byte { + + nb := make([]byte, 6) + ob := make([]byte, 6) + num := utf8.EncodeRune(ob, r) + ob = ob[:num] + dst := 0 + var err error + if enc := t.encoder; enc != nil { + enc.Reset() + dst, _, err = enc.Transform(nb, ob, true) + } + if err != nil || dst == 0 || nb[0] == '\x1a' { + // Combining characters are elided + if len(buf) == 0 { + if acs, ok := t.acs[r]; ok { + buf = append(buf, []byte(acs)...) + } else if fb, ok := t.fallback[r]; ok { + buf = append(buf, []byte(fb)...) + } else { + buf = append(buf, '?') + } + } + } else { + buf = append(buf, nb[:dst]...) + } + + return buf +} + +func (t *tScreen) sendFgBg(fg Color, bg Color) { + ti := t.ti + if ti.Colors == 0 { + return + } + if t.truecolor { + if ti.SetFgBgRGB != "" && + fg != ColorDefault && bg != ColorDefault { + r1, g1, b1 := fg.RGB() + r2, g2, b2 := bg.RGB() + t.TPuts(ti.TParm(ti.SetFgBgRGB, + int(r1), int(g1), int(b1), + int(r2), int(g2), int(b2))) + } else { + if fg != ColorDefault && ti.SetFgRGB != "" { + r, g, b := fg.RGB() + t.TPuts(ti.TParm(ti.SetFgRGB, + int(r), int(g), int(b))) + } + if bg != ColorDefault && ti.SetBgRGB != "" { + r, g, b := bg.RGB() + t.TPuts(ti.TParm(ti.SetBgRGB, + int(r), int(g), int(b))) + } + } + return + } + + if fg != ColorDefault { + if v, ok := t.colors[fg]; ok { + fg = v + } else { + v = FindColor(fg, t.palette) + t.colors[fg] = v + fg = v + } + } + + if bg != ColorDefault { + if v, ok := t.colors[bg]; ok { + bg = v + } else { + v = FindColor(bg, t.palette) + t.colors[bg] = v + bg = v + } + } + + if ti.SetFgBg != "" && fg != ColorDefault && bg != ColorDefault { + t.TPuts(ti.TParm(ti.SetFgBg, int(fg), int(bg))) + } else { + if fg != ColorDefault && ti.SetFg != "" { + t.TPuts(ti.TParm(ti.SetFg, int(fg))) + } + if bg != ColorDefault && ti.SetBg != "" { + t.TPuts(ti.TParm(ti.SetBg, int(bg))) + } + } +} + +func (t *tScreen) drawCell(x, y int) int { + + ti := t.ti + + mainc, combc, style, width := t.cells.GetContent(x, y) + if !t.cells.Dirty(x, y) { + return width + } + + if t.cy != y || t.cx != x { + t.TPuts(ti.TGoto(x, y)) + t.cx = x + t.cy = y + } + + if style == StyleDefault { + style = t.style + } + if style != t.curstyle { + fg, bg, attrs := style.Decompose() + + t.TPuts(ti.AttrOff) + + t.sendFgBg(fg, bg) + if attrs&AttrBold != 0 { + t.TPuts(ti.Bold) + } + if attrs&AttrUnderline != 0 { + t.TPuts(ti.Underline) + } + if attrs&AttrReverse != 0 { + t.TPuts(ti.Reverse) + } + if attrs&AttrBlink != 0 { + t.TPuts(ti.Blink) + } + if attrs&AttrDim != 0 { + t.TPuts(ti.Dim) + } + t.curstyle = style + } + // now emit runes - taking care to not overrun width with a + // wide character, and to ensure that we emit exactly one regular + // character followed up by any residual combing characters + + if width < 1 { + width = 1 + } + + var str string + + buf := make([]byte, 0, 6) + + buf = t.encodeRune(mainc, buf) + for _, r := range combc { + buf = t.encodeRune(r, buf) + } + + str = string(buf) + if width > 1 && str == "?" { + // No FullWidth character support + str = "? " + t.cx = -1 + } + + // XXX: check for hazeltine not being able to display ~ + + if x > t.w-width { + // too wide to fit; emit a single space instead + width = 1 + str = " " + } + io.WriteString(t.out, str) + t.cx += width + t.cells.SetDirty(x, y, false) + if width > 1 { + t.cx = -1 + } + + return width +} + +func (t *tScreen) ShowCursor(x, y int) { + t.Lock() + t.cursorx = x + t.cursory = y + t.Unlock() +} + +func (t *tScreen) HideCursor() { + t.ShowCursor(-1, -1) +} + +func (t *tScreen) showCursor() { + + x, y := t.cursorx, t.cursory + w, h := t.cells.Size() + if x < 0 || y < 0 || x >= w || y >= h { + t.hideCursor() + return + } + t.TPuts(t.ti.TGoto(x, y)) + t.TPuts(t.ti.ShowCursor) + t.cx = x + t.cy = y +} + +func (t *tScreen) TPuts(s string) { + t.ti.TPuts(t.out, s, t.baud) +} + +func (t *tScreen) Show() { + t.Lock() + if !t.fini { + t.resize() + t.draw() + } + t.Unlock() +} + +func (t *tScreen) clearScreen() { + fg, bg, _ := t.style.Decompose() + t.sendFgBg(fg, bg) + t.TPuts(t.ti.Clear) + t.clear = false +} + +func (t *tScreen) hideCursor() { + // does not update cursor position + if t.ti.HideCursor != "" { + t.TPuts(t.ti.HideCursor) + } else { + // No way to hide cursor, stick it + // at bottom right of screen + t.cx, t.cy = t.cells.Size() + t.TPuts(t.ti.TGoto(t.cx, t.cy)) + } +} + +func (t *tScreen) draw() { + // clobber cursor position, because we're gonna change it all + t.cx = -1 + t.cy = -1 + + // hide the cursor while we move stuff around + t.hideCursor() + + if t.clear { + t.clearScreen() + } + + for y := 0; y < t.h; y++ { + for x := 0; x < t.w; x++ { + width := t.drawCell(x, y) + if width > 1 { + if x+1 < t.w { + // this is necessary so that if we ever + // go back to drawing that cell, we + // actually will *draw* it. + t.cells.SetDirty(x+1, y, true) + } + } + x += width - 1 + } + } + + // restore the cursor + t.showCursor() +} + +func (t *tScreen) EnableMouse() { + if len(t.mouse) != 0 { + t.TPuts(t.ti.TParm(t.ti.MouseMode, 1)) + } +} + +func (t *tScreen) DisableMouse() { + if len(t.mouse) != 0 { + t.TPuts(t.ti.TParm(t.ti.MouseMode, 0)) + } +} + +func (t *tScreen) Size() (int, int) { + t.Lock() + w, h := t.w, t.h + t.Unlock() + return w, h +} + +func (t *tScreen) resize() { + if w, h, e := t.getWinSize(); e == nil { + if w != t.w || h != t.h { + t.cx = -1 + t.cy = -1 + + t.cells.Resize(w, h) + t.cells.Invalidate() + t.h = h + t.w = w + ev := NewEventResize(w, h) + t.PostEvent(ev) + } + } +} + +func (t *tScreen) Colors() int { + // this doesn't change, no need for lock + if t.truecolor { + return 1 << 24 + } + return t.ti.Colors +} + +func (t *tScreen) PollEvent() Event { + select { + case <-t.quit: + return nil + case ev := <-t.evch: + return ev + } +} + +// vtACSNames is a map of bytes defined by terminfo that are used in +// the terminals Alternate Character Set to represent other glyphs. +// For example, the upper left corner of the box drawing set can be +// displayed by printing "l" while in the alternate character set. +// Its not quite that simple, since the "l" is the terminfo name, +// and it may be necessary to use a different character based on +// the terminal implementation (or the terminal may lack support for +// this altogether). See buildAcsMap below for detail. +var vtACSNames = map[byte]rune{ + '+': RuneRArrow, + ',': RuneLArrow, + '-': RuneUArrow, + '.': RuneDArrow, + '0': RuneBlock, + '`': RuneDiamond, + 'a': RuneCkBoard, + 'b': '␉', // VT100, Not defined by terminfo + 'c': '␌', // VT100, Not defined by terminfo + 'd': '␋', // VT100, Not defined by terminfo + 'e': '␊', // VT100, Not defined by terminfo + 'f': RuneDegree, + 'g': RunePlMinus, + 'h': RuneBoard, + 'i': RuneLantern, + 'j': RuneLRCorner, + 'k': RuneURCorner, + 'l': RuneULCorner, + 'm': RuneLLCorner, + 'n': RunePlus, + 'o': RuneS1, + 'p': RuneS3, + 'q': RuneHLine, + 'r': RuneS7, + 's': RuneS9, + 't': RuneLTee, + 'u': RuneRTee, + 'v': RuneBTee, + 'w': RuneTTee, + 'x': RuneVLine, + 'y': RuneLEqual, + 'z': RuneGEqual, + '{': RunePi, + '|': RuneNEqual, + '}': RuneSterling, + '~': RuneBullet, +} + +// buildAcsMap builds a map of characters that we translate from Unicode to +// alternate character encodings. To do this, we use the standard VT100 ACS +// maps. This is only done if the terminal lacks support for Unicode; we +// always prefer to emit Unicode glyphs when we are able. +func (t *tScreen) buildAcsMap() { + acsstr := t.ti.AltChars + t.acs = make(map[rune]string) + for len(acsstr) > 2 { + srcv := acsstr[0] + dstv := string(acsstr[1]) + if r, ok := vtACSNames[srcv]; ok { + t.acs[r] = t.ti.EnterAcs + dstv + t.ti.ExitAcs + } + acsstr = acsstr[2:] + } +} + +func (t *tScreen) PostEventWait(ev Event) { + t.evch <- ev +} + +func (t *tScreen) PostEvent(ev Event) error { + select { + case t.evch <- ev: + return nil + default: + return ErrEventQFull + } +} + +func (t *tScreen) clip(x, y int) (int, int) { + w, h := t.cells.Size() + if x < 0 { + x = 0 + } + if y < 0 { + y = 0 + } + if x > w-1 { + x = w - 1 + } + if y > h-1 { + y = h - 1 + } + return x, y +} + +func (t *tScreen) postMouseEvent(x, y, btn int) { + + // XTerm mouse events only report at most one button at a time, + // which may include a wheel button. Wheel motion events are + // reported as single impulses, while other button events are reported + // as separate press & release events. + + button := ButtonNone + mod := ModNone + + // Mouse wheel has bit 6 set, no release events. It should be noted + // that wheel events are sometimes misdelivered as mouse button events + // during a click-drag, so we debounce these, considering them to be + // button press events unless we see an intervening release event. + switch btn & 0x43 { + case 0: + button = Button1 + t.wasbtn = true + case 1: + button = Button2 + t.wasbtn = true + case 2: + button = Button3 + t.wasbtn = true + case 3: + button = ButtonNone + t.wasbtn = false + case 0x40: + if !t.wasbtn { + button = WheelUp + } else { + button = Button1 + } + case 0x41: + if !t.wasbtn { + button = WheelDown + } else { + button = Button2 + } + } + + if btn&0x4 != 0 { + mod |= ModShift + } + if btn&0x8 != 0 { + mod |= ModAlt + } + if btn&0x10 != 0 { + mod |= ModCtrl + } + + // Some terminals will report mouse coordinates outside the + // screen, especially with click-drag events. Clip the coordinates + // to the screen in that case. + x, y = t.clip(x, y) + + ev := NewEventMouse(x, y, button, mod) + t.PostEvent(ev) +} + +// parseSgrMouse attempts to locate an SGR mouse record at the start of the +// buffer. It returns true, true if it found one, and the associated bytes +// be removed from the buffer. It returns true, false if the buffer might +// contain such an event, but more bytes are necessary (partial match), and +// false, false if the content is definitely *not* an SGR mouse record. +func (t *tScreen) parseSgrMouse(buf *bytes.Buffer) (bool, bool) { + + b := buf.Bytes() + + var x, y, btn, state int + dig := false + neg := false + motion := false + i := 0 + val := 0 + + for i = range b { + switch b[i] { + case '\x1b': + if state != 0 { + return false, false + } + state = 1 + + case '\x9b': + if state != 0 { + return false, false + } + state = 2 + + case '[': + if state != 1 { + return false, false + } + state = 2 + + case '<': + if state != 2 { + return false, false + } + val = 0 + dig = false + neg = false + state = 3 + + case '-': + if state != 3 && state != 4 && state != 5 { + return false, false + } + if dig || neg { + return false, false + } + neg = true // stay in state + + case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': + if state != 3 && state != 4 && state != 5 { + return false, false + } + val *= 10 + val += int(b[i] - '0') + dig = true // stay in state + + case ';': + if neg { + val = -val + } + switch state { + case 3: + btn, val = val, 0 + neg, dig, state = false, false, 4 + case 4: + x, val = val-1, 0 + neg, dig, state = false, false, 5 + default: + return false, false + } + + case 'm', 'M': + if state != 5 { + return false, false + } + if neg { + val = -val + } + y = val - 1 + + motion = (btn & 32) != 0 + btn &^= 32 + if b[i] == 'm' { + // mouse release, clear all buttons + btn |= 3 + btn &^= 0x40 + t.buttondn = false + } else if motion { + /* + * Some broken terminals appear to send + * mouse button one motion events, instead of + * encoding 35 (no buttons) into these events. + * We resolve these by looking for a non-motion + * event first. + */ + if !t.buttondn { + btn |= 3 + btn &^= 0x40 + } + } else { + t.buttondn = true + } + // consume the event bytes + for i >= 0 { + buf.ReadByte() + i-- + } + t.postMouseEvent(x, y, btn) + return true, true + } + } + + // incomplete & inconclusve at this point + return true, false +} + +// parseXtermMouse is like parseSgrMouse, but it parses a legacy +// X11 mouse record. +func (t *tScreen) parseXtermMouse(buf *bytes.Buffer) (bool, bool) { + + b := buf.Bytes() + + state := 0 + btn := 0 + x := 0 + y := 0 + + for i := range b { + switch state { + case 0: + switch b[i] { + case '\x1b': + state = 1 + case '\x9b': + state = 2 + default: + return false, false + } + case 1: + if b[i] != '[' { + return false, false + } + state = 2 + case 2: + if b[i] != 'M' { + return false, false + } + state++ + case 3: + btn = int(b[i]) + state++ + case 4: + x = int(b[i]) - 32 - 1 + state++ + case 5: + y = int(b[i]) - 32 - 1 + for i >= 0 { + buf.ReadByte() + i-- + } + t.postMouseEvent(x, y, btn) + return true, true + } + } + return true, false +} + +func (t *tScreen) parseFunctionKey(buf *bytes.Buffer) (bool, bool) { + b := buf.Bytes() + partial := false + for e, k := range t.keycodes { + esc := []byte(e) + if (len(esc) == 1) && (esc[0] == '\x1b') { + continue + } + if bytes.HasPrefix(b, esc) { + // matched + var r rune + if len(esc) == 1 { + r = rune(b[0]) + } + mod := k.mod + if t.escaped { + mod |= ModAlt + t.escaped = false + } + ev := NewEventKey(k.key, r, mod) + t.PostEvent(ev) + for i := 0; i < len(esc); i++ { + buf.ReadByte() + } + return true, true + } + if bytes.HasPrefix(esc, b) { + partial = true + } + } + return partial, false +} + +func (t *tScreen) parseRune(buf *bytes.Buffer) (bool, bool) { + b := buf.Bytes() + if b[0] >= ' ' && b[0] <= 0x7F { + // printable ASCII easy to deal with -- no encodings + mod := ModNone + if t.escaped { + mod = ModAlt + t.escaped = false + } + ev := NewEventKey(KeyRune, rune(b[0]), mod) + t.PostEvent(ev) + buf.ReadByte() + return true, true + } + + if b[0] < 0x80 { + // Low numbered values are control keys, not runes. + return false, false + } + + utfb := make([]byte, 12) + for l := 1; l <= len(b); l++ { + t.decoder.Reset() + nout, nin, e := t.decoder.Transform(utfb, b[:l], true) + if e == transform.ErrShortSrc { + continue + } + if nout != 0 { + r, _ := utf8.DecodeRune(utfb[:nout]) + if r != utf8.RuneError { + mod := ModNone + if t.escaped { + mod = ModAlt + t.escaped = false + } + ev := NewEventKey(KeyRune, r, mod) + t.PostEvent(ev) + } + for nin > 0 { + buf.ReadByte() + nin-- + } + return true, true + } + } + // Looks like potential escape + return true, false +} + +func (t *tScreen) scanInput(buf *bytes.Buffer, expire bool) { + + t.Lock() + defer t.Unlock() + + for { + b := buf.Bytes() + if len(b) == 0 { + buf.Reset() + return + } + + partials := 0 + + if part, comp := t.parseRune(buf); comp { + continue + } else if part { + partials++ + } + + if part, comp := t.parseFunctionKey(buf); comp { + continue + } else if part { + partials++ + } + + // Only parse mouse records if this term claims to have + // mouse support + + if t.ti.Mouse != "" { + if part, comp := t.parseXtermMouse(buf); comp { + continue + } else if part { + partials++ + } + + if part, comp := t.parseSgrMouse(buf); comp { + continue + } else if part { + partials++ + } + } + + if partials == 0 || expire { + if b[0] == '\x1b' { + if len(b) == 1 { + ev := NewEventKey(KeyEsc, 0, ModNone) + t.PostEvent(ev) + t.escaped = false + } else { + t.escaped = true + } + buf.ReadByte() + continue + } + // Nothing was going to match, or we timed out + // waiting for more data -- just deliver the characters + // to the app & let them sort it out. Possibly we + // should only do this for control characters like ESC. + by, _ := buf.ReadByte() + mod := ModNone + if t.escaped { + t.escaped = false + mod = ModAlt + } + ev := NewEventKey(KeyRune, rune(by), mod) + t.PostEvent(ev) + continue + } + + // well we have some partial data, wait until we get + // some more + break + } +} + +func (t *tScreen) mainLoop() { + buf := &bytes.Buffer{} + for { + select { + case <-t.quit: + close(t.indoneq) + return + case <-t.sigwinch: + t.Lock() + t.cx = -1 + t.cy = -1 + t.resize() + t.cells.Invalidate() + t.draw() + t.Unlock() + continue + case <-t.keytimer.C: + // If the timer fired, and the current time + // is after the expiration of the escape sequence, + // then we assume the escape sequence reached it's + // conclusion, and process the chunk independently. + // This lets us detect conflicts such as a lone ESC. + if buf.Len() > 0 { + if time.Now().After(t.keyexpire) { + t.scanInput(buf, true) + } + } + if buf.Len() > 0 { + if !t.keytimer.Stop() { + select { + case <-t.keytimer.C: + default: + } + } + t.keytimer.Reset(time.Millisecond * 50) + } + case chunk := <-t.keychan: + buf.Write(chunk) + t.keyexpire = time.Now().Add(time.Millisecond * 50) + t.scanInput(buf, false) + if !t.keytimer.Stop() { + select { + case <-t.keytimer.C: + default: + } + } + if buf.Len() > 0 { + t.keytimer.Reset(time.Millisecond * 50) + } + } + } +} + +func (t *tScreen) inputLoop() { + + for { + chunk := make([]byte, 128) + n, e := t.in.Read(chunk) + switch e { + case io.EOF: + case nil: + default: + t.PostEvent(NewEventError(e)) + return + } + t.keychan <- chunk[:n] + } +} + +func (t *tScreen) Sync() { + t.Lock() + t.cx = -1 + t.cy = -1 + if !t.fini { + t.resize() + t.clear = true + t.cells.Invalidate() + t.draw() + } + t.Unlock() +} + +func (t *tScreen) CharacterSet() string { + return t.charset +} + +func (t *tScreen) RegisterRuneFallback(orig rune, fallback string) { + t.Lock() + t.fallback[orig] = fallback + t.Unlock() +} + +func (t *tScreen) UnregisterRuneFallback(orig rune) { + t.Lock() + delete(t.fallback, orig) + t.Unlock() +} + +func (t *tScreen) CanDisplay(r rune, checkFallbacks bool) bool { + + if enc := t.encoder; enc != nil { + nb := make([]byte, 6) + ob := make([]byte, 6) + num := utf8.EncodeRune(ob, r) + + enc.Reset() + dst, _, err := enc.Transform(nb, ob[:num], true) + if dst != 0 && err == nil && nb[0] != '\x1A' { + return true + } + } + // Terminal fallbacks always permitted, since we assume they are + // basically nearly perfect renditions. + if _, ok := t.acs[r]; ok { + return true + } + if !checkFallbacks { + return false + } + if _, ok := t.fallback[r]; ok { + return true + } + return false +} + +func (t *tScreen) HasMouse() bool { + return len(t.mouse) != 0 +} + +func (t *tScreen) HasKey(k Key) bool { + if k == KeyRune { + return true + } + return t.keyexist[k] +} + +func (t *tScreen) Resize(int, int, int, int) {} diff --git a/vendor/github.com/gdamore/tcell/tscreen_bsd.go b/vendor/github.com/gdamore/tcell/tscreen_bsd.go new file mode 100644 index 00000000..cce510ec --- /dev/null +++ b/vendor/github.com/gdamore/tcell/tscreen_bsd.go @@ -0,0 +1,119 @@ +// +build darwin freebsd netbsd openbsd dragonfly + +// Copyright 2017 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcell + +import ( + "os" + "os/signal" + "syscall" + "unsafe" +) + +type termiosPrivate syscall.Termios + +func (t *tScreen) termioInit() error { + var e error + var newtios termiosPrivate + var fd uintptr + var tios uintptr + var ioc uintptr + t.tiosp = &termiosPrivate{} + + if t.in, e = os.OpenFile("/dev/tty", os.O_RDONLY, 0); e != nil { + goto failed + } + if t.out, e = os.OpenFile("/dev/tty", os.O_WRONLY, 0); e != nil { + goto failed + } + + tios = uintptr(unsafe.Pointer(t.tiosp)) + ioc = uintptr(syscall.TIOCGETA) + fd = uintptr(t.out.Fd()) + if _, _, e1 := syscall.Syscall6(syscall.SYS_IOCTL, fd, ioc, tios, 0, 0, 0); e1 != 0 { + e = e1 + goto failed + } + + // On this platform (FreeBSD and family), the baud rate is stored + // directly as an integer in termios.c_ospeed. No bitmasking required. + t.baud = int(t.tiosp.Ospeed) + newtios = *t.tiosp + newtios.Iflag &^= syscall.IGNBRK | syscall.BRKINT | syscall.PARMRK | + syscall.ISTRIP | syscall.INLCR | syscall.IGNCR | + syscall.ICRNL | syscall.IXON + newtios.Oflag &^= syscall.OPOST + newtios.Lflag &^= syscall.ECHO | syscall.ECHONL | syscall.ICANON | + syscall.ISIG | syscall.IEXTEN + newtios.Cflag &^= syscall.CSIZE | syscall.PARENB + newtios.Cflag |= syscall.CS8 + + tios = uintptr(unsafe.Pointer(&newtios)) + + ioc = uintptr(syscall.TIOCSETA) + if _, _, e1 := syscall.Syscall6(syscall.SYS_IOCTL, fd, ioc, tios, 0, 0, 0); e1 != 0 { + e = e1 + goto failed + } + + signal.Notify(t.sigwinch, syscall.SIGWINCH) + + if w, h, e := t.getWinSize(); e == nil && w != 0 && h != 0 { + t.cells.Resize(w, h) + } + + return nil + +failed: + if t.in != nil { + t.in.Close() + } + if t.out != nil { + t.out.Close() + } + return e +} + +func (t *tScreen) termioFini() { + + signal.Stop(t.sigwinch) + + <-t.indoneq + + if t.out != nil { + fd := uintptr(t.out.Fd()) + ioc := uintptr(syscall.TIOCSETAF) + tios := uintptr(unsafe.Pointer(t.tiosp)) + syscall.Syscall6(syscall.SYS_IOCTL, fd, ioc, tios, 0, 0, 0) + t.out.Close() + } + if t.in != nil { + t.in.Close() + } +} + +func (t *tScreen) getWinSize() (int, int, error) { + + fd := uintptr(t.out.Fd()) + dim := [4]uint16{} + dimp := uintptr(unsafe.Pointer(&dim)) + ioc := uintptr(syscall.TIOCGWINSZ) + if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, + fd, ioc, dimp, 0, 0, 0); err != 0 { + return -1, -1, err + } + return int(dim[1]), int(dim[0]), nil +} diff --git a/vendor/github.com/gdamore/tcell/tscreen_linux.go b/vendor/github.com/gdamore/tcell/tscreen_linux.go new file mode 100644 index 00000000..79602f4c --- /dev/null +++ b/vendor/github.com/gdamore/tcell/tscreen_linux.go @@ -0,0 +1,129 @@ +// +build linux + +// Copyright 2017 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcell + +import ( + "os" + "os/signal" + "syscall" + "unsafe" +) + +type termiosPrivate syscall.Termios + +func (t *tScreen) termioInit() error { + var e error + var newtios termiosPrivate + var fd uintptr + var tios uintptr + var ioc uintptr + t.tiosp = &termiosPrivate{} + + if t.in, e = os.OpenFile("/dev/tty", os.O_RDONLY, 0); e != nil { + goto failed + } + if t.out, e = os.OpenFile("/dev/tty", os.O_WRONLY, 0); e != nil { + goto failed + } + + tios = uintptr(unsafe.Pointer(t.tiosp)) + ioc = uintptr(syscall.TCGETS) + fd = uintptr(t.out.Fd()) + if _, _, e1 := syscall.Syscall6(syscall.SYS_IOCTL, fd, ioc, tios, 0, 0, 0); e1 != 0 { + e = e1 + goto failed + } + + // On this platform, the baud rate is stored + // directly as an integer in termios.c_ospeed. + t.baud = int(t.tiosp.Ospeed) + newtios = *t.tiosp + newtios.Iflag &^= syscall.IGNBRK | syscall.BRKINT | syscall.PARMRK | + syscall.ISTRIP | syscall.INLCR | syscall.IGNCR | + syscall.ICRNL | syscall.IXON + newtios.Oflag &^= syscall.OPOST + newtios.Lflag &^= syscall.ECHO | syscall.ECHONL | syscall.ICANON | + syscall.ISIG | syscall.IEXTEN + newtios.Cflag &^= syscall.CSIZE | syscall.PARENB + newtios.Cflag |= syscall.CS8 + + // This is setup for blocking reads. In the past we attempted to + // use non-blocking reads, but now a separate input loop and timer + // copes with the problems we had on some systems (BSD/Darwin) + // where close hung forever. + newtios.Cc[syscall.VMIN] = 1 + newtios.Cc[syscall.VTIME] = 0 + + tios = uintptr(unsafe.Pointer(&newtios)) + + // Well this kind of sucks, because we don't have TCSETSF, but only + // TCSETS. This can leave some output unflushed. + ioc = uintptr(syscall.TCSETS) + if _, _, e1 := syscall.Syscall6(syscall.SYS_IOCTL, fd, ioc, tios, 0, 0, 0); e1 != 0 { + e = e1 + goto failed + } + + signal.Notify(t.sigwinch, syscall.SIGWINCH) + + if w, h, e := t.getWinSize(); e == nil && w != 0 && h != 0 { + t.cells.Resize(w, h) + } + + return nil + +failed: + if t.in != nil { + t.in.Close() + } + if t.out != nil { + t.out.Close() + } + return e +} + +func (t *tScreen) termioFini() { + + signal.Stop(t.sigwinch) + + <-t.indoneq + + if t.out != nil { + fd := uintptr(t.out.Fd()) + // XXX: We'd really rather do TCSETSF here! + ioc := uintptr(syscall.TCSETS) + tios := uintptr(unsafe.Pointer(t.tiosp)) + syscall.Syscall6(syscall.SYS_IOCTL, fd, ioc, tios, 0, 0, 0) + t.out.Close() + } + if t.in != nil { + t.in.Close() + } +} + +func (t *tScreen) getWinSize() (int, int, error) { + + fd := uintptr(t.out.Fd()) + dim := [4]uint16{} + dimp := uintptr(unsafe.Pointer(&dim)) + ioc := uintptr(syscall.TIOCGWINSZ) + if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, + fd, ioc, dimp, 0, 0, 0); err != 0 { + return -1, -1, err + } + return int(dim[1]), int(dim[0]), nil +} diff --git a/vendor/github.com/gdamore/tcell/tscreen_posix.go b/vendor/github.com/gdamore/tcell/tscreen_posix.go new file mode 100644 index 00000000..66fbe04b --- /dev/null +++ b/vendor/github.com/gdamore/tcell/tscreen_posix.go @@ -0,0 +1,206 @@ +// +build solaris + +// Copyright 2017 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcell + +import ( + "os" + "os/signal" + "syscall" +) + +// #include +// #include +// +// int getwinsize(int fd, int *cols, int *rows) { +// #if defined TIOCGWINSZ +// struct winsize w; +// if (ioctl(fd, TIOCGWINSZ, &w) < 0) { +// return (-1); +// } +// *cols = w.ws_col; +// *rows = w.ws_row; +// return (0); +// #else +// return (-1); +// #endif +// } +// +// int getbaud(struct termios *tios) { +// switch (cfgetospeed(tios)) { +// #ifdef B0 +// case B0: return (0); +// #endif +// #ifdef B50 +// case B50: return (50); +// #endif +// #ifdef B75 +// case B75: return (75); +// #endif +// #ifdef B110 +// case B110: return (110); +// #endif +// #ifdef B134 +// case B134: return (134); +// #endif +// #ifdef B150 +// case B150: return (150); +// #endif +// #ifdef B200 +// case B200: return (200); +// #endif +// #ifdef B300 +// case B300: return (300); +// #endif +// #ifdef B600 +// case B600: return (600); +// #endif +// #ifdef B1200 +// case B1200: return (1200); +// #endif +// #ifdef B1800 +// case B1800: return (1800); +// #endif +// #ifdef B2400 +// case B2400: return (2400); +// #endif +// #ifdef B4800 +// case B4800: return (4800); +// #endif +// #ifdef B9600 +// case B9600: return (9600); +// #endif +// #ifdef B19200 +// case B19200: return (19200); +// #endif +// #ifdef B38400 +// case B38400: return (38400); +// #endif +// #ifdef B57600 +// case B57600: return (57600); +// #endif +// #ifdef B76800 +// case B76800: return (76800); +// #endif +// #ifdef B115200 +// case B115200: return (115200); +// #endif +// #ifdef B153600 +// case B153600: return (153600); +// #endif +// #ifdef B230400 +// case B230400: return (230400); +// #endif +// #ifdef B307200 +// case B307200: return (307200); +// #endif +// #ifdef B460800 +// case B460800: return (460800); +// #endif +// #ifdef B921600 +// case B921600: return (921600); +// #endif +// } +// return (0); +// } +import "C" + +type termiosPrivate struct { + tios C.struct_termios +} + +func (t *tScreen) termioInit() error { + var e error + var rv C.int + var newtios C.struct_termios + var fd C.int + + if t.in, e = os.OpenFile("/dev/tty", os.O_RDONLY, 0); e != nil { + goto failed + } + if t.out, e = os.OpenFile("/dev/tty", os.O_WRONLY, 0); e != nil { + goto failed + } + + t.tiosp = &termiosPrivate{} + + fd = C.int(t.out.Fd()) + if rv, e = C.tcgetattr(fd, &t.tiosp.tios); rv != 0 { + goto failed + } + t.baud = int(C.getbaud(&t.tiosp.tios)) + newtios = t.tiosp.tios + newtios.c_iflag &^= C.IGNBRK | C.BRKINT | C.PARMRK | + C.ISTRIP | C.INLCR | C.IGNCR | + C.ICRNL | C.IXON + newtios.c_oflag &^= C.OPOST + newtios.c_lflag &^= C.ECHO | C.ECHONL | C.ICANON | + C.ISIG | C.IEXTEN + newtios.c_cflag &^= C.CSIZE | C.PARENB + newtios.c_cflag |= C.CS8 + + // This is setup for blocking reads. In the past we attempted to + // use non-blocking reads, but now a separate input loop and timer + // copes with the problems we had on some systems (BSD/Darwin) + // where close hung forever. + newtios.Cc[syscall.VMIN] = 1 + newtios.Cc[syscall.VTIME] = 0 + + if rv, e = C.tcsetattr(fd, C.TCSANOW|C.TCSAFLUSH, &newtios); rv != 0 { + goto failed + } + + signal.Notify(t.sigwinch, syscall.SIGWINCH) + + if w, h, e := t.getWinSize(); e == nil && w != 0 && h != 0 { + t.cells.Resize(w, h) + } + + return nil + +failed: + if t.in != nil { + t.in.Close() + } + if t.out != nil { + t.out.Close() + } + return e +} + +func (t *tScreen) termioFini() { + + signal.Stop(t.sigwinch) + + <-t.indoneq + + if t.out != nil { + fd := C.int(t.out.Fd()) + C.tcsetattr(fd, C.TCSANOW|C.TCSAFLUSH, &t.tiosp.tios) + t.out.Close() + } + if t.in != nil { + t.in.Close() + } +} + +func (t *tScreen) getWinSize() (int, int, error) { + var cx, cy C.int + if r, e := C.getwinsize(C.int(t.out.Fd()), &cx, &cy); r != 0 { + return 0, 0, e + } + return int(cx), int(cy), nil +} diff --git a/vendor/github.com/gdamore/tcell/tscreen_stub.go b/vendor/github.com/gdamore/tcell/tscreen_stub.go new file mode 100644 index 00000000..91de26e1 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/tscreen_stub.go @@ -0,0 +1,32 @@ +// +build nacl plan9 + +// Copyright 2015 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcell + +// This stub file is for systems that have no termios. + +type termiosPrivate struct{} + +func (t *tScreen) termioInit() error { + return ErrNoScreen +} + +func (t *tScreen) termioFini() { +} + +func (t *tScreen) getWinSize() (int, int, error) { + return 0, 0, ErrNoScreen +} diff --git a/vendor/github.com/gdamore/tcell/tscreen_windows.go b/vendor/github.com/gdamore/tcell/tscreen_windows.go new file mode 100644 index 00000000..daac0976 --- /dev/null +++ b/vendor/github.com/gdamore/tcell/tscreen_windows.go @@ -0,0 +1,40 @@ +// +build windows + +// Copyright 2015 The TCell Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use file except in compliance with the License. +// You may obtain a copy of the license at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcell + +// On Windows we don't have support for termios. We probably could, and +// may should, in a cygwin type environment. Its not clear how to make +// this all work nicely with both cygwin and Windows console, so we +// decline to do so here. + +func (t *tScreen) termioInit() error { + return ErrNoScreen +} + +func (t *tScreen) termioFini() { + return +} + +func (t *tScreen) getWinSize() (int, int, error) { + return 0, 0, ErrNoScreen +} + +func (t *tScreen) getCharset() string { + return "UTF-16LE" +} + +type termiosPrivate struct{} diff --git a/vendor/github.com/go-test/deep/.gitignore b/vendor/github.com/go-test/deep/.gitignore new file mode 100644 index 00000000..53f12f0f --- /dev/null +++ b/vendor/github.com/go-test/deep/.gitignore @@ -0,0 +1,2 @@ +*.swp +*.out diff --git a/vendor/github.com/go-test/deep/.travis.yml b/vendor/github.com/go-test/deep/.travis.yml new file mode 100644 index 00000000..2279c614 --- /dev/null +++ b/vendor/github.com/go-test/deep/.travis.yml @@ -0,0 +1,13 @@ +language: go + +go: + - 1.7 + - 1.8 + - 1.9 + +before_install: + - go get github.com/mattn/goveralls + - go get golang.org/x/tools/cover + +script: + - $HOME/gopath/bin/goveralls -service=travis-ci diff --git a/vendor/github.com/go-test/deep/CHANGES.md b/vendor/github.com/go-test/deep/CHANGES.md new file mode 100644 index 00000000..4351819d --- /dev/null +++ b/vendor/github.com/go-test/deep/CHANGES.md @@ -0,0 +1,9 @@ +# go-test/deep Changelog + +## v1.0.1 released 2018-01-28 + +* Fixed #12: Arrays are not properly compared (samlitowitz) + +## v1.0.0 releaesd 2017-10-27 + +* First release diff --git a/vendor/github.com/go-test/deep/LICENSE b/vendor/github.com/go-test/deep/LICENSE new file mode 100644 index 00000000..228ef16f --- /dev/null +++ b/vendor/github.com/go-test/deep/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright 2015-2017 Daniel Nichter + +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/go-test/deep/README.md b/vendor/github.com/go-test/deep/README.md new file mode 100644 index 00000000..3b78eac7 --- /dev/null +++ b/vendor/github.com/go-test/deep/README.md @@ -0,0 +1,51 @@ +# Deep Variable Equality for Humans + +[![Go Report Card](https://goreportcard.com/badge/github.com/go-test/deep)](https://goreportcard.com/report/github.com/go-test/deep) [![Build Status](https://travis-ci.org/go-test/deep.svg?branch=master)](https://travis-ci.org/go-test/deep) [![Coverage Status](https://coveralls.io/repos/github/go-test/deep/badge.svg?branch=master)](https://coveralls.io/github/go-test/deep?branch=master) [![GoDoc](https://godoc.org/github.com/go-test/deep?status.svg)](https://godoc.org/github.com/go-test/deep) + +This package provides a single function: `deep.Equal`. It's like [reflect.DeepEqual](http://golang.org/pkg/reflect/#DeepEqual) but much friendlier to humans (or any sentient being) for two reason: + +* `deep.Equal` returns a list of differences +* `deep.Equal` does not compare unexported fields (by default) + +`reflect.DeepEqual` is good (like all things Golang!), but it's a game of [Hunt the Wumpus](https://en.wikipedia.org/wiki/Hunt_the_Wumpus). For large maps, slices, and structs, finding the difference is difficult. + +`deep.Equal` doesn't play games with you, it lists the differences: + +```go +package main_test + +import ( + "testing" + "github.com/go-test/deep" +) + +type T struct { + Name string + Numbers []float64 +} + +func TestDeepEqual(t *testing.T) { + // Can you spot the difference? + t1 := T{ + Name: "Isabella", + Numbers: []float64{1.13459, 2.29343, 3.010100010}, + } + t2 := T{ + Name: "Isabella", + Numbers: []float64{1.13459, 2.29843, 3.010100010}, + } + + if diff := deep.Equal(t1, t2); diff != nil { + t.Error(diff) + } +} +``` + + +``` +$ go test +--- FAIL: TestDeepEqual (0.00s) + main_test.go:25: [Numbers.slice[1]: 2.29343 != 2.29843] +``` + +The difference is in `Numbers.slice[1]`: the two values aren't equal using Go `==`. diff --git a/vendor/github.com/go-test/deep/deep.go b/vendor/github.com/go-test/deep/deep.go new file mode 100644 index 00000000..4ea14cb0 --- /dev/null +++ b/vendor/github.com/go-test/deep/deep.go @@ -0,0 +1,352 @@ +// Package deep provides function deep.Equal which is like reflect.DeepEqual but +// returns a list of differences. This is helpful when comparing complex types +// like structures and maps. +package deep + +import ( + "errors" + "fmt" + "log" + "reflect" + "strings" +) + +var ( + // FloatPrecision is the number of decimal places to round float values + // to when comparing. + FloatPrecision = 10 + + // MaxDiff specifies the maximum number of differences to return. + MaxDiff = 10 + + // MaxDepth specifies the maximum levels of a struct to recurse into. + MaxDepth = 10 + + // LogErrors causes errors to be logged to STDERR when true. + LogErrors = false + + // CompareUnexportedFields causes unexported struct fields, like s in + // T{s int}, to be comparsed when true. + CompareUnexportedFields = false +) + +var ( + // ErrMaxRecursion is logged when MaxDepth is reached. + ErrMaxRecursion = errors.New("recursed to MaxDepth") + + // ErrTypeMismatch is logged when Equal passed two different types of values. + ErrTypeMismatch = errors.New("variables are different reflect.Type") + + // ErrNotHandled is logged when a primitive Go kind is not handled. + ErrNotHandled = errors.New("cannot compare the reflect.Kind") +) + +type cmp struct { + diff []string + buff []string + floatFormat string +} + +var errorType = reflect.TypeOf((*error)(nil)).Elem() + +// Equal compares variables a and b, recursing into their structure up to +// MaxDepth levels deep, and returns a list of differences, or nil if there are +// none. Some differences may not be found if an error is also returned. +// +// If a type has an Equal method, like time.Equal, it is called to check for +// equality. +func Equal(a, b interface{}) []string { + aVal := reflect.ValueOf(a) + bVal := reflect.ValueOf(b) + c := &cmp{ + diff: []string{}, + buff: []string{}, + floatFormat: fmt.Sprintf("%%.%df", FloatPrecision), + } + if a == nil && b == nil { + return nil + } else if a == nil && b != nil { + c.saveDiff(b, "") + } else if a != nil && b == nil { + c.saveDiff(a, "") + } + if len(c.diff) > 0 { + return c.diff + } + + c.equals(aVal, bVal, 0) + if len(c.diff) > 0 { + return c.diff // diffs + } + return nil // no diffs +} + +func (c *cmp) equals(a, b reflect.Value, level int) { + if level > MaxDepth { + logError(ErrMaxRecursion) + return + } + + // Check if one value is nil, e.g. T{x: *X} and T.x is nil + if !a.IsValid() || !b.IsValid() { + if a.IsValid() && !b.IsValid() { + c.saveDiff(a.Type(), "") + } else if !a.IsValid() && b.IsValid() { + c.saveDiff("", b.Type()) + } + return + } + + // If differenet types, they can't be equal + aType := a.Type() + bType := b.Type() + if aType != bType { + c.saveDiff(aType, bType) + logError(ErrTypeMismatch) + return + } + + // Primitive https://golang.org/pkg/reflect/#Kind + aKind := a.Kind() + bKind := b.Kind() + + // If both types implement the error interface, compare the error strings. + // This must be done before dereferencing because the interface is on a + // pointer receiver. + if aType.Implements(errorType) && bType.Implements(errorType) { + if a.Elem().IsValid() && b.Elem().IsValid() { // both err != nil + aString := a.MethodByName("Error").Call(nil)[0].String() + bString := b.MethodByName("Error").Call(nil)[0].String() + if aString != bString { + c.saveDiff(aString, bString) + } + return + } + } + + // Dereference pointers and interface{} + if aElem, bElem := (aKind == reflect.Ptr || aKind == reflect.Interface), + (bKind == reflect.Ptr || bKind == reflect.Interface); aElem || bElem { + + if aElem { + a = a.Elem() + } + + if bElem { + b = b.Elem() + } + + c.equals(a, b, level+1) + return + } + + // Types with an Equal(), like time.Time. + eqFunc := a.MethodByName("Equal") + if eqFunc.IsValid() { + retVals := eqFunc.Call([]reflect.Value{b}) + if !retVals[0].Bool() { + c.saveDiff(a, b) + } + return + } + + switch aKind { + + ///////////////////////////////////////////////////////////////////// + // Iterable kinds + ///////////////////////////////////////////////////////////////////// + + case reflect.Struct: + /* + The variables are structs like: + type T struct { + FirstName string + LastName string + } + Type = .T, Kind = reflect.Struct + + Iterate through the fields (FirstName, LastName), recurse into their values. + */ + for i := 0; i < a.NumField(); i++ { + if aType.Field(i).PkgPath != "" && !CompareUnexportedFields { + continue // skip unexported field, e.g. s in type T struct {s string} + } + + c.push(aType.Field(i).Name) // push field name to buff + + // Get the Value for each field, e.g. FirstName has Type = string, + // Kind = reflect.String. + af := a.Field(i) + bf := b.Field(i) + + // Recurse to compare the field values + c.equals(af, bf, level+1) + + c.pop() // pop field name from buff + + if len(c.diff) >= MaxDiff { + break + } + } + case reflect.Map: + /* + The variables are maps like: + map[string]int{ + "foo": 1, + "bar": 2, + } + Type = map[string]int, Kind = reflect.Map + + Or: + type T map[string]int{} + Type = .T, Kind = reflect.Map + + Iterate through the map keys (foo, bar), recurse into their values. + */ + + if a.IsNil() || b.IsNil() { + if a.IsNil() && !b.IsNil() { + c.saveDiff("", b) + } else if !a.IsNil() && b.IsNil() { + c.saveDiff(a, "") + } + return + } + + if a.Pointer() == b.Pointer() { + return + } + + for _, key := range a.MapKeys() { + c.push(fmt.Sprintf("map[%s]", key)) + + aVal := a.MapIndex(key) + bVal := b.MapIndex(key) + if bVal.IsValid() { + c.equals(aVal, bVal, level+1) + } else { + c.saveDiff(aVal, "") + } + + c.pop() + + if len(c.diff) >= MaxDiff { + return + } + } + + for _, key := range b.MapKeys() { + if aVal := a.MapIndex(key); aVal.IsValid() { + continue + } + + c.push(fmt.Sprintf("map[%s]", key)) + c.saveDiff("", b.MapIndex(key)) + c.pop() + if len(c.diff) >= MaxDiff { + return + } + } + case reflect.Array: + n := a.Len() + for i := 0; i < n; i++ { + c.push(fmt.Sprintf("array[%d]", i)) + c.equals(a.Index(i), b.Index(i), level+1) + c.pop() + if len(c.diff) >= MaxDiff { + break + } + } + case reflect.Slice: + if a.IsNil() || b.IsNil() { + if a.IsNil() && !b.IsNil() { + c.saveDiff("", b) + } else if !a.IsNil() && b.IsNil() { + c.saveDiff(a, "") + } + return + } + + if a.Pointer() == b.Pointer() { + return + } + + aLen := a.Len() + bLen := b.Len() + n := aLen + if bLen > aLen { + n = bLen + } + for i := 0; i < n; i++ { + c.push(fmt.Sprintf("slice[%d]", i)) + if i < aLen && i < bLen { + c.equals(a.Index(i), b.Index(i), level+1) + } else if i < aLen { + c.saveDiff(a.Index(i), "") + } else { + c.saveDiff("", b.Index(i)) + } + c.pop() + if len(c.diff) >= MaxDiff { + break + } + } + + ///////////////////////////////////////////////////////////////////// + // Primitive kinds + ///////////////////////////////////////////////////////////////////// + + case reflect.Float32, reflect.Float64: + // Avoid 0.04147685731961082 != 0.041476857319611 + // 6 decimal places is close enough + aval := fmt.Sprintf(c.floatFormat, a.Float()) + bval := fmt.Sprintf(c.floatFormat, b.Float()) + if aval != bval { + c.saveDiff(a.Float(), b.Float()) + } + case reflect.Bool: + if a.Bool() != b.Bool() { + c.saveDiff(a.Bool(), b.Bool()) + } + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + if a.Int() != b.Int() { + c.saveDiff(a.Int(), b.Int()) + } + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + if a.Uint() != b.Uint() { + c.saveDiff(a.Uint(), b.Uint()) + } + case reflect.String: + if a.String() != b.String() { + c.saveDiff(a.String(), b.String()) + } + + default: + logError(ErrNotHandled) + } +} + +func (c *cmp) push(name string) { + c.buff = append(c.buff, name) +} + +func (c *cmp) pop() { + if len(c.buff) > 0 { + c.buff = c.buff[0 : len(c.buff)-1] + } +} + +func (c *cmp) saveDiff(aval, bval interface{}) { + if len(c.buff) > 0 { + varName := strings.Join(c.buff, ".") + c.diff = append(c.diff, fmt.Sprintf("%s: %v != %v", varName, aval, bval)) + } else { + c.diff = append(c.diff, fmt.Sprintf("%v != %v", aval, bval)) + } +} + +func logError(err error) { + if LogErrors { + log.Println(err) + } +} diff --git a/vendor/github.com/golang/protobuf/AUTHORS b/vendor/github.com/golang/protobuf/AUTHORS new file mode 100644 index 00000000..15167cd7 --- /dev/null +++ b/vendor/github.com/golang/protobuf/AUTHORS @@ -0,0 +1,3 @@ +# This source code refers to The Go Authors for copyright purposes. +# The master list of authors is in the main Go distribution, +# visible at http://tip.golang.org/AUTHORS. diff --git a/vendor/github.com/golang/protobuf/CONTRIBUTORS b/vendor/github.com/golang/protobuf/CONTRIBUTORS new file mode 100644 index 00000000..1c4577e9 --- /dev/null +++ b/vendor/github.com/golang/protobuf/CONTRIBUTORS @@ -0,0 +1,3 @@ +# This source code was written by the Go contributors. +# The master list of contributors is in the main Go distribution, +# visible at http://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/github.com/golang/protobuf/LICENSE b/vendor/github.com/golang/protobuf/LICENSE new file mode 100644 index 00000000..1b1b1921 --- /dev/null +++ b/vendor/github.com/golang/protobuf/LICENSE @@ -0,0 +1,31 @@ +Go support for Protocol Buffers - Google's data interchange format + +Copyright 2010 The Go Authors. All rights reserved. +https://github.com/golang/protobuf + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/vendor/github.com/golang/protobuf/proto/clone.go b/vendor/github.com/golang/protobuf/proto/clone.go new file mode 100644 index 00000000..3cd3249f --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/clone.go @@ -0,0 +1,253 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2011 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Protocol buffer deep copy and merge. +// TODO: RawMessage. + +package proto + +import ( + "fmt" + "log" + "reflect" + "strings" +) + +// Clone returns a deep copy of a protocol buffer. +func Clone(src Message) Message { + in := reflect.ValueOf(src) + if in.IsNil() { + return src + } + out := reflect.New(in.Type().Elem()) + dst := out.Interface().(Message) + Merge(dst, src) + return dst +} + +// Merger is the interface representing objects that can merge messages of the same type. +type Merger interface { + // Merge merges src into this message. + // Required and optional fields that are set in src will be set to that value in dst. + // Elements of repeated fields will be appended. + // + // Merge may panic if called with a different argument type than the receiver. + Merge(src Message) +} + +// generatedMerger is the custom merge method that generated protos will have. +// We must add this method since a generate Merge method will conflict with +// many existing protos that have a Merge data field already defined. +type generatedMerger interface { + XXX_Merge(src Message) +} + +// Merge merges src into dst. +// Required and optional fields that are set in src will be set to that value in dst. +// Elements of repeated fields will be appended. +// Merge panics if src and dst are not the same type, or if dst is nil. +func Merge(dst, src Message) { + if m, ok := dst.(Merger); ok { + m.Merge(src) + return + } + + in := reflect.ValueOf(src) + out := reflect.ValueOf(dst) + if out.IsNil() { + panic("proto: nil destination") + } + if in.Type() != out.Type() { + panic(fmt.Sprintf("proto.Merge(%T, %T) type mismatch", dst, src)) + } + if in.IsNil() { + return // Merge from nil src is a noop + } + if m, ok := dst.(generatedMerger); ok { + m.XXX_Merge(src) + return + } + mergeStruct(out.Elem(), in.Elem()) +} + +func mergeStruct(out, in reflect.Value) { + sprop := GetProperties(in.Type()) + for i := 0; i < in.NumField(); i++ { + f := in.Type().Field(i) + if strings.HasPrefix(f.Name, "XXX_") { + continue + } + mergeAny(out.Field(i), in.Field(i), false, sprop.Prop[i]) + } + + if emIn, err := extendable(in.Addr().Interface()); err == nil { + emOut, _ := extendable(out.Addr().Interface()) + mIn, muIn := emIn.extensionsRead() + if mIn != nil { + mOut := emOut.extensionsWrite() + muIn.Lock() + mergeExtension(mOut, mIn) + muIn.Unlock() + } + } + + uf := in.FieldByName("XXX_unrecognized") + if !uf.IsValid() { + return + } + uin := uf.Bytes() + if len(uin) > 0 { + out.FieldByName("XXX_unrecognized").SetBytes(append([]byte(nil), uin...)) + } +} + +// mergeAny performs a merge between two values of the same type. +// viaPtr indicates whether the values were indirected through a pointer (implying proto2). +// prop is set if this is a struct field (it may be nil). +func mergeAny(out, in reflect.Value, viaPtr bool, prop *Properties) { + if in.Type() == protoMessageType { + if !in.IsNil() { + if out.IsNil() { + out.Set(reflect.ValueOf(Clone(in.Interface().(Message)))) + } else { + Merge(out.Interface().(Message), in.Interface().(Message)) + } + } + return + } + switch in.Kind() { + case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64, + reflect.String, reflect.Uint32, reflect.Uint64: + if !viaPtr && isProto3Zero(in) { + return + } + out.Set(in) + case reflect.Interface: + // Probably a oneof field; copy non-nil values. + if in.IsNil() { + return + } + // Allocate destination if it is not set, or set to a different type. + // Otherwise we will merge as normal. + if out.IsNil() || out.Elem().Type() != in.Elem().Type() { + out.Set(reflect.New(in.Elem().Elem().Type())) // interface -> *T -> T -> new(T) + } + mergeAny(out.Elem(), in.Elem(), false, nil) + case reflect.Map: + if in.Len() == 0 { + return + } + if out.IsNil() { + out.Set(reflect.MakeMap(in.Type())) + } + // For maps with value types of *T or []byte we need to deep copy each value. + elemKind := in.Type().Elem().Kind() + for _, key := range in.MapKeys() { + var val reflect.Value + switch elemKind { + case reflect.Ptr: + val = reflect.New(in.Type().Elem().Elem()) + mergeAny(val, in.MapIndex(key), false, nil) + case reflect.Slice: + val = in.MapIndex(key) + val = reflect.ValueOf(append([]byte{}, val.Bytes()...)) + default: + val = in.MapIndex(key) + } + out.SetMapIndex(key, val) + } + case reflect.Ptr: + if in.IsNil() { + return + } + if out.IsNil() { + out.Set(reflect.New(in.Elem().Type())) + } + mergeAny(out.Elem(), in.Elem(), true, nil) + case reflect.Slice: + if in.IsNil() { + return + } + if in.Type().Elem().Kind() == reflect.Uint8 { + // []byte is a scalar bytes field, not a repeated field. + + // Edge case: if this is in a proto3 message, a zero length + // bytes field is considered the zero value, and should not + // be merged. + if prop != nil && prop.proto3 && in.Len() == 0 { + return + } + + // Make a deep copy. + // Append to []byte{} instead of []byte(nil) so that we never end up + // with a nil result. + out.SetBytes(append([]byte{}, in.Bytes()...)) + return + } + n := in.Len() + if out.IsNil() { + out.Set(reflect.MakeSlice(in.Type(), 0, n)) + } + switch in.Type().Elem().Kind() { + case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64, + reflect.String, reflect.Uint32, reflect.Uint64: + out.Set(reflect.AppendSlice(out, in)) + default: + for i := 0; i < n; i++ { + x := reflect.Indirect(reflect.New(in.Type().Elem())) + mergeAny(x, in.Index(i), false, nil) + out.Set(reflect.Append(out, x)) + } + } + case reflect.Struct: + mergeStruct(out, in) + default: + // unknown type, so not a protocol buffer + log.Printf("proto: don't know how to copy %v", in) + } +} + +func mergeExtension(out, in map[int32]Extension) { + for extNum, eIn := range in { + eOut := Extension{desc: eIn.desc} + if eIn.value != nil { + v := reflect.New(reflect.TypeOf(eIn.value)).Elem() + mergeAny(v, reflect.ValueOf(eIn.value), false, nil) + eOut.value = v.Interface() + } + if eIn.enc != nil { + eOut.enc = make([]byte, len(eIn.enc)) + copy(eOut.enc, eIn.enc) + } + + out[extNum] = eOut + } +} diff --git a/vendor/github.com/golang/protobuf/proto/decode.go b/vendor/github.com/golang/protobuf/proto/decode.go new file mode 100644 index 00000000..d9aa3c42 --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/decode.go @@ -0,0 +1,428 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +/* + * Routines for decoding protocol buffer data to construct in-memory representations. + */ + +import ( + "errors" + "fmt" + "io" +) + +// errOverflow is returned when an integer is too large to be represented. +var errOverflow = errors.New("proto: integer overflow") + +// ErrInternalBadWireType is returned by generated code when an incorrect +// wire type is encountered. It does not get returned to user code. +var ErrInternalBadWireType = errors.New("proto: internal error: bad wiretype for oneof") + +// DecodeVarint reads a varint-encoded integer from the slice. +// It returns the integer and the number of bytes consumed, or +// zero if there is not enough. +// This is the format for the +// int32, int64, uint32, uint64, bool, and enum +// protocol buffer types. +func DecodeVarint(buf []byte) (x uint64, n int) { + for shift := uint(0); shift < 64; shift += 7 { + if n >= len(buf) { + return 0, 0 + } + b := uint64(buf[n]) + n++ + x |= (b & 0x7F) << shift + if (b & 0x80) == 0 { + return x, n + } + } + + // The number is too large to represent in a 64-bit value. + return 0, 0 +} + +func (p *Buffer) decodeVarintSlow() (x uint64, err error) { + i := p.index + l := len(p.buf) + + for shift := uint(0); shift < 64; shift += 7 { + if i >= l { + err = io.ErrUnexpectedEOF + return + } + b := p.buf[i] + i++ + x |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + p.index = i + return + } + } + + // The number is too large to represent in a 64-bit value. + err = errOverflow + return +} + +// DecodeVarint reads a varint-encoded integer from the Buffer. +// This is the format for the +// int32, int64, uint32, uint64, bool, and enum +// protocol buffer types. +func (p *Buffer) DecodeVarint() (x uint64, err error) { + i := p.index + buf := p.buf + + if i >= len(buf) { + return 0, io.ErrUnexpectedEOF + } else if buf[i] < 0x80 { + p.index++ + return uint64(buf[i]), nil + } else if len(buf)-i < 10 { + return p.decodeVarintSlow() + } + + var b uint64 + // we already checked the first byte + x = uint64(buf[i]) - 0x80 + i++ + + b = uint64(buf[i]) + i++ + x += b << 7 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 7 + + b = uint64(buf[i]) + i++ + x += b << 14 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 14 + + b = uint64(buf[i]) + i++ + x += b << 21 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 21 + + b = uint64(buf[i]) + i++ + x += b << 28 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 28 + + b = uint64(buf[i]) + i++ + x += b << 35 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 35 + + b = uint64(buf[i]) + i++ + x += b << 42 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 42 + + b = uint64(buf[i]) + i++ + x += b << 49 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 49 + + b = uint64(buf[i]) + i++ + x += b << 56 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 56 + + b = uint64(buf[i]) + i++ + x += b << 63 + if b&0x80 == 0 { + goto done + } + // x -= 0x80 << 63 // Always zero. + + return 0, errOverflow + +done: + p.index = i + return x, nil +} + +// DecodeFixed64 reads a 64-bit integer from the Buffer. +// This is the format for the +// fixed64, sfixed64, and double protocol buffer types. +func (p *Buffer) DecodeFixed64() (x uint64, err error) { + // x, err already 0 + i := p.index + 8 + if i < 0 || i > len(p.buf) { + err = io.ErrUnexpectedEOF + return + } + p.index = i + + x = uint64(p.buf[i-8]) + x |= uint64(p.buf[i-7]) << 8 + x |= uint64(p.buf[i-6]) << 16 + x |= uint64(p.buf[i-5]) << 24 + x |= uint64(p.buf[i-4]) << 32 + x |= uint64(p.buf[i-3]) << 40 + x |= uint64(p.buf[i-2]) << 48 + x |= uint64(p.buf[i-1]) << 56 + return +} + +// DecodeFixed32 reads a 32-bit integer from the Buffer. +// This is the format for the +// fixed32, sfixed32, and float protocol buffer types. +func (p *Buffer) DecodeFixed32() (x uint64, err error) { + // x, err already 0 + i := p.index + 4 + if i < 0 || i > len(p.buf) { + err = io.ErrUnexpectedEOF + return + } + p.index = i + + x = uint64(p.buf[i-4]) + x |= uint64(p.buf[i-3]) << 8 + x |= uint64(p.buf[i-2]) << 16 + x |= uint64(p.buf[i-1]) << 24 + return +} + +// DecodeZigzag64 reads a zigzag-encoded 64-bit integer +// from the Buffer. +// This is the format used for the sint64 protocol buffer type. +func (p *Buffer) DecodeZigzag64() (x uint64, err error) { + x, err = p.DecodeVarint() + if err != nil { + return + } + x = (x >> 1) ^ uint64((int64(x&1)<<63)>>63) + return +} + +// DecodeZigzag32 reads a zigzag-encoded 32-bit integer +// from the Buffer. +// This is the format used for the sint32 protocol buffer type. +func (p *Buffer) DecodeZigzag32() (x uint64, err error) { + x, err = p.DecodeVarint() + if err != nil { + return + } + x = uint64((uint32(x) >> 1) ^ uint32((int32(x&1)<<31)>>31)) + return +} + +// DecodeRawBytes reads a count-delimited byte buffer from the Buffer. +// This is the format used for the bytes protocol buffer +// type and for embedded messages. +func (p *Buffer) DecodeRawBytes(alloc bool) (buf []byte, err error) { + n, err := p.DecodeVarint() + if err != nil { + return nil, err + } + + nb := int(n) + if nb < 0 { + return nil, fmt.Errorf("proto: bad byte length %d", nb) + } + end := p.index + nb + if end < p.index || end > len(p.buf) { + return nil, io.ErrUnexpectedEOF + } + + if !alloc { + // todo: check if can get more uses of alloc=false + buf = p.buf[p.index:end] + p.index += nb + return + } + + buf = make([]byte, nb) + copy(buf, p.buf[p.index:]) + p.index += nb + return +} + +// DecodeStringBytes reads an encoded string from the Buffer. +// This is the format used for the proto2 string type. +func (p *Buffer) DecodeStringBytes() (s string, err error) { + buf, err := p.DecodeRawBytes(false) + if err != nil { + return + } + return string(buf), nil +} + +// Unmarshaler is the interface representing objects that can +// unmarshal themselves. The argument points to data that may be +// overwritten, so implementations should not keep references to the +// buffer. +// Unmarshal implementations should not clear the receiver. +// Any unmarshaled data should be merged into the receiver. +// Callers of Unmarshal that do not want to retain existing data +// should Reset the receiver before calling Unmarshal. +type Unmarshaler interface { + Unmarshal([]byte) error +} + +// newUnmarshaler is the interface representing objects that can +// unmarshal themselves. The semantics are identical to Unmarshaler. +// +// This exists to support protoc-gen-go generated messages. +// The proto package will stop type-asserting to this interface in the future. +// +// DO NOT DEPEND ON THIS. +type newUnmarshaler interface { + XXX_Unmarshal([]byte) error +} + +// Unmarshal parses the protocol buffer representation in buf and places the +// decoded result in pb. If the struct underlying pb does not match +// the data in buf, the results can be unpredictable. +// +// Unmarshal resets pb before starting to unmarshal, so any +// existing data in pb is always removed. Use UnmarshalMerge +// to preserve and append to existing data. +func Unmarshal(buf []byte, pb Message) error { + pb.Reset() + if u, ok := pb.(newUnmarshaler); ok { + return u.XXX_Unmarshal(buf) + } + if u, ok := pb.(Unmarshaler); ok { + return u.Unmarshal(buf) + } + return NewBuffer(buf).Unmarshal(pb) +} + +// UnmarshalMerge parses the protocol buffer representation in buf and +// writes the decoded result to pb. If the struct underlying pb does not match +// the data in buf, the results can be unpredictable. +// +// UnmarshalMerge merges into existing data in pb. +// Most code should use Unmarshal instead. +func UnmarshalMerge(buf []byte, pb Message) error { + if u, ok := pb.(newUnmarshaler); ok { + return u.XXX_Unmarshal(buf) + } + if u, ok := pb.(Unmarshaler); ok { + // NOTE: The history of proto have unfortunately been inconsistent + // whether Unmarshaler should or should not implicitly clear itself. + // Some implementations do, most do not. + // Thus, calling this here may or may not do what people want. + // + // See https://github.com/golang/protobuf/issues/424 + return u.Unmarshal(buf) + } + return NewBuffer(buf).Unmarshal(pb) +} + +// DecodeMessage reads a count-delimited message from the Buffer. +func (p *Buffer) DecodeMessage(pb Message) error { + enc, err := p.DecodeRawBytes(false) + if err != nil { + return err + } + return NewBuffer(enc).Unmarshal(pb) +} + +// DecodeGroup reads a tag-delimited group from the Buffer. +// StartGroup tag is already consumed. This function consumes +// EndGroup tag. +func (p *Buffer) DecodeGroup(pb Message) error { + b := p.buf[p.index:] + x, y := findEndGroup(b) + if x < 0 { + return io.ErrUnexpectedEOF + } + err := Unmarshal(b[:x], pb) + p.index += y + return err +} + +// Unmarshal parses the protocol buffer representation in the +// Buffer and places the decoded result in pb. If the struct +// underlying pb does not match the data in the buffer, the results can be +// unpredictable. +// +// Unlike proto.Unmarshal, this does not reset pb before starting to unmarshal. +func (p *Buffer) Unmarshal(pb Message) error { + // If the object can unmarshal itself, let it. + if u, ok := pb.(newUnmarshaler); ok { + err := u.XXX_Unmarshal(p.buf[p.index:]) + p.index = len(p.buf) + return err + } + if u, ok := pb.(Unmarshaler); ok { + // NOTE: The history of proto have unfortunately been inconsistent + // whether Unmarshaler should or should not implicitly clear itself. + // Some implementations do, most do not. + // Thus, calling this here may or may not do what people want. + // + // See https://github.com/golang/protobuf/issues/424 + err := u.Unmarshal(p.buf[p.index:]) + p.index = len(p.buf) + return err + } + + // Slow workaround for messages that aren't Unmarshalers. + // This includes some hand-coded .pb.go files and + // bootstrap protos. + // TODO: fix all of those and then add Unmarshal to + // the Message interface. Then: + // The cast above and code below can be deleted. + // The old unmarshaler can be deleted. + // Clients can call Unmarshal directly (can already do that, actually). + var info InternalMessageInfo + err := info.Unmarshal(pb, p.buf[p.index:]) + p.index = len(p.buf) + return err +} diff --git a/vendor/github.com/golang/protobuf/proto/discard.go b/vendor/github.com/golang/protobuf/proto/discard.go new file mode 100644 index 00000000..dea2617c --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/discard.go @@ -0,0 +1,350 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2017 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +import ( + "fmt" + "reflect" + "strings" + "sync" + "sync/atomic" +) + +type generatedDiscarder interface { + XXX_DiscardUnknown() +} + +// DiscardUnknown recursively discards all unknown fields from this message +// and all embedded messages. +// +// When unmarshaling a message with unrecognized fields, the tags and values +// of such fields are preserved in the Message. This allows a later call to +// marshal to be able to produce a message that continues to have those +// unrecognized fields. To avoid this, DiscardUnknown is used to +// explicitly clear the unknown fields after unmarshaling. +// +// For proto2 messages, the unknown fields of message extensions are only +// discarded from messages that have been accessed via GetExtension. +func DiscardUnknown(m Message) { + if m, ok := m.(generatedDiscarder); ok { + m.XXX_DiscardUnknown() + return + } + // TODO: Dynamically populate a InternalMessageInfo for legacy messages, + // but the master branch has no implementation for InternalMessageInfo, + // so it would be more work to replicate that approach. + discardLegacy(m) +} + +// DiscardUnknown recursively discards all unknown fields. +func (a *InternalMessageInfo) DiscardUnknown(m Message) { + di := atomicLoadDiscardInfo(&a.discard) + if di == nil { + di = getDiscardInfo(reflect.TypeOf(m).Elem()) + atomicStoreDiscardInfo(&a.discard, di) + } + di.discard(toPointer(&m)) +} + +type discardInfo struct { + typ reflect.Type + + initialized int32 // 0: only typ is valid, 1: everything is valid + lock sync.Mutex + + fields []discardFieldInfo + unrecognized field +} + +type discardFieldInfo struct { + field field // Offset of field, guaranteed to be valid + discard func(src pointer) +} + +var ( + discardInfoMap = map[reflect.Type]*discardInfo{} + discardInfoLock sync.Mutex +) + +func getDiscardInfo(t reflect.Type) *discardInfo { + discardInfoLock.Lock() + defer discardInfoLock.Unlock() + di := discardInfoMap[t] + if di == nil { + di = &discardInfo{typ: t} + discardInfoMap[t] = di + } + return di +} + +func (di *discardInfo) discard(src pointer) { + if src.isNil() { + return // Nothing to do. + } + + if atomic.LoadInt32(&di.initialized) == 0 { + di.computeDiscardInfo() + } + + for _, fi := range di.fields { + sfp := src.offset(fi.field) + fi.discard(sfp) + } + + // For proto2 messages, only discard unknown fields in message extensions + // that have been accessed via GetExtension. + if em, err := extendable(src.asPointerTo(di.typ).Interface()); err == nil { + // Ignore lock since DiscardUnknown is not concurrency safe. + emm, _ := em.extensionsRead() + for _, mx := range emm { + if m, ok := mx.value.(Message); ok { + DiscardUnknown(m) + } + } + } + + if di.unrecognized.IsValid() { + *src.offset(di.unrecognized).toBytes() = nil + } +} + +func (di *discardInfo) computeDiscardInfo() { + di.lock.Lock() + defer di.lock.Unlock() + if di.initialized != 0 { + return + } + t := di.typ + n := t.NumField() + + for i := 0; i < n; i++ { + f := t.Field(i) + if strings.HasPrefix(f.Name, "XXX_") { + continue + } + + dfi := discardFieldInfo{field: toField(&f)} + tf := f.Type + + // Unwrap tf to get its most basic type. + var isPointer, isSlice bool + if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 { + isSlice = true + tf = tf.Elem() + } + if tf.Kind() == reflect.Ptr { + isPointer = true + tf = tf.Elem() + } + if isPointer && isSlice && tf.Kind() != reflect.Struct { + panic(fmt.Sprintf("%v.%s cannot be a slice of pointers to primitive types", t, f.Name)) + } + + switch tf.Kind() { + case reflect.Struct: + switch { + case !isPointer: + panic(fmt.Sprintf("%v.%s cannot be a direct struct value", t, f.Name)) + case isSlice: // E.g., []*pb.T + di := getDiscardInfo(tf) + dfi.discard = func(src pointer) { + sps := src.getPointerSlice() + for _, sp := range sps { + if !sp.isNil() { + di.discard(sp) + } + } + } + default: // E.g., *pb.T + di := getDiscardInfo(tf) + dfi.discard = func(src pointer) { + sp := src.getPointer() + if !sp.isNil() { + di.discard(sp) + } + } + } + case reflect.Map: + switch { + case isPointer || isSlice: + panic(fmt.Sprintf("%v.%s cannot be a pointer to a map or a slice of map values", t, f.Name)) + default: // E.g., map[K]V + if tf.Elem().Kind() == reflect.Ptr { // Proto struct (e.g., *T) + dfi.discard = func(src pointer) { + sm := src.asPointerTo(tf).Elem() + if sm.Len() == 0 { + return + } + for _, key := range sm.MapKeys() { + val := sm.MapIndex(key) + DiscardUnknown(val.Interface().(Message)) + } + } + } else { + dfi.discard = func(pointer) {} // Noop + } + } + case reflect.Interface: + // Must be oneof field. + switch { + case isPointer || isSlice: + panic(fmt.Sprintf("%v.%s cannot be a pointer to a interface or a slice of interface values", t, f.Name)) + default: // E.g., interface{} + // TODO: Make this faster? + dfi.discard = func(src pointer) { + su := src.asPointerTo(tf).Elem() + if !su.IsNil() { + sv := su.Elem().Elem().Field(0) + if sv.Kind() == reflect.Ptr && sv.IsNil() { + return + } + switch sv.Type().Kind() { + case reflect.Ptr: // Proto struct (e.g., *T) + DiscardUnknown(sv.Interface().(Message)) + } + } + } + } + default: + continue + } + di.fields = append(di.fields, dfi) + } + + di.unrecognized = invalidField + if f, ok := t.FieldByName("XXX_unrecognized"); ok { + if f.Type != reflect.TypeOf([]byte{}) { + panic("expected XXX_unrecognized to be of type []byte") + } + di.unrecognized = toField(&f) + } + + atomic.StoreInt32(&di.initialized, 1) +} + +func discardLegacy(m Message) { + v := reflect.ValueOf(m) + if v.Kind() != reflect.Ptr || v.IsNil() { + return + } + v = v.Elem() + if v.Kind() != reflect.Struct { + return + } + t := v.Type() + + for i := 0; i < v.NumField(); i++ { + f := t.Field(i) + if strings.HasPrefix(f.Name, "XXX_") { + continue + } + vf := v.Field(i) + tf := f.Type + + // Unwrap tf to get its most basic type. + var isPointer, isSlice bool + if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 { + isSlice = true + tf = tf.Elem() + } + if tf.Kind() == reflect.Ptr { + isPointer = true + tf = tf.Elem() + } + if isPointer && isSlice && tf.Kind() != reflect.Struct { + panic(fmt.Sprintf("%T.%s cannot be a slice of pointers to primitive types", m, f.Name)) + } + + switch tf.Kind() { + case reflect.Struct: + switch { + case !isPointer: + panic(fmt.Sprintf("%T.%s cannot be a direct struct value", m, f.Name)) + case isSlice: // E.g., []*pb.T + for j := 0; j < vf.Len(); j++ { + discardLegacy(vf.Index(j).Interface().(Message)) + } + default: // E.g., *pb.T + discardLegacy(vf.Interface().(Message)) + } + case reflect.Map: + switch { + case isPointer || isSlice: + panic(fmt.Sprintf("%T.%s cannot be a pointer to a map or a slice of map values", m, f.Name)) + default: // E.g., map[K]V + tv := vf.Type().Elem() + if tv.Kind() == reflect.Ptr && tv.Implements(protoMessageType) { // Proto struct (e.g., *T) + for _, key := range vf.MapKeys() { + val := vf.MapIndex(key) + discardLegacy(val.Interface().(Message)) + } + } + } + case reflect.Interface: + // Must be oneof field. + switch { + case isPointer || isSlice: + panic(fmt.Sprintf("%T.%s cannot be a pointer to a interface or a slice of interface values", m, f.Name)) + default: // E.g., test_proto.isCommunique_Union interface + if !vf.IsNil() && f.Tag.Get("protobuf_oneof") != "" { + vf = vf.Elem() // E.g., *test_proto.Communique_Msg + if !vf.IsNil() { + vf = vf.Elem() // E.g., test_proto.Communique_Msg + vf = vf.Field(0) // E.g., Proto struct (e.g., *T) or primitive value + if vf.Kind() == reflect.Ptr { + discardLegacy(vf.Interface().(Message)) + } + } + } + } + } + } + + if vf := v.FieldByName("XXX_unrecognized"); vf.IsValid() { + if vf.Type() != reflect.TypeOf([]byte{}) { + panic("expected XXX_unrecognized to be of type []byte") + } + vf.Set(reflect.ValueOf([]byte(nil))) + } + + // For proto2 messages, only discard unknown fields in message extensions + // that have been accessed via GetExtension. + if em, err := extendable(m); err == nil { + // Ignore lock since discardLegacy is not concurrency safe. + emm, _ := em.extensionsRead() + for _, mx := range emm { + if m, ok := mx.value.(Message); ok { + discardLegacy(m) + } + } + } +} diff --git a/vendor/github.com/golang/protobuf/proto/encode.go b/vendor/github.com/golang/protobuf/proto/encode.go new file mode 100644 index 00000000..c27d35f8 --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/encode.go @@ -0,0 +1,221 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +/* + * Routines for encoding data into the wire format for protocol buffers. + */ + +import ( + "errors" + "fmt" + "reflect" +) + +// RequiredNotSetError is the error returned if Marshal is called with +// a protocol buffer struct whose required fields have not +// all been initialized. It is also the error returned if Unmarshal is +// called with an encoded protocol buffer that does not include all the +// required fields. +// +// When printed, RequiredNotSetError reports the first unset required field in a +// message. If the field cannot be precisely determined, it is reported as +// "{Unknown}". +type RequiredNotSetError struct { + field string +} + +func (e *RequiredNotSetError) Error() string { + return fmt.Sprintf("proto: required field %q not set", e.field) +} + +var ( + // errRepeatedHasNil is the error returned if Marshal is called with + // a struct with a repeated field containing a nil element. + errRepeatedHasNil = errors.New("proto: repeated field has nil element") + + // errOneofHasNil is the error returned if Marshal is called with + // a struct with a oneof field containing a nil element. + errOneofHasNil = errors.New("proto: oneof field has nil value") + + // ErrNil is the error returned if Marshal is called with nil. + ErrNil = errors.New("proto: Marshal called with nil") + + // ErrTooLarge is the error returned if Marshal is called with a + // message that encodes to >2GB. + ErrTooLarge = errors.New("proto: message encodes to over 2 GB") +) + +// The fundamental encoders that put bytes on the wire. +// Those that take integer types all accept uint64 and are +// therefore of type valueEncoder. + +const maxVarintBytes = 10 // maximum length of a varint + +// EncodeVarint returns the varint encoding of x. +// This is the format for the +// int32, int64, uint32, uint64, bool, and enum +// protocol buffer types. +// Not used by the package itself, but helpful to clients +// wishing to use the same encoding. +func EncodeVarint(x uint64) []byte { + var buf [maxVarintBytes]byte + var n int + for n = 0; x > 127; n++ { + buf[n] = 0x80 | uint8(x&0x7F) + x >>= 7 + } + buf[n] = uint8(x) + n++ + return buf[0:n] +} + +// EncodeVarint writes a varint-encoded integer to the Buffer. +// This is the format for the +// int32, int64, uint32, uint64, bool, and enum +// protocol buffer types. +func (p *Buffer) EncodeVarint(x uint64) error { + for x >= 1<<7 { + p.buf = append(p.buf, uint8(x&0x7f|0x80)) + x >>= 7 + } + p.buf = append(p.buf, uint8(x)) + return nil +} + +// SizeVarint returns the varint encoding size of an integer. +func SizeVarint(x uint64) int { + switch { + case x < 1<<7: + return 1 + case x < 1<<14: + return 2 + case x < 1<<21: + return 3 + case x < 1<<28: + return 4 + case x < 1<<35: + return 5 + case x < 1<<42: + return 6 + case x < 1<<49: + return 7 + case x < 1<<56: + return 8 + case x < 1<<63: + return 9 + } + return 10 +} + +// EncodeFixed64 writes a 64-bit integer to the Buffer. +// This is the format for the +// fixed64, sfixed64, and double protocol buffer types. +func (p *Buffer) EncodeFixed64(x uint64) error { + p.buf = append(p.buf, + uint8(x), + uint8(x>>8), + uint8(x>>16), + uint8(x>>24), + uint8(x>>32), + uint8(x>>40), + uint8(x>>48), + uint8(x>>56)) + return nil +} + +// EncodeFixed32 writes a 32-bit integer to the Buffer. +// This is the format for the +// fixed32, sfixed32, and float protocol buffer types. +func (p *Buffer) EncodeFixed32(x uint64) error { + p.buf = append(p.buf, + uint8(x), + uint8(x>>8), + uint8(x>>16), + uint8(x>>24)) + return nil +} + +// EncodeZigzag64 writes a zigzag-encoded 64-bit integer +// to the Buffer. +// This is the format used for the sint64 protocol buffer type. +func (p *Buffer) EncodeZigzag64(x uint64) error { + // use signed number to get arithmetic right shift. + return p.EncodeVarint(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} + +// EncodeZigzag32 writes a zigzag-encoded 32-bit integer +// to the Buffer. +// This is the format used for the sint32 protocol buffer type. +func (p *Buffer) EncodeZigzag32(x uint64) error { + // use signed number to get arithmetic right shift. + return p.EncodeVarint(uint64((uint32(x) << 1) ^ uint32((int32(x) >> 31)))) +} + +// EncodeRawBytes writes a count-delimited byte buffer to the Buffer. +// This is the format used for the bytes protocol buffer +// type and for embedded messages. +func (p *Buffer) EncodeRawBytes(b []byte) error { + p.EncodeVarint(uint64(len(b))) + p.buf = append(p.buf, b...) + return nil +} + +// EncodeStringBytes writes an encoded string to the Buffer. +// This is the format used for the proto2 string type. +func (p *Buffer) EncodeStringBytes(s string) error { + p.EncodeVarint(uint64(len(s))) + p.buf = append(p.buf, s...) + return nil +} + +// Marshaler is the interface representing objects that can marshal themselves. +type Marshaler interface { + Marshal() ([]byte, error) +} + +// EncodeMessage writes the protocol buffer to the Buffer, +// prefixed by a varint-encoded length. +func (p *Buffer) EncodeMessage(pb Message) error { + siz := Size(pb) + p.EncodeVarint(uint64(siz)) + return p.Marshal(pb) +} + +// All protocol buffer fields are nillable, but be careful. +func isNil(v reflect.Value) bool { + switch v.Kind() { + case reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice: + return v.IsNil() + } + return false +} diff --git a/vendor/github.com/golang/protobuf/proto/equal.go b/vendor/github.com/golang/protobuf/proto/equal.go new file mode 100644 index 00000000..d4db5a1c --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/equal.go @@ -0,0 +1,300 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2011 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Protocol buffer comparison. + +package proto + +import ( + "bytes" + "log" + "reflect" + "strings" +) + +/* +Equal returns true iff protocol buffers a and b are equal. +The arguments must both be pointers to protocol buffer structs. + +Equality is defined in this way: + - Two messages are equal iff they are the same type, + corresponding fields are equal, unknown field sets + are equal, and extensions sets are equal. + - Two set scalar fields are equal iff their values are equal. + If the fields are of a floating-point type, remember that + NaN != x for all x, including NaN. If the message is defined + in a proto3 .proto file, fields are not "set"; specifically, + zero length proto3 "bytes" fields are equal (nil == {}). + - Two repeated fields are equal iff their lengths are the same, + and their corresponding elements are equal. Note a "bytes" field, + although represented by []byte, is not a repeated field and the + rule for the scalar fields described above applies. + - Two unset fields are equal. + - Two unknown field sets are equal if their current + encoded state is equal. + - Two extension sets are equal iff they have corresponding + elements that are pairwise equal. + - Two map fields are equal iff their lengths are the same, + and they contain the same set of elements. Zero-length map + fields are equal. + - Every other combination of things are not equal. + +The return value is undefined if a and b are not protocol buffers. +*/ +func Equal(a, b Message) bool { + if a == nil || b == nil { + return a == b + } + v1, v2 := reflect.ValueOf(a), reflect.ValueOf(b) + if v1.Type() != v2.Type() { + return false + } + if v1.Kind() == reflect.Ptr { + if v1.IsNil() { + return v2.IsNil() + } + if v2.IsNil() { + return false + } + v1, v2 = v1.Elem(), v2.Elem() + } + if v1.Kind() != reflect.Struct { + return false + } + return equalStruct(v1, v2) +} + +// v1 and v2 are known to have the same type. +func equalStruct(v1, v2 reflect.Value) bool { + sprop := GetProperties(v1.Type()) + for i := 0; i < v1.NumField(); i++ { + f := v1.Type().Field(i) + if strings.HasPrefix(f.Name, "XXX_") { + continue + } + f1, f2 := v1.Field(i), v2.Field(i) + if f.Type.Kind() == reflect.Ptr { + if n1, n2 := f1.IsNil(), f2.IsNil(); n1 && n2 { + // both unset + continue + } else if n1 != n2 { + // set/unset mismatch + return false + } + f1, f2 = f1.Elem(), f2.Elem() + } + if !equalAny(f1, f2, sprop.Prop[i]) { + return false + } + } + + if em1 := v1.FieldByName("XXX_InternalExtensions"); em1.IsValid() { + em2 := v2.FieldByName("XXX_InternalExtensions") + if !equalExtensions(v1.Type(), em1.Interface().(XXX_InternalExtensions), em2.Interface().(XXX_InternalExtensions)) { + return false + } + } + + if em1 := v1.FieldByName("XXX_extensions"); em1.IsValid() { + em2 := v2.FieldByName("XXX_extensions") + if !equalExtMap(v1.Type(), em1.Interface().(map[int32]Extension), em2.Interface().(map[int32]Extension)) { + return false + } + } + + uf := v1.FieldByName("XXX_unrecognized") + if !uf.IsValid() { + return true + } + + u1 := uf.Bytes() + u2 := v2.FieldByName("XXX_unrecognized").Bytes() + return bytes.Equal(u1, u2) +} + +// v1 and v2 are known to have the same type. +// prop may be nil. +func equalAny(v1, v2 reflect.Value, prop *Properties) bool { + if v1.Type() == protoMessageType { + m1, _ := v1.Interface().(Message) + m2, _ := v2.Interface().(Message) + return Equal(m1, m2) + } + switch v1.Kind() { + case reflect.Bool: + return v1.Bool() == v2.Bool() + case reflect.Float32, reflect.Float64: + return v1.Float() == v2.Float() + case reflect.Int32, reflect.Int64: + return v1.Int() == v2.Int() + case reflect.Interface: + // Probably a oneof field; compare the inner values. + n1, n2 := v1.IsNil(), v2.IsNil() + if n1 || n2 { + return n1 == n2 + } + e1, e2 := v1.Elem(), v2.Elem() + if e1.Type() != e2.Type() { + return false + } + return equalAny(e1, e2, nil) + case reflect.Map: + if v1.Len() != v2.Len() { + return false + } + for _, key := range v1.MapKeys() { + val2 := v2.MapIndex(key) + if !val2.IsValid() { + // This key was not found in the second map. + return false + } + if !equalAny(v1.MapIndex(key), val2, nil) { + return false + } + } + return true + case reflect.Ptr: + // Maps may have nil values in them, so check for nil. + if v1.IsNil() && v2.IsNil() { + return true + } + if v1.IsNil() != v2.IsNil() { + return false + } + return equalAny(v1.Elem(), v2.Elem(), prop) + case reflect.Slice: + if v1.Type().Elem().Kind() == reflect.Uint8 { + // short circuit: []byte + + // Edge case: if this is in a proto3 message, a zero length + // bytes field is considered the zero value. + if prop != nil && prop.proto3 && v1.Len() == 0 && v2.Len() == 0 { + return true + } + if v1.IsNil() != v2.IsNil() { + return false + } + return bytes.Equal(v1.Interface().([]byte), v2.Interface().([]byte)) + } + + if v1.Len() != v2.Len() { + return false + } + for i := 0; i < v1.Len(); i++ { + if !equalAny(v1.Index(i), v2.Index(i), prop) { + return false + } + } + return true + case reflect.String: + return v1.Interface().(string) == v2.Interface().(string) + case reflect.Struct: + return equalStruct(v1, v2) + case reflect.Uint32, reflect.Uint64: + return v1.Uint() == v2.Uint() + } + + // unknown type, so not a protocol buffer + log.Printf("proto: don't know how to compare %v", v1) + return false +} + +// base is the struct type that the extensions are based on. +// x1 and x2 are InternalExtensions. +func equalExtensions(base reflect.Type, x1, x2 XXX_InternalExtensions) bool { + em1, _ := x1.extensionsRead() + em2, _ := x2.extensionsRead() + return equalExtMap(base, em1, em2) +} + +func equalExtMap(base reflect.Type, em1, em2 map[int32]Extension) bool { + if len(em1) != len(em2) { + return false + } + + for extNum, e1 := range em1 { + e2, ok := em2[extNum] + if !ok { + return false + } + + m1, m2 := e1.value, e2.value + + if m1 == nil && m2 == nil { + // Both have only encoded form. + if bytes.Equal(e1.enc, e2.enc) { + continue + } + // The bytes are different, but the extensions might still be + // equal. We need to decode them to compare. + } + + if m1 != nil && m2 != nil { + // Both are unencoded. + if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) { + return false + } + continue + } + + // At least one is encoded. To do a semantically correct comparison + // we need to unmarshal them first. + var desc *ExtensionDesc + if m := extensionMaps[base]; m != nil { + desc = m[extNum] + } + if desc == nil { + // If both have only encoded form and the bytes are the same, + // it is handled above. We get here when the bytes are different. + // We don't know how to decode it, so just compare them as byte + // slices. + log.Printf("proto: don't know how to compare extension %d of %v", extNum, base) + return false + } + var err error + if m1 == nil { + m1, err = decodeExtension(e1.enc, desc) + } + if m2 == nil && err == nil { + m2, err = decodeExtension(e2.enc, desc) + } + if err != nil { + // The encoded form is invalid. + log.Printf("proto: badly encoded extension %d of %v: %v", extNum, base, err) + return false + } + if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) { + return false + } + } + + return true +} diff --git a/vendor/github.com/golang/protobuf/proto/extensions.go b/vendor/github.com/golang/protobuf/proto/extensions.go new file mode 100644 index 00000000..816a3b9d --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/extensions.go @@ -0,0 +1,543 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +/* + * Types and routines for supporting protocol buffer extensions. + */ + +import ( + "errors" + "fmt" + "io" + "reflect" + "strconv" + "sync" +) + +// ErrMissingExtension is the error returned by GetExtension if the named extension is not in the message. +var ErrMissingExtension = errors.New("proto: missing extension") + +// ExtensionRange represents a range of message extensions for a protocol buffer. +// Used in code generated by the protocol compiler. +type ExtensionRange struct { + Start, End int32 // both inclusive +} + +// extendableProto is an interface implemented by any protocol buffer generated by the current +// proto compiler that may be extended. +type extendableProto interface { + Message + ExtensionRangeArray() []ExtensionRange + extensionsWrite() map[int32]Extension + extensionsRead() (map[int32]Extension, sync.Locker) +} + +// extendableProtoV1 is an interface implemented by a protocol buffer generated by the previous +// version of the proto compiler that may be extended. +type extendableProtoV1 interface { + Message + ExtensionRangeArray() []ExtensionRange + ExtensionMap() map[int32]Extension +} + +// extensionAdapter is a wrapper around extendableProtoV1 that implements extendableProto. +type extensionAdapter struct { + extendableProtoV1 +} + +func (e extensionAdapter) extensionsWrite() map[int32]Extension { + return e.ExtensionMap() +} + +func (e extensionAdapter) extensionsRead() (map[int32]Extension, sync.Locker) { + return e.ExtensionMap(), notLocker{} +} + +// notLocker is a sync.Locker whose Lock and Unlock methods are nops. +type notLocker struct{} + +func (n notLocker) Lock() {} +func (n notLocker) Unlock() {} + +// extendable returns the extendableProto interface for the given generated proto message. +// If the proto message has the old extension format, it returns a wrapper that implements +// the extendableProto interface. +func extendable(p interface{}) (extendableProto, error) { + switch p := p.(type) { + case extendableProto: + if isNilPtr(p) { + return nil, fmt.Errorf("proto: nil %T is not extendable", p) + } + return p, nil + case extendableProtoV1: + if isNilPtr(p) { + return nil, fmt.Errorf("proto: nil %T is not extendable", p) + } + return extensionAdapter{p}, nil + } + // Don't allocate a specific error containing %T: + // this is the hot path for Clone and MarshalText. + return nil, errNotExtendable +} + +var errNotExtendable = errors.New("proto: not an extendable proto.Message") + +func isNilPtr(x interface{}) bool { + v := reflect.ValueOf(x) + return v.Kind() == reflect.Ptr && v.IsNil() +} + +// XXX_InternalExtensions is an internal representation of proto extensions. +// +// Each generated message struct type embeds an anonymous XXX_InternalExtensions field, +// thus gaining the unexported 'extensions' method, which can be called only from the proto package. +// +// The methods of XXX_InternalExtensions are not concurrency safe in general, +// but calls to logically read-only methods such as has and get may be executed concurrently. +type XXX_InternalExtensions struct { + // The struct must be indirect so that if a user inadvertently copies a + // generated message and its embedded XXX_InternalExtensions, they + // avoid the mayhem of a copied mutex. + // + // The mutex serializes all logically read-only operations to p.extensionMap. + // It is up to the client to ensure that write operations to p.extensionMap are + // mutually exclusive with other accesses. + p *struct { + mu sync.Mutex + extensionMap map[int32]Extension + } +} + +// extensionsWrite returns the extension map, creating it on first use. +func (e *XXX_InternalExtensions) extensionsWrite() map[int32]Extension { + if e.p == nil { + e.p = new(struct { + mu sync.Mutex + extensionMap map[int32]Extension + }) + e.p.extensionMap = make(map[int32]Extension) + } + return e.p.extensionMap +} + +// extensionsRead returns the extensions map for read-only use. It may be nil. +// The caller must hold the returned mutex's lock when accessing Elements within the map. +func (e *XXX_InternalExtensions) extensionsRead() (map[int32]Extension, sync.Locker) { + if e.p == nil { + return nil, nil + } + return e.p.extensionMap, &e.p.mu +} + +// ExtensionDesc represents an extension specification. +// Used in generated code from the protocol compiler. +type ExtensionDesc struct { + ExtendedType Message // nil pointer to the type that is being extended + ExtensionType interface{} // nil pointer to the extension type + Field int32 // field number + Name string // fully-qualified name of extension, for text formatting + Tag string // protobuf tag style + Filename string // name of the file in which the extension is defined +} + +func (ed *ExtensionDesc) repeated() bool { + t := reflect.TypeOf(ed.ExtensionType) + return t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 +} + +// Extension represents an extension in a message. +type Extension struct { + // When an extension is stored in a message using SetExtension + // only desc and value are set. When the message is marshaled + // enc will be set to the encoded form of the message. + // + // When a message is unmarshaled and contains extensions, each + // extension will have only enc set. When such an extension is + // accessed using GetExtension (or GetExtensions) desc and value + // will be set. + desc *ExtensionDesc + value interface{} + enc []byte +} + +// SetRawExtension is for testing only. +func SetRawExtension(base Message, id int32, b []byte) { + epb, err := extendable(base) + if err != nil { + return + } + extmap := epb.extensionsWrite() + extmap[id] = Extension{enc: b} +} + +// isExtensionField returns true iff the given field number is in an extension range. +func isExtensionField(pb extendableProto, field int32) bool { + for _, er := range pb.ExtensionRangeArray() { + if er.Start <= field && field <= er.End { + return true + } + } + return false +} + +// checkExtensionTypes checks that the given extension is valid for pb. +func checkExtensionTypes(pb extendableProto, extension *ExtensionDesc) error { + var pbi interface{} = pb + // Check the extended type. + if ea, ok := pbi.(extensionAdapter); ok { + pbi = ea.extendableProtoV1 + } + if a, b := reflect.TypeOf(pbi), reflect.TypeOf(extension.ExtendedType); a != b { + return fmt.Errorf("proto: bad extended type; %v does not extend %v", b, a) + } + // Check the range. + if !isExtensionField(pb, extension.Field) { + return errors.New("proto: bad extension number; not in declared ranges") + } + return nil +} + +// extPropKey is sufficient to uniquely identify an extension. +type extPropKey struct { + base reflect.Type + field int32 +} + +var extProp = struct { + sync.RWMutex + m map[extPropKey]*Properties +}{ + m: make(map[extPropKey]*Properties), +} + +func extensionProperties(ed *ExtensionDesc) *Properties { + key := extPropKey{base: reflect.TypeOf(ed.ExtendedType), field: ed.Field} + + extProp.RLock() + if prop, ok := extProp.m[key]; ok { + extProp.RUnlock() + return prop + } + extProp.RUnlock() + + extProp.Lock() + defer extProp.Unlock() + // Check again. + if prop, ok := extProp.m[key]; ok { + return prop + } + + prop := new(Properties) + prop.Init(reflect.TypeOf(ed.ExtensionType), "unknown_name", ed.Tag, nil) + extProp.m[key] = prop + return prop +} + +// HasExtension returns whether the given extension is present in pb. +func HasExtension(pb Message, extension *ExtensionDesc) bool { + // TODO: Check types, field numbers, etc.? + epb, err := extendable(pb) + if err != nil { + return false + } + extmap, mu := epb.extensionsRead() + if extmap == nil { + return false + } + mu.Lock() + _, ok := extmap[extension.Field] + mu.Unlock() + return ok +} + +// ClearExtension removes the given extension from pb. +func ClearExtension(pb Message, extension *ExtensionDesc) { + epb, err := extendable(pb) + if err != nil { + return + } + // TODO: Check types, field numbers, etc.? + extmap := epb.extensionsWrite() + delete(extmap, extension.Field) +} + +// GetExtension retrieves a proto2 extended field from pb. +// +// If the descriptor is type complete (i.e., ExtensionDesc.ExtensionType is non-nil), +// then GetExtension parses the encoded field and returns a Go value of the specified type. +// If the field is not present, then the default value is returned (if one is specified), +// otherwise ErrMissingExtension is reported. +// +// If the descriptor is not type complete (i.e., ExtensionDesc.ExtensionType is nil), +// then GetExtension returns the raw encoded bytes of the field extension. +func GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) { + epb, err := extendable(pb) + if err != nil { + return nil, err + } + + if extension.ExtendedType != nil { + // can only check type if this is a complete descriptor + if err := checkExtensionTypes(epb, extension); err != nil { + return nil, err + } + } + + emap, mu := epb.extensionsRead() + if emap == nil { + return defaultExtensionValue(extension) + } + mu.Lock() + defer mu.Unlock() + e, ok := emap[extension.Field] + if !ok { + // defaultExtensionValue returns the default value or + // ErrMissingExtension if there is no default. + return defaultExtensionValue(extension) + } + + if e.value != nil { + // Already decoded. Check the descriptor, though. + if e.desc != extension { + // This shouldn't happen. If it does, it means that + // GetExtension was called twice with two different + // descriptors with the same field number. + return nil, errors.New("proto: descriptor conflict") + } + return e.value, nil + } + + if extension.ExtensionType == nil { + // incomplete descriptor + return e.enc, nil + } + + v, err := decodeExtension(e.enc, extension) + if err != nil { + return nil, err + } + + // Remember the decoded version and drop the encoded version. + // That way it is safe to mutate what we return. + e.value = v + e.desc = extension + e.enc = nil + emap[extension.Field] = e + return e.value, nil +} + +// defaultExtensionValue returns the default value for extension. +// If no default for an extension is defined ErrMissingExtension is returned. +func defaultExtensionValue(extension *ExtensionDesc) (interface{}, error) { + if extension.ExtensionType == nil { + // incomplete descriptor, so no default + return nil, ErrMissingExtension + } + + t := reflect.TypeOf(extension.ExtensionType) + props := extensionProperties(extension) + + sf, _, err := fieldDefault(t, props) + if err != nil { + return nil, err + } + + if sf == nil || sf.value == nil { + // There is no default value. + return nil, ErrMissingExtension + } + + if t.Kind() != reflect.Ptr { + // We do not need to return a Ptr, we can directly return sf.value. + return sf.value, nil + } + + // We need to return an interface{} that is a pointer to sf.value. + value := reflect.New(t).Elem() + value.Set(reflect.New(value.Type().Elem())) + if sf.kind == reflect.Int32 { + // We may have an int32 or an enum, but the underlying data is int32. + // Since we can't set an int32 into a non int32 reflect.value directly + // set it as a int32. + value.Elem().SetInt(int64(sf.value.(int32))) + } else { + value.Elem().Set(reflect.ValueOf(sf.value)) + } + return value.Interface(), nil +} + +// decodeExtension decodes an extension encoded in b. +func decodeExtension(b []byte, extension *ExtensionDesc) (interface{}, error) { + t := reflect.TypeOf(extension.ExtensionType) + unmarshal := typeUnmarshaler(t, extension.Tag) + + // t is a pointer to a struct, pointer to basic type or a slice. + // Allocate space to store the pointer/slice. + value := reflect.New(t).Elem() + + var err error + for { + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + wire := int(x) & 7 + + b, err = unmarshal(b, valToPointer(value.Addr()), wire) + if err != nil { + return nil, err + } + + if len(b) == 0 { + break + } + } + return value.Interface(), nil +} + +// GetExtensions returns a slice of the extensions present in pb that are also listed in es. +// The returned slice has the same length as es; missing extensions will appear as nil elements. +func GetExtensions(pb Message, es []*ExtensionDesc) (extensions []interface{}, err error) { + epb, err := extendable(pb) + if err != nil { + return nil, err + } + extensions = make([]interface{}, len(es)) + for i, e := range es { + extensions[i], err = GetExtension(epb, e) + if err == ErrMissingExtension { + err = nil + } + if err != nil { + return + } + } + return +} + +// ExtensionDescs returns a new slice containing pb's extension descriptors, in undefined order. +// For non-registered extensions, ExtensionDescs returns an incomplete descriptor containing +// just the Field field, which defines the extension's field number. +func ExtensionDescs(pb Message) ([]*ExtensionDesc, error) { + epb, err := extendable(pb) + if err != nil { + return nil, err + } + registeredExtensions := RegisteredExtensions(pb) + + emap, mu := epb.extensionsRead() + if emap == nil { + return nil, nil + } + mu.Lock() + defer mu.Unlock() + extensions := make([]*ExtensionDesc, 0, len(emap)) + for extid, e := range emap { + desc := e.desc + if desc == nil { + desc = registeredExtensions[extid] + if desc == nil { + desc = &ExtensionDesc{Field: extid} + } + } + + extensions = append(extensions, desc) + } + return extensions, nil +} + +// SetExtension sets the specified extension of pb to the specified value. +func SetExtension(pb Message, extension *ExtensionDesc, value interface{}) error { + epb, err := extendable(pb) + if err != nil { + return err + } + if err := checkExtensionTypes(epb, extension); err != nil { + return err + } + typ := reflect.TypeOf(extension.ExtensionType) + if typ != reflect.TypeOf(value) { + return errors.New("proto: bad extension value type") + } + // nil extension values need to be caught early, because the + // encoder can't distinguish an ErrNil due to a nil extension + // from an ErrNil due to a missing field. Extensions are + // always optional, so the encoder would just swallow the error + // and drop all the extensions from the encoded message. + if reflect.ValueOf(value).IsNil() { + return fmt.Errorf("proto: SetExtension called with nil value of type %T", value) + } + + extmap := epb.extensionsWrite() + extmap[extension.Field] = Extension{desc: extension, value: value} + return nil +} + +// ClearAllExtensions clears all extensions from pb. +func ClearAllExtensions(pb Message) { + epb, err := extendable(pb) + if err != nil { + return + } + m := epb.extensionsWrite() + for k := range m { + delete(m, k) + } +} + +// A global registry of extensions. +// The generated code will register the generated descriptors by calling RegisterExtension. + +var extensionMaps = make(map[reflect.Type]map[int32]*ExtensionDesc) + +// RegisterExtension is called from the generated code. +func RegisterExtension(desc *ExtensionDesc) { + st := reflect.TypeOf(desc.ExtendedType).Elem() + m := extensionMaps[st] + if m == nil { + m = make(map[int32]*ExtensionDesc) + extensionMaps[st] = m + } + if _, ok := m[desc.Field]; ok { + panic("proto: duplicate extension registered: " + st.String() + " " + strconv.Itoa(int(desc.Field))) + } + m[desc.Field] = desc +} + +// RegisteredExtensions returns a map of the registered extensions of a +// protocol buffer struct, indexed by the extension number. +// The argument pb should be a nil pointer to the struct type. +func RegisteredExtensions(pb Message) map[int32]*ExtensionDesc { + return extensionMaps[reflect.TypeOf(pb).Elem()] +} diff --git a/vendor/github.com/golang/protobuf/proto/lib.go b/vendor/github.com/golang/protobuf/proto/lib.go new file mode 100644 index 00000000..0e2191b8 --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/lib.go @@ -0,0 +1,921 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* +Package proto converts data structures to and from the wire format of +protocol buffers. It works in concert with the Go source code generated +for .proto files by the protocol compiler. + +A summary of the properties of the protocol buffer interface +for a protocol buffer variable v: + + - Names are turned from camel_case to CamelCase for export. + - There are no methods on v to set fields; just treat + them as structure fields. + - There are getters that return a field's value if set, + and return the field's default value if unset. + The getters work even if the receiver is a nil message. + - The zero value for a struct is its correct initialization state. + All desired fields must be set before marshaling. + - A Reset() method will restore a protobuf struct to its zero state. + - Non-repeated fields are pointers to the values; nil means unset. + That is, optional or required field int32 f becomes F *int32. + - Repeated fields are slices. + - Helper functions are available to aid the setting of fields. + msg.Foo = proto.String("hello") // set field + - Constants are defined to hold the default values of all fields that + have them. They have the form Default_StructName_FieldName. + Because the getter methods handle defaulted values, + direct use of these constants should be rare. + - Enums are given type names and maps from names to values. + Enum values are prefixed by the enclosing message's name, or by the + enum's type name if it is a top-level enum. Enum types have a String + method, and a Enum method to assist in message construction. + - Nested messages, groups and enums have type names prefixed with the name of + the surrounding message type. + - Extensions are given descriptor names that start with E_, + followed by an underscore-delimited list of the nested messages + that contain it (if any) followed by the CamelCased name of the + extension field itself. HasExtension, ClearExtension, GetExtension + and SetExtension are functions for manipulating extensions. + - Oneof field sets are given a single field in their message, + with distinguished wrapper types for each possible field value. + - Marshal and Unmarshal are functions to encode and decode the wire format. + +When the .proto file specifies `syntax="proto3"`, there are some differences: + + - Non-repeated fields of non-message type are values instead of pointers. + - Enum types do not get an Enum method. + +The simplest way to describe this is to see an example. +Given file test.proto, containing + + package example; + + enum FOO { X = 17; } + + message Test { + required string label = 1; + optional int32 type = 2 [default=77]; + repeated int64 reps = 3; + optional group OptionalGroup = 4 { + required string RequiredField = 5; + } + oneof union { + int32 number = 6; + string name = 7; + } + } + +The resulting file, test.pb.go, is: + + package example + + import proto "github.com/golang/protobuf/proto" + import math "math" + + type FOO int32 + const ( + FOO_X FOO = 17 + ) + var FOO_name = map[int32]string{ + 17: "X", + } + var FOO_value = map[string]int32{ + "X": 17, + } + + func (x FOO) Enum() *FOO { + p := new(FOO) + *p = x + return p + } + func (x FOO) String() string { + return proto.EnumName(FOO_name, int32(x)) + } + func (x *FOO) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(FOO_value, data) + if err != nil { + return err + } + *x = FOO(value) + return nil + } + + type Test struct { + Label *string `protobuf:"bytes,1,req,name=label" json:"label,omitempty"` + Type *int32 `protobuf:"varint,2,opt,name=type,def=77" json:"type,omitempty"` + Reps []int64 `protobuf:"varint,3,rep,name=reps" json:"reps,omitempty"` + Optionalgroup *Test_OptionalGroup `protobuf:"group,4,opt,name=OptionalGroup" json:"optionalgroup,omitempty"` + // Types that are valid to be assigned to Union: + // *Test_Number + // *Test_Name + Union isTest_Union `protobuf_oneof:"union"` + XXX_unrecognized []byte `json:"-"` + } + func (m *Test) Reset() { *m = Test{} } + func (m *Test) String() string { return proto.CompactTextString(m) } + func (*Test) ProtoMessage() {} + + type isTest_Union interface { + isTest_Union() + } + + type Test_Number struct { + Number int32 `protobuf:"varint,6,opt,name=number"` + } + type Test_Name struct { + Name string `protobuf:"bytes,7,opt,name=name"` + } + + func (*Test_Number) isTest_Union() {} + func (*Test_Name) isTest_Union() {} + + func (m *Test) GetUnion() isTest_Union { + if m != nil { + return m.Union + } + return nil + } + const Default_Test_Type int32 = 77 + + func (m *Test) GetLabel() string { + if m != nil && m.Label != nil { + return *m.Label + } + return "" + } + + func (m *Test) GetType() int32 { + if m != nil && m.Type != nil { + return *m.Type + } + return Default_Test_Type + } + + func (m *Test) GetOptionalgroup() *Test_OptionalGroup { + if m != nil { + return m.Optionalgroup + } + return nil + } + + type Test_OptionalGroup struct { + RequiredField *string `protobuf:"bytes,5,req" json:"RequiredField,omitempty"` + } + func (m *Test_OptionalGroup) Reset() { *m = Test_OptionalGroup{} } + func (m *Test_OptionalGroup) String() string { return proto.CompactTextString(m) } + + func (m *Test_OptionalGroup) GetRequiredField() string { + if m != nil && m.RequiredField != nil { + return *m.RequiredField + } + return "" + } + + func (m *Test) GetNumber() int32 { + if x, ok := m.GetUnion().(*Test_Number); ok { + return x.Number + } + return 0 + } + + func (m *Test) GetName() string { + if x, ok := m.GetUnion().(*Test_Name); ok { + return x.Name + } + return "" + } + + func init() { + proto.RegisterEnum("example.FOO", FOO_name, FOO_value) + } + +To create and play with a Test object: + + package main + + import ( + "log" + + "github.com/golang/protobuf/proto" + pb "./example.pb" + ) + + func main() { + test := &pb.Test{ + Label: proto.String("hello"), + Type: proto.Int32(17), + Reps: []int64{1, 2, 3}, + Optionalgroup: &pb.Test_OptionalGroup{ + RequiredField: proto.String("good bye"), + }, + Union: &pb.Test_Name{"fred"}, + } + data, err := proto.Marshal(test) + if err != nil { + log.Fatal("marshaling error: ", err) + } + newTest := &pb.Test{} + err = proto.Unmarshal(data, newTest) + if err != nil { + log.Fatal("unmarshaling error: ", err) + } + // Now test and newTest contain the same data. + if test.GetLabel() != newTest.GetLabel() { + log.Fatalf("data mismatch %q != %q", test.GetLabel(), newTest.GetLabel()) + } + // Use a type switch to determine which oneof was set. + switch u := test.Union.(type) { + case *pb.Test_Number: // u.Number contains the number. + case *pb.Test_Name: // u.Name contains the string. + } + // etc. + } +*/ +package proto + +import ( + "encoding/json" + "errors" + "fmt" + "log" + "reflect" + "sort" + "strconv" + "sync" +) + +var errInvalidUTF8 = errors.New("proto: invalid UTF-8 string") + +// Message is implemented by generated protocol buffer messages. +type Message interface { + Reset() + String() string + ProtoMessage() +} + +// Stats records allocation details about the protocol buffer encoders +// and decoders. Useful for tuning the library itself. +type Stats struct { + Emalloc uint64 // mallocs in encode + Dmalloc uint64 // mallocs in decode + Encode uint64 // number of encodes + Decode uint64 // number of decodes + Chit uint64 // number of cache hits + Cmiss uint64 // number of cache misses + Size uint64 // number of sizes +} + +// Set to true to enable stats collection. +const collectStats = false + +var stats Stats + +// GetStats returns a copy of the global Stats structure. +func GetStats() Stats { return stats } + +// A Buffer is a buffer manager for marshaling and unmarshaling +// protocol buffers. It may be reused between invocations to +// reduce memory usage. It is not necessary to use a Buffer; +// the global functions Marshal and Unmarshal create a +// temporary Buffer and are fine for most applications. +type Buffer struct { + buf []byte // encode/decode byte stream + index int // read point + + deterministic bool +} + +// NewBuffer allocates a new Buffer and initializes its internal data to +// the contents of the argument slice. +func NewBuffer(e []byte) *Buffer { + return &Buffer{buf: e} +} + +// Reset resets the Buffer, ready for marshaling a new protocol buffer. +func (p *Buffer) Reset() { + p.buf = p.buf[0:0] // for reading/writing + p.index = 0 // for reading +} + +// SetBuf replaces the internal buffer with the slice, +// ready for unmarshaling the contents of the slice. +func (p *Buffer) SetBuf(s []byte) { + p.buf = s + p.index = 0 +} + +// Bytes returns the contents of the Buffer. +func (p *Buffer) Bytes() []byte { return p.buf } + +// SetDeterministic sets whether to use deterministic serialization. +// +// Deterministic serialization guarantees that for a given binary, equal +// messages will always be serialized to the same bytes. This implies: +// +// - Repeated serialization of a message will return the same bytes. +// - Different processes of the same binary (which may be executing on +// different machines) will serialize equal messages to the same bytes. +// +// Note that the deterministic serialization is NOT canonical across +// languages. It is not guaranteed to remain stable over time. It is unstable +// across different builds with schema changes due to unknown fields. +// Users who need canonical serialization (e.g., persistent storage in a +// canonical form, fingerprinting, etc.) should define their own +// canonicalization specification and implement their own serializer rather +// than relying on this API. +// +// If deterministic serialization is requested, map entries will be sorted +// by keys in lexographical order. This is an implementation detail and +// subject to change. +func (p *Buffer) SetDeterministic(deterministic bool) { + p.deterministic = deterministic +} + +/* + * Helper routines for simplifying the creation of optional fields of basic type. + */ + +// Bool is a helper routine that allocates a new bool value +// to store v and returns a pointer to it. +func Bool(v bool) *bool { + return &v +} + +// Int32 is a helper routine that allocates a new int32 value +// to store v and returns a pointer to it. +func Int32(v int32) *int32 { + return &v +} + +// Int is a helper routine that allocates a new int32 value +// to store v and returns a pointer to it, but unlike Int32 +// its argument value is an int. +func Int(v int) *int32 { + p := new(int32) + *p = int32(v) + return p +} + +// Int64 is a helper routine that allocates a new int64 value +// to store v and returns a pointer to it. +func Int64(v int64) *int64 { + return &v +} + +// Float32 is a helper routine that allocates a new float32 value +// to store v and returns a pointer to it. +func Float32(v float32) *float32 { + return &v +} + +// Float64 is a helper routine that allocates a new float64 value +// to store v and returns a pointer to it. +func Float64(v float64) *float64 { + return &v +} + +// Uint32 is a helper routine that allocates a new uint32 value +// to store v and returns a pointer to it. +func Uint32(v uint32) *uint32 { + return &v +} + +// Uint64 is a helper routine that allocates a new uint64 value +// to store v and returns a pointer to it. +func Uint64(v uint64) *uint64 { + return &v +} + +// String is a helper routine that allocates a new string value +// to store v and returns a pointer to it. +func String(v string) *string { + return &v +} + +// EnumName is a helper function to simplify printing protocol buffer enums +// by name. Given an enum map and a value, it returns a useful string. +func EnumName(m map[int32]string, v int32) string { + s, ok := m[v] + if ok { + return s + } + return strconv.Itoa(int(v)) +} + +// UnmarshalJSONEnum is a helper function to simplify recovering enum int values +// from their JSON-encoded representation. Given a map from the enum's symbolic +// names to its int values, and a byte buffer containing the JSON-encoded +// value, it returns an int32 that can be cast to the enum type by the caller. +// +// The function can deal with both JSON representations, numeric and symbolic. +func UnmarshalJSONEnum(m map[string]int32, data []byte, enumName string) (int32, error) { + if data[0] == '"' { + // New style: enums are strings. + var repr string + if err := json.Unmarshal(data, &repr); err != nil { + return -1, err + } + val, ok := m[repr] + if !ok { + return 0, fmt.Errorf("unrecognized enum %s value %q", enumName, repr) + } + return val, nil + } + // Old style: enums are ints. + var val int32 + if err := json.Unmarshal(data, &val); err != nil { + return 0, fmt.Errorf("cannot unmarshal %#q into enum %s", data, enumName) + } + return val, nil +} + +// DebugPrint dumps the encoded data in b in a debugging format with a header +// including the string s. Used in testing but made available for general debugging. +func (p *Buffer) DebugPrint(s string, b []byte) { + var u uint64 + + obuf := p.buf + index := p.index + p.buf = b + p.index = 0 + depth := 0 + + fmt.Printf("\n--- %s ---\n", s) + +out: + for { + for i := 0; i < depth; i++ { + fmt.Print(" ") + } + + index := p.index + if index == len(p.buf) { + break + } + + op, err := p.DecodeVarint() + if err != nil { + fmt.Printf("%3d: fetching op err %v\n", index, err) + break out + } + tag := op >> 3 + wire := op & 7 + + switch wire { + default: + fmt.Printf("%3d: t=%3d unknown wire=%d\n", + index, tag, wire) + break out + + case WireBytes: + var r []byte + + r, err = p.DecodeRawBytes(false) + if err != nil { + break out + } + fmt.Printf("%3d: t=%3d bytes [%d]", index, tag, len(r)) + if len(r) <= 6 { + for i := 0; i < len(r); i++ { + fmt.Printf(" %.2x", r[i]) + } + } else { + for i := 0; i < 3; i++ { + fmt.Printf(" %.2x", r[i]) + } + fmt.Printf(" ..") + for i := len(r) - 3; i < len(r); i++ { + fmt.Printf(" %.2x", r[i]) + } + } + fmt.Printf("\n") + + case WireFixed32: + u, err = p.DecodeFixed32() + if err != nil { + fmt.Printf("%3d: t=%3d fix32 err %v\n", index, tag, err) + break out + } + fmt.Printf("%3d: t=%3d fix32 %d\n", index, tag, u) + + case WireFixed64: + u, err = p.DecodeFixed64() + if err != nil { + fmt.Printf("%3d: t=%3d fix64 err %v\n", index, tag, err) + break out + } + fmt.Printf("%3d: t=%3d fix64 %d\n", index, tag, u) + + case WireVarint: + u, err = p.DecodeVarint() + if err != nil { + fmt.Printf("%3d: t=%3d varint err %v\n", index, tag, err) + break out + } + fmt.Printf("%3d: t=%3d varint %d\n", index, tag, u) + + case WireStartGroup: + fmt.Printf("%3d: t=%3d start\n", index, tag) + depth++ + + case WireEndGroup: + depth-- + fmt.Printf("%3d: t=%3d end\n", index, tag) + } + } + + if depth != 0 { + fmt.Printf("%3d: start-end not balanced %d\n", p.index, depth) + } + fmt.Printf("\n") + + p.buf = obuf + p.index = index +} + +// SetDefaults sets unset protocol buffer fields to their default values. +// It only modifies fields that are both unset and have defined defaults. +// It recursively sets default values in any non-nil sub-messages. +func SetDefaults(pb Message) { + setDefaults(reflect.ValueOf(pb), true, false) +} + +// v is a pointer to a struct. +func setDefaults(v reflect.Value, recur, zeros bool) { + v = v.Elem() + + defaultMu.RLock() + dm, ok := defaults[v.Type()] + defaultMu.RUnlock() + if !ok { + dm = buildDefaultMessage(v.Type()) + defaultMu.Lock() + defaults[v.Type()] = dm + defaultMu.Unlock() + } + + for _, sf := range dm.scalars { + f := v.Field(sf.index) + if !f.IsNil() { + // field already set + continue + } + dv := sf.value + if dv == nil && !zeros { + // no explicit default, and don't want to set zeros + continue + } + fptr := f.Addr().Interface() // **T + // TODO: Consider batching the allocations we do here. + switch sf.kind { + case reflect.Bool: + b := new(bool) + if dv != nil { + *b = dv.(bool) + } + *(fptr.(**bool)) = b + case reflect.Float32: + f := new(float32) + if dv != nil { + *f = dv.(float32) + } + *(fptr.(**float32)) = f + case reflect.Float64: + f := new(float64) + if dv != nil { + *f = dv.(float64) + } + *(fptr.(**float64)) = f + case reflect.Int32: + // might be an enum + if ft := f.Type(); ft != int32PtrType { + // enum + f.Set(reflect.New(ft.Elem())) + if dv != nil { + f.Elem().SetInt(int64(dv.(int32))) + } + } else { + // int32 field + i := new(int32) + if dv != nil { + *i = dv.(int32) + } + *(fptr.(**int32)) = i + } + case reflect.Int64: + i := new(int64) + if dv != nil { + *i = dv.(int64) + } + *(fptr.(**int64)) = i + case reflect.String: + s := new(string) + if dv != nil { + *s = dv.(string) + } + *(fptr.(**string)) = s + case reflect.Uint8: + // exceptional case: []byte + var b []byte + if dv != nil { + db := dv.([]byte) + b = make([]byte, len(db)) + copy(b, db) + } else { + b = []byte{} + } + *(fptr.(*[]byte)) = b + case reflect.Uint32: + u := new(uint32) + if dv != nil { + *u = dv.(uint32) + } + *(fptr.(**uint32)) = u + case reflect.Uint64: + u := new(uint64) + if dv != nil { + *u = dv.(uint64) + } + *(fptr.(**uint64)) = u + default: + log.Printf("proto: can't set default for field %v (sf.kind=%v)", f, sf.kind) + } + } + + for _, ni := range dm.nested { + f := v.Field(ni) + // f is *T or []*T or map[T]*T + switch f.Kind() { + case reflect.Ptr: + if f.IsNil() { + continue + } + setDefaults(f, recur, zeros) + + case reflect.Slice: + for i := 0; i < f.Len(); i++ { + e := f.Index(i) + if e.IsNil() { + continue + } + setDefaults(e, recur, zeros) + } + + case reflect.Map: + for _, k := range f.MapKeys() { + e := f.MapIndex(k) + if e.IsNil() { + continue + } + setDefaults(e, recur, zeros) + } + } + } +} + +var ( + // defaults maps a protocol buffer struct type to a slice of the fields, + // with its scalar fields set to their proto-declared non-zero default values. + defaultMu sync.RWMutex + defaults = make(map[reflect.Type]defaultMessage) + + int32PtrType = reflect.TypeOf((*int32)(nil)) +) + +// defaultMessage represents information about the default values of a message. +type defaultMessage struct { + scalars []scalarField + nested []int // struct field index of nested messages +} + +type scalarField struct { + index int // struct field index + kind reflect.Kind // element type (the T in *T or []T) + value interface{} // the proto-declared default value, or nil +} + +// t is a struct type. +func buildDefaultMessage(t reflect.Type) (dm defaultMessage) { + sprop := GetProperties(t) + for _, prop := range sprop.Prop { + fi, ok := sprop.decoderTags.get(prop.Tag) + if !ok { + // XXX_unrecognized + continue + } + ft := t.Field(fi).Type + + sf, nested, err := fieldDefault(ft, prop) + switch { + case err != nil: + log.Print(err) + case nested: + dm.nested = append(dm.nested, fi) + case sf != nil: + sf.index = fi + dm.scalars = append(dm.scalars, *sf) + } + } + + return dm +} + +// fieldDefault returns the scalarField for field type ft. +// sf will be nil if the field can not have a default. +// nestedMessage will be true if this is a nested message. +// Note that sf.index is not set on return. +func fieldDefault(ft reflect.Type, prop *Properties) (sf *scalarField, nestedMessage bool, err error) { + var canHaveDefault bool + switch ft.Kind() { + case reflect.Ptr: + if ft.Elem().Kind() == reflect.Struct { + nestedMessage = true + } else { + canHaveDefault = true // proto2 scalar field + } + + case reflect.Slice: + switch ft.Elem().Kind() { + case reflect.Ptr: + nestedMessage = true // repeated message + case reflect.Uint8: + canHaveDefault = true // bytes field + } + + case reflect.Map: + if ft.Elem().Kind() == reflect.Ptr { + nestedMessage = true // map with message values + } + } + + if !canHaveDefault { + if nestedMessage { + return nil, true, nil + } + return nil, false, nil + } + + // We now know that ft is a pointer or slice. + sf = &scalarField{kind: ft.Elem().Kind()} + + // scalar fields without defaults + if !prop.HasDefault { + return sf, false, nil + } + + // a scalar field: either *T or []byte + switch ft.Elem().Kind() { + case reflect.Bool: + x, err := strconv.ParseBool(prop.Default) + if err != nil { + return nil, false, fmt.Errorf("proto: bad default bool %q: %v", prop.Default, err) + } + sf.value = x + case reflect.Float32: + x, err := strconv.ParseFloat(prop.Default, 32) + if err != nil { + return nil, false, fmt.Errorf("proto: bad default float32 %q: %v", prop.Default, err) + } + sf.value = float32(x) + case reflect.Float64: + x, err := strconv.ParseFloat(prop.Default, 64) + if err != nil { + return nil, false, fmt.Errorf("proto: bad default float64 %q: %v", prop.Default, err) + } + sf.value = x + case reflect.Int32: + x, err := strconv.ParseInt(prop.Default, 10, 32) + if err != nil { + return nil, false, fmt.Errorf("proto: bad default int32 %q: %v", prop.Default, err) + } + sf.value = int32(x) + case reflect.Int64: + x, err := strconv.ParseInt(prop.Default, 10, 64) + if err != nil { + return nil, false, fmt.Errorf("proto: bad default int64 %q: %v", prop.Default, err) + } + sf.value = x + case reflect.String: + sf.value = prop.Default + case reflect.Uint8: + // []byte (not *uint8) + sf.value = []byte(prop.Default) + case reflect.Uint32: + x, err := strconv.ParseUint(prop.Default, 10, 32) + if err != nil { + return nil, false, fmt.Errorf("proto: bad default uint32 %q: %v", prop.Default, err) + } + sf.value = uint32(x) + case reflect.Uint64: + x, err := strconv.ParseUint(prop.Default, 10, 64) + if err != nil { + return nil, false, fmt.Errorf("proto: bad default uint64 %q: %v", prop.Default, err) + } + sf.value = x + default: + return nil, false, fmt.Errorf("proto: unhandled def kind %v", ft.Elem().Kind()) + } + + return sf, false, nil +} + +// mapKeys returns a sort.Interface to be used for sorting the map keys. +// Map fields may have key types of non-float scalars, strings and enums. +func mapKeys(vs []reflect.Value) sort.Interface { + s := mapKeySorter{vs: vs} + + // Type specialization per https://developers.google.com/protocol-buffers/docs/proto#maps. + if len(vs) == 0 { + return s + } + switch vs[0].Kind() { + case reflect.Int32, reflect.Int64: + s.less = func(a, b reflect.Value) bool { return a.Int() < b.Int() } + case reflect.Uint32, reflect.Uint64: + s.less = func(a, b reflect.Value) bool { return a.Uint() < b.Uint() } + case reflect.Bool: + s.less = func(a, b reflect.Value) bool { return !a.Bool() && b.Bool() } // false < true + case reflect.String: + s.less = func(a, b reflect.Value) bool { return a.String() < b.String() } + default: + panic(fmt.Sprintf("unsupported map key type: %v", vs[0].Kind())) + } + + return s +} + +type mapKeySorter struct { + vs []reflect.Value + less func(a, b reflect.Value) bool +} + +func (s mapKeySorter) Len() int { return len(s.vs) } +func (s mapKeySorter) Swap(i, j int) { s.vs[i], s.vs[j] = s.vs[j], s.vs[i] } +func (s mapKeySorter) Less(i, j int) bool { + return s.less(s.vs[i], s.vs[j]) +} + +// isProto3Zero reports whether v is a zero proto3 value. +func isProto3Zero(v reflect.Value) bool { + switch v.Kind() { + case reflect.Bool: + return !v.Bool() + case reflect.Int32, reflect.Int64: + return v.Int() == 0 + case reflect.Uint32, reflect.Uint64: + return v.Uint() == 0 + case reflect.Float32, reflect.Float64: + return v.Float() == 0 + case reflect.String: + return v.String() == "" + } + return false +} + +// ProtoPackageIsVersion2 is referenced from generated protocol buffer files +// to assert that that code is compatible with this version of the proto package. +const ProtoPackageIsVersion2 = true + +// ProtoPackageIsVersion1 is referenced from generated protocol buffer files +// to assert that that code is compatible with this version of the proto package. +const ProtoPackageIsVersion1 = true + +// InternalMessageInfo is a type used internally by generated .pb.go files. +// This type is not intended to be used by non-generated code. +// This type is not subject to any compatibility guarantee. +type InternalMessageInfo struct { + marshal *marshalInfo + unmarshal *unmarshalInfo + merge *mergeInfo + discard *discardInfo +} diff --git a/vendor/github.com/golang/protobuf/proto/message_set.go b/vendor/github.com/golang/protobuf/proto/message_set.go new file mode 100644 index 00000000..3b6ca41d --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/message_set.go @@ -0,0 +1,314 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +/* + * Support for message sets. + */ + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "reflect" + "sort" + "sync" +) + +// errNoMessageTypeID occurs when a protocol buffer does not have a message type ID. +// A message type ID is required for storing a protocol buffer in a message set. +var errNoMessageTypeID = errors.New("proto does not have a message type ID") + +// The first two types (_MessageSet_Item and messageSet) +// model what the protocol compiler produces for the following protocol message: +// message MessageSet { +// repeated group Item = 1 { +// required int32 type_id = 2; +// required string message = 3; +// }; +// } +// That is the MessageSet wire format. We can't use a proto to generate these +// because that would introduce a circular dependency between it and this package. + +type _MessageSet_Item struct { + TypeId *int32 `protobuf:"varint,2,req,name=type_id"` + Message []byte `protobuf:"bytes,3,req,name=message"` +} + +type messageSet struct { + Item []*_MessageSet_Item `protobuf:"group,1,rep"` + XXX_unrecognized []byte + // TODO: caching? +} + +// Make sure messageSet is a Message. +var _ Message = (*messageSet)(nil) + +// messageTypeIder is an interface satisfied by a protocol buffer type +// that may be stored in a MessageSet. +type messageTypeIder interface { + MessageTypeId() int32 +} + +func (ms *messageSet) find(pb Message) *_MessageSet_Item { + mti, ok := pb.(messageTypeIder) + if !ok { + return nil + } + id := mti.MessageTypeId() + for _, item := range ms.Item { + if *item.TypeId == id { + return item + } + } + return nil +} + +func (ms *messageSet) Has(pb Message) bool { + return ms.find(pb) != nil +} + +func (ms *messageSet) Unmarshal(pb Message) error { + if item := ms.find(pb); item != nil { + return Unmarshal(item.Message, pb) + } + if _, ok := pb.(messageTypeIder); !ok { + return errNoMessageTypeID + } + return nil // TODO: return error instead? +} + +func (ms *messageSet) Marshal(pb Message) error { + msg, err := Marshal(pb) + if err != nil { + return err + } + if item := ms.find(pb); item != nil { + // reuse existing item + item.Message = msg + return nil + } + + mti, ok := pb.(messageTypeIder) + if !ok { + return errNoMessageTypeID + } + + mtid := mti.MessageTypeId() + ms.Item = append(ms.Item, &_MessageSet_Item{ + TypeId: &mtid, + Message: msg, + }) + return nil +} + +func (ms *messageSet) Reset() { *ms = messageSet{} } +func (ms *messageSet) String() string { return CompactTextString(ms) } +func (*messageSet) ProtoMessage() {} + +// Support for the message_set_wire_format message option. + +func skipVarint(buf []byte) []byte { + i := 0 + for ; buf[i]&0x80 != 0; i++ { + } + return buf[i+1:] +} + +// MarshalMessageSet encodes the extension map represented by m in the message set wire format. +// It is called by generated Marshal methods on protocol buffer messages with the message_set_wire_format option. +func MarshalMessageSet(exts interface{}) ([]byte, error) { + return marshalMessageSet(exts, false) +} + +// marshaMessageSet implements above function, with the opt to turn on / off deterministic during Marshal. +func marshalMessageSet(exts interface{}, deterministic bool) ([]byte, error) { + switch exts := exts.(type) { + case *XXX_InternalExtensions: + var u marshalInfo + siz := u.sizeMessageSet(exts) + b := make([]byte, 0, siz) + return u.appendMessageSet(b, exts, deterministic) + + case map[int32]Extension: + // This is an old-style extension map. + // Wrap it in a new-style XXX_InternalExtensions. + ie := XXX_InternalExtensions{ + p: &struct { + mu sync.Mutex + extensionMap map[int32]Extension + }{ + extensionMap: exts, + }, + } + + var u marshalInfo + siz := u.sizeMessageSet(&ie) + b := make([]byte, 0, siz) + return u.appendMessageSet(b, &ie, deterministic) + + default: + return nil, errors.New("proto: not an extension map") + } +} + +// UnmarshalMessageSet decodes the extension map encoded in buf in the message set wire format. +// It is called by Unmarshal methods on protocol buffer messages with the message_set_wire_format option. +func UnmarshalMessageSet(buf []byte, exts interface{}) error { + var m map[int32]Extension + switch exts := exts.(type) { + case *XXX_InternalExtensions: + m = exts.extensionsWrite() + case map[int32]Extension: + m = exts + default: + return errors.New("proto: not an extension map") + } + + ms := new(messageSet) + if err := Unmarshal(buf, ms); err != nil { + return err + } + for _, item := range ms.Item { + id := *item.TypeId + msg := item.Message + + // Restore wire type and field number varint, plus length varint. + // Be careful to preserve duplicate items. + b := EncodeVarint(uint64(id)<<3 | WireBytes) + if ext, ok := m[id]; ok { + // Existing data; rip off the tag and length varint + // so we join the new data correctly. + // We can assume that ext.enc is set because we are unmarshaling. + o := ext.enc[len(b):] // skip wire type and field number + _, n := DecodeVarint(o) // calculate length of length varint + o = o[n:] // skip length varint + msg = append(o, msg...) // join old data and new data + } + b = append(b, EncodeVarint(uint64(len(msg)))...) + b = append(b, msg...) + + m[id] = Extension{enc: b} + } + return nil +} + +// MarshalMessageSetJSON encodes the extension map represented by m in JSON format. +// It is called by generated MarshalJSON methods on protocol buffer messages with the message_set_wire_format option. +func MarshalMessageSetJSON(exts interface{}) ([]byte, error) { + var m map[int32]Extension + switch exts := exts.(type) { + case *XXX_InternalExtensions: + var mu sync.Locker + m, mu = exts.extensionsRead() + if m != nil { + // Keep the extensions map locked until we're done marshaling to prevent + // races between marshaling and unmarshaling the lazily-{en,de}coded + // values. + mu.Lock() + defer mu.Unlock() + } + case map[int32]Extension: + m = exts + default: + return nil, errors.New("proto: not an extension map") + } + var b bytes.Buffer + b.WriteByte('{') + + // Process the map in key order for deterministic output. + ids := make([]int32, 0, len(m)) + for id := range m { + ids = append(ids, id) + } + sort.Sort(int32Slice(ids)) // int32Slice defined in text.go + + for i, id := range ids { + ext := m[id] + msd, ok := messageSetMap[id] + if !ok { + // Unknown type; we can't render it, so skip it. + continue + } + + if i > 0 && b.Len() > 1 { + b.WriteByte(',') + } + + fmt.Fprintf(&b, `"[%s]":`, msd.name) + + x := ext.value + if x == nil { + x = reflect.New(msd.t.Elem()).Interface() + if err := Unmarshal(ext.enc, x.(Message)); err != nil { + return nil, err + } + } + d, err := json.Marshal(x) + if err != nil { + return nil, err + } + b.Write(d) + } + b.WriteByte('}') + return b.Bytes(), nil +} + +// UnmarshalMessageSetJSON decodes the extension map encoded in buf in JSON format. +// It is called by generated UnmarshalJSON methods on protocol buffer messages with the message_set_wire_format option. +func UnmarshalMessageSetJSON(buf []byte, exts interface{}) error { + // Common-case fast path. + if len(buf) == 0 || bytes.Equal(buf, []byte("{}")) { + return nil + } + + // This is fairly tricky, and it's not clear that it is needed. + return errors.New("TODO: UnmarshalMessageSetJSON not yet implemented") +} + +// A global registry of types that can be used in a MessageSet. + +var messageSetMap = make(map[int32]messageSetDesc) + +type messageSetDesc struct { + t reflect.Type // pointer to struct + name string +} + +// RegisterMessageSetType is called from the generated code. +func RegisterMessageSetType(m Message, fieldNum int32, name string) { + messageSetMap[fieldNum] = messageSetDesc{ + t: reflect.TypeOf(m), + name: name, + } +} diff --git a/vendor/github.com/golang/protobuf/proto/pointer_reflect.go b/vendor/github.com/golang/protobuf/proto/pointer_reflect.go new file mode 100644 index 00000000..b6cad908 --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/pointer_reflect.go @@ -0,0 +1,357 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2012 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// +build purego appengine js + +// This file contains an implementation of proto field accesses using package reflect. +// It is slower than the code in pointer_unsafe.go but it avoids package unsafe and can +// be used on App Engine. + +package proto + +import ( + "reflect" + "sync" +) + +const unsafeAllowed = false + +// A field identifies a field in a struct, accessible from a pointer. +// In this implementation, a field is identified by the sequence of field indices +// passed to reflect's FieldByIndex. +type field []int + +// toField returns a field equivalent to the given reflect field. +func toField(f *reflect.StructField) field { + return f.Index +} + +// invalidField is an invalid field identifier. +var invalidField = field(nil) + +// zeroField is a noop when calling pointer.offset. +var zeroField = field([]int{}) + +// IsValid reports whether the field identifier is valid. +func (f field) IsValid() bool { return f != nil } + +// The pointer type is for the table-driven decoder. +// The implementation here uses a reflect.Value of pointer type to +// create a generic pointer. In pointer_unsafe.go we use unsafe +// instead of reflect to implement the same (but faster) interface. +type pointer struct { + v reflect.Value +} + +// toPointer converts an interface of pointer type to a pointer +// that points to the same target. +func toPointer(i *Message) pointer { + return pointer{v: reflect.ValueOf(*i)} +} + +// toAddrPointer converts an interface to a pointer that points to +// the interface data. +func toAddrPointer(i *interface{}, isptr bool) pointer { + v := reflect.ValueOf(*i) + u := reflect.New(v.Type()) + u.Elem().Set(v) + return pointer{v: u} +} + +// valToPointer converts v to a pointer. v must be of pointer type. +func valToPointer(v reflect.Value) pointer { + return pointer{v: v} +} + +// offset converts from a pointer to a structure to a pointer to +// one of its fields. +func (p pointer) offset(f field) pointer { + return pointer{v: p.v.Elem().FieldByIndex(f).Addr()} +} + +func (p pointer) isNil() bool { + return p.v.IsNil() +} + +// grow updates the slice s in place to make it one element longer. +// s must be addressable. +// Returns the (addressable) new element. +func grow(s reflect.Value) reflect.Value { + n, m := s.Len(), s.Cap() + if n < m { + s.SetLen(n + 1) + } else { + s.Set(reflect.Append(s, reflect.Zero(s.Type().Elem()))) + } + return s.Index(n) +} + +func (p pointer) toInt64() *int64 { + return p.v.Interface().(*int64) +} +func (p pointer) toInt64Ptr() **int64 { + return p.v.Interface().(**int64) +} +func (p pointer) toInt64Slice() *[]int64 { + return p.v.Interface().(*[]int64) +} + +var int32ptr = reflect.TypeOf((*int32)(nil)) + +func (p pointer) toInt32() *int32 { + return p.v.Convert(int32ptr).Interface().(*int32) +} + +// The toInt32Ptr/Slice methods don't work because of enums. +// Instead, we must use set/get methods for the int32ptr/slice case. +/* + func (p pointer) toInt32Ptr() **int32 { + return p.v.Interface().(**int32) +} + func (p pointer) toInt32Slice() *[]int32 { + return p.v.Interface().(*[]int32) +} +*/ +func (p pointer) getInt32Ptr() *int32 { + if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) { + // raw int32 type + return p.v.Elem().Interface().(*int32) + } + // an enum + return p.v.Elem().Convert(int32PtrType).Interface().(*int32) +} +func (p pointer) setInt32Ptr(v int32) { + // Allocate value in a *int32. Possibly convert that to a *enum. + // Then assign it to a **int32 or **enum. + // Note: we can convert *int32 to *enum, but we can't convert + // **int32 to **enum! + p.v.Elem().Set(reflect.ValueOf(&v).Convert(p.v.Type().Elem())) +} + +// getInt32Slice copies []int32 from p as a new slice. +// This behavior differs from the implementation in pointer_unsafe.go. +func (p pointer) getInt32Slice() []int32 { + if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) { + // raw int32 type + return p.v.Elem().Interface().([]int32) + } + // an enum + // Allocate a []int32, then assign []enum's values into it. + // Note: we can't convert []enum to []int32. + slice := p.v.Elem() + s := make([]int32, slice.Len()) + for i := 0; i < slice.Len(); i++ { + s[i] = int32(slice.Index(i).Int()) + } + return s +} + +// setInt32Slice copies []int32 into p as a new slice. +// This behavior differs from the implementation in pointer_unsafe.go. +func (p pointer) setInt32Slice(v []int32) { + if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) { + // raw int32 type + p.v.Elem().Set(reflect.ValueOf(v)) + return + } + // an enum + // Allocate a []enum, then assign []int32's values into it. + // Note: we can't convert []enum to []int32. + slice := reflect.MakeSlice(p.v.Type().Elem(), len(v), cap(v)) + for i, x := range v { + slice.Index(i).SetInt(int64(x)) + } + p.v.Elem().Set(slice) +} +func (p pointer) appendInt32Slice(v int32) { + grow(p.v.Elem()).SetInt(int64(v)) +} + +func (p pointer) toUint64() *uint64 { + return p.v.Interface().(*uint64) +} +func (p pointer) toUint64Ptr() **uint64 { + return p.v.Interface().(**uint64) +} +func (p pointer) toUint64Slice() *[]uint64 { + return p.v.Interface().(*[]uint64) +} +func (p pointer) toUint32() *uint32 { + return p.v.Interface().(*uint32) +} +func (p pointer) toUint32Ptr() **uint32 { + return p.v.Interface().(**uint32) +} +func (p pointer) toUint32Slice() *[]uint32 { + return p.v.Interface().(*[]uint32) +} +func (p pointer) toBool() *bool { + return p.v.Interface().(*bool) +} +func (p pointer) toBoolPtr() **bool { + return p.v.Interface().(**bool) +} +func (p pointer) toBoolSlice() *[]bool { + return p.v.Interface().(*[]bool) +} +func (p pointer) toFloat64() *float64 { + return p.v.Interface().(*float64) +} +func (p pointer) toFloat64Ptr() **float64 { + return p.v.Interface().(**float64) +} +func (p pointer) toFloat64Slice() *[]float64 { + return p.v.Interface().(*[]float64) +} +func (p pointer) toFloat32() *float32 { + return p.v.Interface().(*float32) +} +func (p pointer) toFloat32Ptr() **float32 { + return p.v.Interface().(**float32) +} +func (p pointer) toFloat32Slice() *[]float32 { + return p.v.Interface().(*[]float32) +} +func (p pointer) toString() *string { + return p.v.Interface().(*string) +} +func (p pointer) toStringPtr() **string { + return p.v.Interface().(**string) +} +func (p pointer) toStringSlice() *[]string { + return p.v.Interface().(*[]string) +} +func (p pointer) toBytes() *[]byte { + return p.v.Interface().(*[]byte) +} +func (p pointer) toBytesSlice() *[][]byte { + return p.v.Interface().(*[][]byte) +} +func (p pointer) toExtensions() *XXX_InternalExtensions { + return p.v.Interface().(*XXX_InternalExtensions) +} +func (p pointer) toOldExtensions() *map[int32]Extension { + return p.v.Interface().(*map[int32]Extension) +} +func (p pointer) getPointer() pointer { + return pointer{v: p.v.Elem()} +} +func (p pointer) setPointer(q pointer) { + p.v.Elem().Set(q.v) +} +func (p pointer) appendPointer(q pointer) { + grow(p.v.Elem()).Set(q.v) +} + +// getPointerSlice copies []*T from p as a new []pointer. +// This behavior differs from the implementation in pointer_unsafe.go. +func (p pointer) getPointerSlice() []pointer { + if p.v.IsNil() { + return nil + } + n := p.v.Elem().Len() + s := make([]pointer, n) + for i := 0; i < n; i++ { + s[i] = pointer{v: p.v.Elem().Index(i)} + } + return s +} + +// setPointerSlice copies []pointer into p as a new []*T. +// This behavior differs from the implementation in pointer_unsafe.go. +func (p pointer) setPointerSlice(v []pointer) { + if v == nil { + p.v.Elem().Set(reflect.New(p.v.Elem().Type()).Elem()) + return + } + s := reflect.MakeSlice(p.v.Elem().Type(), 0, len(v)) + for _, p := range v { + s = reflect.Append(s, p.v) + } + p.v.Elem().Set(s) +} + +// getInterfacePointer returns a pointer that points to the +// interface data of the interface pointed by p. +func (p pointer) getInterfacePointer() pointer { + if p.v.Elem().IsNil() { + return pointer{v: p.v.Elem()} + } + return pointer{v: p.v.Elem().Elem().Elem().Field(0).Addr()} // *interface -> interface -> *struct -> struct +} + +func (p pointer) asPointerTo(t reflect.Type) reflect.Value { + // TODO: check that p.v.Type().Elem() == t? + return p.v +} + +func atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo { + atomicLock.Lock() + defer atomicLock.Unlock() + return *p +} +func atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) { + atomicLock.Lock() + defer atomicLock.Unlock() + *p = v +} +func atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo { + atomicLock.Lock() + defer atomicLock.Unlock() + return *p +} +func atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) { + atomicLock.Lock() + defer atomicLock.Unlock() + *p = v +} +func atomicLoadMergeInfo(p **mergeInfo) *mergeInfo { + atomicLock.Lock() + defer atomicLock.Unlock() + return *p +} +func atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) { + atomicLock.Lock() + defer atomicLock.Unlock() + *p = v +} +func atomicLoadDiscardInfo(p **discardInfo) *discardInfo { + atomicLock.Lock() + defer atomicLock.Unlock() + return *p +} +func atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) { + atomicLock.Lock() + defer atomicLock.Unlock() + *p = v +} + +var atomicLock sync.Mutex diff --git a/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go b/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go new file mode 100644 index 00000000..d55a335d --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go @@ -0,0 +1,308 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2012 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// +build !purego,!appengine,!js + +// This file contains the implementation of the proto field accesses using package unsafe. + +package proto + +import ( + "reflect" + "sync/atomic" + "unsafe" +) + +const unsafeAllowed = true + +// A field identifies a field in a struct, accessible from a pointer. +// In this implementation, a field is identified by its byte offset from the start of the struct. +type field uintptr + +// toField returns a field equivalent to the given reflect field. +func toField(f *reflect.StructField) field { + return field(f.Offset) +} + +// invalidField is an invalid field identifier. +const invalidField = ^field(0) + +// zeroField is a noop when calling pointer.offset. +const zeroField = field(0) + +// IsValid reports whether the field identifier is valid. +func (f field) IsValid() bool { + return f != invalidField +} + +// The pointer type below is for the new table-driven encoder/decoder. +// The implementation here uses unsafe.Pointer to create a generic pointer. +// In pointer_reflect.go we use reflect instead of unsafe to implement +// the same (but slower) interface. +type pointer struct { + p unsafe.Pointer +} + +// size of pointer +var ptrSize = unsafe.Sizeof(uintptr(0)) + +// toPointer converts an interface of pointer type to a pointer +// that points to the same target. +func toPointer(i *Message) pointer { + // Super-tricky - read pointer out of data word of interface value. + // Saves ~25ns over the equivalent: + // return valToPointer(reflect.ValueOf(*i)) + return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]} +} + +// toAddrPointer converts an interface to a pointer that points to +// the interface data. +func toAddrPointer(i *interface{}, isptr bool) pointer { + // Super-tricky - read or get the address of data word of interface value. + if isptr { + // The interface is of pointer type, thus it is a direct interface. + // The data word is the pointer data itself. We take its address. + return pointer{p: unsafe.Pointer(uintptr(unsafe.Pointer(i)) + ptrSize)} + } + // The interface is not of pointer type. The data word is the pointer + // to the data. + return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]} +} + +// valToPointer converts v to a pointer. v must be of pointer type. +func valToPointer(v reflect.Value) pointer { + return pointer{p: unsafe.Pointer(v.Pointer())} +} + +// offset converts from a pointer to a structure to a pointer to +// one of its fields. +func (p pointer) offset(f field) pointer { + // For safety, we should panic if !f.IsValid, however calling panic causes + // this to no longer be inlineable, which is a serious performance cost. + /* + if !f.IsValid() { + panic("invalid field") + } + */ + return pointer{p: unsafe.Pointer(uintptr(p.p) + uintptr(f))} +} + +func (p pointer) isNil() bool { + return p.p == nil +} + +func (p pointer) toInt64() *int64 { + return (*int64)(p.p) +} +func (p pointer) toInt64Ptr() **int64 { + return (**int64)(p.p) +} +func (p pointer) toInt64Slice() *[]int64 { + return (*[]int64)(p.p) +} +func (p pointer) toInt32() *int32 { + return (*int32)(p.p) +} + +// See pointer_reflect.go for why toInt32Ptr/Slice doesn't exist. +/* + func (p pointer) toInt32Ptr() **int32 { + return (**int32)(p.p) + } + func (p pointer) toInt32Slice() *[]int32 { + return (*[]int32)(p.p) + } +*/ +func (p pointer) getInt32Ptr() *int32 { + return *(**int32)(p.p) +} +func (p pointer) setInt32Ptr(v int32) { + *(**int32)(p.p) = &v +} + +// getInt32Slice loads a []int32 from p. +// The value returned is aliased with the original slice. +// This behavior differs from the implementation in pointer_reflect.go. +func (p pointer) getInt32Slice() []int32 { + return *(*[]int32)(p.p) +} + +// setInt32Slice stores a []int32 to p. +// The value set is aliased with the input slice. +// This behavior differs from the implementation in pointer_reflect.go. +func (p pointer) setInt32Slice(v []int32) { + *(*[]int32)(p.p) = v +} + +// TODO: Can we get rid of appendInt32Slice and use setInt32Slice instead? +func (p pointer) appendInt32Slice(v int32) { + s := (*[]int32)(p.p) + *s = append(*s, v) +} + +func (p pointer) toUint64() *uint64 { + return (*uint64)(p.p) +} +func (p pointer) toUint64Ptr() **uint64 { + return (**uint64)(p.p) +} +func (p pointer) toUint64Slice() *[]uint64 { + return (*[]uint64)(p.p) +} +func (p pointer) toUint32() *uint32 { + return (*uint32)(p.p) +} +func (p pointer) toUint32Ptr() **uint32 { + return (**uint32)(p.p) +} +func (p pointer) toUint32Slice() *[]uint32 { + return (*[]uint32)(p.p) +} +func (p pointer) toBool() *bool { + return (*bool)(p.p) +} +func (p pointer) toBoolPtr() **bool { + return (**bool)(p.p) +} +func (p pointer) toBoolSlice() *[]bool { + return (*[]bool)(p.p) +} +func (p pointer) toFloat64() *float64 { + return (*float64)(p.p) +} +func (p pointer) toFloat64Ptr() **float64 { + return (**float64)(p.p) +} +func (p pointer) toFloat64Slice() *[]float64 { + return (*[]float64)(p.p) +} +func (p pointer) toFloat32() *float32 { + return (*float32)(p.p) +} +func (p pointer) toFloat32Ptr() **float32 { + return (**float32)(p.p) +} +func (p pointer) toFloat32Slice() *[]float32 { + return (*[]float32)(p.p) +} +func (p pointer) toString() *string { + return (*string)(p.p) +} +func (p pointer) toStringPtr() **string { + return (**string)(p.p) +} +func (p pointer) toStringSlice() *[]string { + return (*[]string)(p.p) +} +func (p pointer) toBytes() *[]byte { + return (*[]byte)(p.p) +} +func (p pointer) toBytesSlice() *[][]byte { + return (*[][]byte)(p.p) +} +func (p pointer) toExtensions() *XXX_InternalExtensions { + return (*XXX_InternalExtensions)(p.p) +} +func (p pointer) toOldExtensions() *map[int32]Extension { + return (*map[int32]Extension)(p.p) +} + +// getPointerSlice loads []*T from p as a []pointer. +// The value returned is aliased with the original slice. +// This behavior differs from the implementation in pointer_reflect.go. +func (p pointer) getPointerSlice() []pointer { + // Super-tricky - p should point to a []*T where T is a + // message type. We load it as []pointer. + return *(*[]pointer)(p.p) +} + +// setPointerSlice stores []pointer into p as a []*T. +// The value set is aliased with the input slice. +// This behavior differs from the implementation in pointer_reflect.go. +func (p pointer) setPointerSlice(v []pointer) { + // Super-tricky - p should point to a []*T where T is a + // message type. We store it as []pointer. + *(*[]pointer)(p.p) = v +} + +// getPointer loads the pointer at p and returns it. +func (p pointer) getPointer() pointer { + return pointer{p: *(*unsafe.Pointer)(p.p)} +} + +// setPointer stores the pointer q at p. +func (p pointer) setPointer(q pointer) { + *(*unsafe.Pointer)(p.p) = q.p +} + +// append q to the slice pointed to by p. +func (p pointer) appendPointer(q pointer) { + s := (*[]unsafe.Pointer)(p.p) + *s = append(*s, q.p) +} + +// getInterfacePointer returns a pointer that points to the +// interface data of the interface pointed by p. +func (p pointer) getInterfacePointer() pointer { + // Super-tricky - read pointer out of data word of interface value. + return pointer{p: (*(*[2]unsafe.Pointer)(p.p))[1]} +} + +// asPointerTo returns a reflect.Value that is a pointer to an +// object of type t stored at p. +func (p pointer) asPointerTo(t reflect.Type) reflect.Value { + return reflect.NewAt(t, p.p) +} + +func atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo { + return (*unmarshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) +} +func atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) { + atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) +} +func atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo { + return (*marshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) +} +func atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) { + atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) +} +func atomicLoadMergeInfo(p **mergeInfo) *mergeInfo { + return (*mergeInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) +} +func atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) { + atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) +} +func atomicLoadDiscardInfo(p **discardInfo) *discardInfo { + return (*discardInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) +} +func atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) { + atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) +} diff --git a/vendor/github.com/golang/protobuf/proto/properties.go b/vendor/github.com/golang/protobuf/proto/properties.go new file mode 100644 index 00000000..f710adab --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/properties.go @@ -0,0 +1,544 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +/* + * Routines for encoding data into the wire format for protocol buffers. + */ + +import ( + "fmt" + "log" + "os" + "reflect" + "sort" + "strconv" + "strings" + "sync" +) + +const debug bool = false + +// Constants that identify the encoding of a value on the wire. +const ( + WireVarint = 0 + WireFixed64 = 1 + WireBytes = 2 + WireStartGroup = 3 + WireEndGroup = 4 + WireFixed32 = 5 +) + +// tagMap is an optimization over map[int]int for typical protocol buffer +// use-cases. Encoded protocol buffers are often in tag order with small tag +// numbers. +type tagMap struct { + fastTags []int + slowTags map[int]int +} + +// tagMapFastLimit is the upper bound on the tag number that will be stored in +// the tagMap slice rather than its map. +const tagMapFastLimit = 1024 + +func (p *tagMap) get(t int) (int, bool) { + if t > 0 && t < tagMapFastLimit { + if t >= len(p.fastTags) { + return 0, false + } + fi := p.fastTags[t] + return fi, fi >= 0 + } + fi, ok := p.slowTags[t] + return fi, ok +} + +func (p *tagMap) put(t int, fi int) { + if t > 0 && t < tagMapFastLimit { + for len(p.fastTags) < t+1 { + p.fastTags = append(p.fastTags, -1) + } + p.fastTags[t] = fi + return + } + if p.slowTags == nil { + p.slowTags = make(map[int]int) + } + p.slowTags[t] = fi +} + +// StructProperties represents properties for all the fields of a struct. +// decoderTags and decoderOrigNames should only be used by the decoder. +type StructProperties struct { + Prop []*Properties // properties for each field + reqCount int // required count + decoderTags tagMap // map from proto tag to struct field number + decoderOrigNames map[string]int // map from original name to struct field number + order []int // list of struct field numbers in tag order + + // OneofTypes contains information about the oneof fields in this message. + // It is keyed by the original name of a field. + OneofTypes map[string]*OneofProperties +} + +// OneofProperties represents information about a specific field in a oneof. +type OneofProperties struct { + Type reflect.Type // pointer to generated struct type for this oneof field + Field int // struct field number of the containing oneof in the message + Prop *Properties +} + +// Implement the sorting interface so we can sort the fields in tag order, as recommended by the spec. +// See encode.go, (*Buffer).enc_struct. + +func (sp *StructProperties) Len() int { return len(sp.order) } +func (sp *StructProperties) Less(i, j int) bool { + return sp.Prop[sp.order[i]].Tag < sp.Prop[sp.order[j]].Tag +} +func (sp *StructProperties) Swap(i, j int) { sp.order[i], sp.order[j] = sp.order[j], sp.order[i] } + +// Properties represents the protocol-specific behavior of a single struct field. +type Properties struct { + Name string // name of the field, for error messages + OrigName string // original name before protocol compiler (always set) + JSONName string // name to use for JSON; determined by protoc + Wire string + WireType int + Tag int + Required bool + Optional bool + Repeated bool + Packed bool // relevant for repeated primitives only + Enum string // set for enum types only + proto3 bool // whether this is known to be a proto3 field; set for []byte only + oneof bool // whether this is a oneof field + + Default string // default value + HasDefault bool // whether an explicit default was provided + + stype reflect.Type // set for struct types only + sprop *StructProperties // set for struct types only + + mtype reflect.Type // set for map types only + mkeyprop *Properties // set for map types only + mvalprop *Properties // set for map types only +} + +// String formats the properties in the protobuf struct field tag style. +func (p *Properties) String() string { + s := p.Wire + s += "," + s += strconv.Itoa(p.Tag) + if p.Required { + s += ",req" + } + if p.Optional { + s += ",opt" + } + if p.Repeated { + s += ",rep" + } + if p.Packed { + s += ",packed" + } + s += ",name=" + p.OrigName + if p.JSONName != p.OrigName { + s += ",json=" + p.JSONName + } + if p.proto3 { + s += ",proto3" + } + if p.oneof { + s += ",oneof" + } + if len(p.Enum) > 0 { + s += ",enum=" + p.Enum + } + if p.HasDefault { + s += ",def=" + p.Default + } + return s +} + +// Parse populates p by parsing a string in the protobuf struct field tag style. +func (p *Properties) Parse(s string) { + // "bytes,49,opt,name=foo,def=hello!" + fields := strings.Split(s, ",") // breaks def=, but handled below. + if len(fields) < 2 { + fmt.Fprintf(os.Stderr, "proto: tag has too few fields: %q\n", s) + return + } + + p.Wire = fields[0] + switch p.Wire { + case "varint": + p.WireType = WireVarint + case "fixed32": + p.WireType = WireFixed32 + case "fixed64": + p.WireType = WireFixed64 + case "zigzag32": + p.WireType = WireVarint + case "zigzag64": + p.WireType = WireVarint + case "bytes", "group": + p.WireType = WireBytes + // no numeric converter for non-numeric types + default: + fmt.Fprintf(os.Stderr, "proto: tag has unknown wire type: %q\n", s) + return + } + + var err error + p.Tag, err = strconv.Atoi(fields[1]) + if err != nil { + return + } + +outer: + for i := 2; i < len(fields); i++ { + f := fields[i] + switch { + case f == "req": + p.Required = true + case f == "opt": + p.Optional = true + case f == "rep": + p.Repeated = true + case f == "packed": + p.Packed = true + case strings.HasPrefix(f, "name="): + p.OrigName = f[5:] + case strings.HasPrefix(f, "json="): + p.JSONName = f[5:] + case strings.HasPrefix(f, "enum="): + p.Enum = f[5:] + case f == "proto3": + p.proto3 = true + case f == "oneof": + p.oneof = true + case strings.HasPrefix(f, "def="): + p.HasDefault = true + p.Default = f[4:] // rest of string + if i+1 < len(fields) { + // Commas aren't escaped, and def is always last. + p.Default += "," + strings.Join(fields[i+1:], ",") + break outer + } + } + } +} + +var protoMessageType = reflect.TypeOf((*Message)(nil)).Elem() + +// setFieldProps initializes the field properties for submessages and maps. +func (p *Properties) setFieldProps(typ reflect.Type, f *reflect.StructField, lockGetProp bool) { + switch t1 := typ; t1.Kind() { + case reflect.Ptr: + if t1.Elem().Kind() == reflect.Struct { + p.stype = t1.Elem() + } + + case reflect.Slice: + if t2 := t1.Elem(); t2.Kind() == reflect.Ptr && t2.Elem().Kind() == reflect.Struct { + p.stype = t2.Elem() + } + + case reflect.Map: + p.mtype = t1 + p.mkeyprop = &Properties{} + p.mkeyprop.init(reflect.PtrTo(p.mtype.Key()), "Key", f.Tag.Get("protobuf_key"), nil, lockGetProp) + p.mvalprop = &Properties{} + vtype := p.mtype.Elem() + if vtype.Kind() != reflect.Ptr && vtype.Kind() != reflect.Slice { + // The value type is not a message (*T) or bytes ([]byte), + // so we need encoders for the pointer to this type. + vtype = reflect.PtrTo(vtype) + } + p.mvalprop.init(vtype, "Value", f.Tag.Get("protobuf_val"), nil, lockGetProp) + } + + if p.stype != nil { + if lockGetProp { + p.sprop = GetProperties(p.stype) + } else { + p.sprop = getPropertiesLocked(p.stype) + } + } +} + +var ( + marshalerType = reflect.TypeOf((*Marshaler)(nil)).Elem() +) + +// Init populates the properties from a protocol buffer struct tag. +func (p *Properties) Init(typ reflect.Type, name, tag string, f *reflect.StructField) { + p.init(typ, name, tag, f, true) +} + +func (p *Properties) init(typ reflect.Type, name, tag string, f *reflect.StructField, lockGetProp bool) { + // "bytes,49,opt,def=hello!" + p.Name = name + p.OrigName = name + if tag == "" { + return + } + p.Parse(tag) + p.setFieldProps(typ, f, lockGetProp) +} + +var ( + propertiesMu sync.RWMutex + propertiesMap = make(map[reflect.Type]*StructProperties) +) + +// GetProperties returns the list of properties for the type represented by t. +// t must represent a generated struct type of a protocol message. +func GetProperties(t reflect.Type) *StructProperties { + if t.Kind() != reflect.Struct { + panic("proto: type must have kind struct") + } + + // Most calls to GetProperties in a long-running program will be + // retrieving details for types we have seen before. + propertiesMu.RLock() + sprop, ok := propertiesMap[t] + propertiesMu.RUnlock() + if ok { + if collectStats { + stats.Chit++ + } + return sprop + } + + propertiesMu.Lock() + sprop = getPropertiesLocked(t) + propertiesMu.Unlock() + return sprop +} + +// getPropertiesLocked requires that propertiesMu is held. +func getPropertiesLocked(t reflect.Type) *StructProperties { + if prop, ok := propertiesMap[t]; ok { + if collectStats { + stats.Chit++ + } + return prop + } + if collectStats { + stats.Cmiss++ + } + + prop := new(StructProperties) + // in case of recursive protos, fill this in now. + propertiesMap[t] = prop + + // build properties + prop.Prop = make([]*Properties, t.NumField()) + prop.order = make([]int, t.NumField()) + + for i := 0; i < t.NumField(); i++ { + f := t.Field(i) + p := new(Properties) + name := f.Name + p.init(f.Type, name, f.Tag.Get("protobuf"), &f, false) + + oneof := f.Tag.Get("protobuf_oneof") // special case + if oneof != "" { + // Oneof fields don't use the traditional protobuf tag. + p.OrigName = oneof + } + prop.Prop[i] = p + prop.order[i] = i + if debug { + print(i, " ", f.Name, " ", t.String(), " ") + if p.Tag > 0 { + print(p.String()) + } + print("\n") + } + } + + // Re-order prop.order. + sort.Sort(prop) + + type oneofMessage interface { + XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{}) + } + if om, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); ok { + var oots []interface{} + _, _, _, oots = om.XXX_OneofFuncs() + + // Interpret oneof metadata. + prop.OneofTypes = make(map[string]*OneofProperties) + for _, oot := range oots { + oop := &OneofProperties{ + Type: reflect.ValueOf(oot).Type(), // *T + Prop: new(Properties), + } + sft := oop.Type.Elem().Field(0) + oop.Prop.Name = sft.Name + oop.Prop.Parse(sft.Tag.Get("protobuf")) + // There will be exactly one interface field that + // this new value is assignable to. + for i := 0; i < t.NumField(); i++ { + f := t.Field(i) + if f.Type.Kind() != reflect.Interface { + continue + } + if !oop.Type.AssignableTo(f.Type) { + continue + } + oop.Field = i + break + } + prop.OneofTypes[oop.Prop.OrigName] = oop + } + } + + // build required counts + // build tags + reqCount := 0 + prop.decoderOrigNames = make(map[string]int) + for i, p := range prop.Prop { + if strings.HasPrefix(p.Name, "XXX_") { + // Internal fields should not appear in tags/origNames maps. + // They are handled specially when encoding and decoding. + continue + } + if p.Required { + reqCount++ + } + prop.decoderTags.put(p.Tag, i) + prop.decoderOrigNames[p.OrigName] = i + } + prop.reqCount = reqCount + + return prop +} + +// A global registry of enum types. +// The generated code will register the generated maps by calling RegisterEnum. + +var enumValueMaps = make(map[string]map[string]int32) + +// RegisterEnum is called from the generated code to install the enum descriptor +// maps into the global table to aid parsing text format protocol buffers. +func RegisterEnum(typeName string, unusedNameMap map[int32]string, valueMap map[string]int32) { + if _, ok := enumValueMaps[typeName]; ok { + panic("proto: duplicate enum registered: " + typeName) + } + enumValueMaps[typeName] = valueMap +} + +// EnumValueMap returns the mapping from names to integers of the +// enum type enumType, or a nil if not found. +func EnumValueMap(enumType string) map[string]int32 { + return enumValueMaps[enumType] +} + +// A registry of all linked message types. +// The string is a fully-qualified proto name ("pkg.Message"). +var ( + protoTypedNils = make(map[string]Message) // a map from proto names to typed nil pointers + protoMapTypes = make(map[string]reflect.Type) // a map from proto names to map types + revProtoTypes = make(map[reflect.Type]string) +) + +// RegisterType is called from generated code and maps from the fully qualified +// proto name to the type (pointer to struct) of the protocol buffer. +func RegisterType(x Message, name string) { + if _, ok := protoTypedNils[name]; ok { + // TODO: Some day, make this a panic. + log.Printf("proto: duplicate proto type registered: %s", name) + return + } + t := reflect.TypeOf(x) + if v := reflect.ValueOf(x); v.Kind() == reflect.Ptr && v.Pointer() == 0 { + // Generated code always calls RegisterType with nil x. + // This check is just for extra safety. + protoTypedNils[name] = x + } else { + protoTypedNils[name] = reflect.Zero(t).Interface().(Message) + } + revProtoTypes[t] = name +} + +// RegisterMapType is called from generated code and maps from the fully qualified +// proto name to the native map type of the proto map definition. +func RegisterMapType(x interface{}, name string) { + if reflect.TypeOf(x).Kind() != reflect.Map { + panic(fmt.Sprintf("RegisterMapType(%T, %q); want map", x, name)) + } + if _, ok := protoMapTypes[name]; ok { + log.Printf("proto: duplicate proto type registered: %s", name) + return + } + t := reflect.TypeOf(x) + protoMapTypes[name] = t + revProtoTypes[t] = name +} + +// MessageName returns the fully-qualified proto name for the given message type. +func MessageName(x Message) string { + type xname interface { + XXX_MessageName() string + } + if m, ok := x.(xname); ok { + return m.XXX_MessageName() + } + return revProtoTypes[reflect.TypeOf(x)] +} + +// MessageType returns the message type (pointer to struct) for a named message. +// The type is not guaranteed to implement proto.Message if the name refers to a +// map entry. +func MessageType(name string) reflect.Type { + if t, ok := protoTypedNils[name]; ok { + return reflect.TypeOf(t) + } + return protoMapTypes[name] +} + +// A registry of all linked proto files. +var ( + protoFiles = make(map[string][]byte) // file name => fileDescriptor +) + +// RegisterFile is called from generated code and maps from the +// full file name of a .proto file to its compressed FileDescriptorProto. +func RegisterFile(filename string, fileDescriptor []byte) { + protoFiles[filename] = fileDescriptor +} + +// FileDescriptor returns the compressed FileDescriptorProto for a .proto file. +func FileDescriptor(filename string) []byte { return protoFiles[filename] } diff --git a/vendor/github.com/golang/protobuf/proto/table_marshal.go b/vendor/github.com/golang/protobuf/proto/table_marshal.go new file mode 100644 index 00000000..0f212b30 --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/table_marshal.go @@ -0,0 +1,2681 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2016 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +import ( + "errors" + "fmt" + "math" + "reflect" + "sort" + "strconv" + "strings" + "sync" + "sync/atomic" + "unicode/utf8" +) + +// a sizer takes a pointer to a field and the size of its tag, computes the size of +// the encoded data. +type sizer func(pointer, int) int + +// a marshaler takes a byte slice, a pointer to a field, and its tag (in wire format), +// marshals the field to the end of the slice, returns the slice and error (if any). +type marshaler func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) + +// marshalInfo is the information used for marshaling a message. +type marshalInfo struct { + typ reflect.Type + fields []*marshalFieldInfo + unrecognized field // offset of XXX_unrecognized + extensions field // offset of XXX_InternalExtensions + v1extensions field // offset of XXX_extensions + sizecache field // offset of XXX_sizecache + initialized int32 // 0 -- only typ is set, 1 -- fully initialized + messageset bool // uses message set wire format + hasmarshaler bool // has custom marshaler + sync.RWMutex // protect extElems map, also for initialization + extElems map[int32]*marshalElemInfo // info of extension elements +} + +// marshalFieldInfo is the information used for marshaling a field of a message. +type marshalFieldInfo struct { + field field + wiretag uint64 // tag in wire format + tagsize int // size of tag in wire format + sizer sizer + marshaler marshaler + isPointer bool + required bool // field is required + name string // name of the field, for error reporting + oneofElems map[reflect.Type]*marshalElemInfo // info of oneof elements +} + +// marshalElemInfo is the information used for marshaling an extension or oneof element. +type marshalElemInfo struct { + wiretag uint64 // tag in wire format + tagsize int // size of tag in wire format + sizer sizer + marshaler marshaler + isptr bool // elem is pointer typed, thus interface of this type is a direct interface (extension only) +} + +var ( + marshalInfoMap = map[reflect.Type]*marshalInfo{} + marshalInfoLock sync.Mutex +) + +// getMarshalInfo returns the information to marshal a given type of message. +// The info it returns may not necessarily initialized. +// t is the type of the message (NOT the pointer to it). +func getMarshalInfo(t reflect.Type) *marshalInfo { + marshalInfoLock.Lock() + u, ok := marshalInfoMap[t] + if !ok { + u = &marshalInfo{typ: t} + marshalInfoMap[t] = u + } + marshalInfoLock.Unlock() + return u +} + +// Size is the entry point from generated code, +// and should be ONLY called by generated code. +// It computes the size of encoded data of msg. +// a is a pointer to a place to store cached marshal info. +func (a *InternalMessageInfo) Size(msg Message) int { + u := getMessageMarshalInfo(msg, a) + ptr := toPointer(&msg) + if ptr.isNil() { + // We get here if msg is a typed nil ((*SomeMessage)(nil)), + // so it satisfies the interface, and msg == nil wouldn't + // catch it. We don't want crash in this case. + return 0 + } + return u.size(ptr) +} + +// Marshal is the entry point from generated code, +// and should be ONLY called by generated code. +// It marshals msg to the end of b. +// a is a pointer to a place to store cached marshal info. +func (a *InternalMessageInfo) Marshal(b []byte, msg Message, deterministic bool) ([]byte, error) { + u := getMessageMarshalInfo(msg, a) + ptr := toPointer(&msg) + if ptr.isNil() { + // We get here if msg is a typed nil ((*SomeMessage)(nil)), + // so it satisfies the interface, and msg == nil wouldn't + // catch it. We don't want crash in this case. + return b, ErrNil + } + return u.marshal(b, ptr, deterministic) +} + +func getMessageMarshalInfo(msg interface{}, a *InternalMessageInfo) *marshalInfo { + // u := a.marshal, but atomically. + // We use an atomic here to ensure memory consistency. + u := atomicLoadMarshalInfo(&a.marshal) + if u == nil { + // Get marshal information from type of message. + t := reflect.ValueOf(msg).Type() + if t.Kind() != reflect.Ptr { + panic(fmt.Sprintf("cannot handle non-pointer message type %v", t)) + } + u = getMarshalInfo(t.Elem()) + // Store it in the cache for later users. + // a.marshal = u, but atomically. + atomicStoreMarshalInfo(&a.marshal, u) + } + return u +} + +// size is the main function to compute the size of the encoded data of a message. +// ptr is the pointer to the message. +func (u *marshalInfo) size(ptr pointer) int { + if atomic.LoadInt32(&u.initialized) == 0 { + u.computeMarshalInfo() + } + + // If the message can marshal itself, let it do it, for compatibility. + // NOTE: This is not efficient. + if u.hasmarshaler { + m := ptr.asPointerTo(u.typ).Interface().(Marshaler) + b, _ := m.Marshal() + return len(b) + } + + n := 0 + for _, f := range u.fields { + if f.isPointer && ptr.offset(f.field).getPointer().isNil() { + // nil pointer always marshals to nothing + continue + } + n += f.sizer(ptr.offset(f.field), f.tagsize) + } + if u.extensions.IsValid() { + e := ptr.offset(u.extensions).toExtensions() + if u.messageset { + n += u.sizeMessageSet(e) + } else { + n += u.sizeExtensions(e) + } + } + if u.v1extensions.IsValid() { + m := *ptr.offset(u.v1extensions).toOldExtensions() + n += u.sizeV1Extensions(m) + } + if u.unrecognized.IsValid() { + s := *ptr.offset(u.unrecognized).toBytes() + n += len(s) + } + // cache the result for use in marshal + if u.sizecache.IsValid() { + atomic.StoreInt32(ptr.offset(u.sizecache).toInt32(), int32(n)) + } + return n +} + +// cachedsize gets the size from cache. If there is no cache (i.e. message is not generated), +// fall back to compute the size. +func (u *marshalInfo) cachedsize(ptr pointer) int { + if u.sizecache.IsValid() { + return int(atomic.LoadInt32(ptr.offset(u.sizecache).toInt32())) + } + return u.size(ptr) +} + +// marshal is the main function to marshal a message. It takes a byte slice and appends +// the encoded data to the end of the slice, returns the slice and error (if any). +// ptr is the pointer to the message. +// If deterministic is true, map is marshaled in deterministic order. +func (u *marshalInfo) marshal(b []byte, ptr pointer, deterministic bool) ([]byte, error) { + if atomic.LoadInt32(&u.initialized) == 0 { + u.computeMarshalInfo() + } + + // If the message can marshal itself, let it do it, for compatibility. + // NOTE: This is not efficient. + if u.hasmarshaler { + m := ptr.asPointerTo(u.typ).Interface().(Marshaler) + b1, err := m.Marshal() + b = append(b, b1...) + return b, err + } + + var err, errreq error + // The old marshaler encodes extensions at beginning. + if u.extensions.IsValid() { + e := ptr.offset(u.extensions).toExtensions() + if u.messageset { + b, err = u.appendMessageSet(b, e, deterministic) + } else { + b, err = u.appendExtensions(b, e, deterministic) + } + if err != nil { + return b, err + } + } + if u.v1extensions.IsValid() { + m := *ptr.offset(u.v1extensions).toOldExtensions() + b, err = u.appendV1Extensions(b, m, deterministic) + if err != nil { + return b, err + } + } + for _, f := range u.fields { + if f.required && errreq == nil { + if ptr.offset(f.field).getPointer().isNil() { + // Required field is not set. + // We record the error but keep going, to give a complete marshaling. + errreq = &RequiredNotSetError{f.name} + continue + } + } + if f.isPointer && ptr.offset(f.field).getPointer().isNil() { + // nil pointer always marshals to nothing + continue + } + b, err = f.marshaler(b, ptr.offset(f.field), f.wiretag, deterministic) + if err != nil { + if err1, ok := err.(*RequiredNotSetError); ok { + // Required field in submessage is not set. + // We record the error but keep going, to give a complete marshaling. + if errreq == nil { + errreq = &RequiredNotSetError{f.name + "." + err1.field} + } + continue + } + if err == errRepeatedHasNil { + err = errors.New("proto: repeated field " + f.name + " has nil element") + } + return b, err + } + } + if u.unrecognized.IsValid() { + s := *ptr.offset(u.unrecognized).toBytes() + b = append(b, s...) + } + return b, errreq +} + +// computeMarshalInfo initializes the marshal info. +func (u *marshalInfo) computeMarshalInfo() { + u.Lock() + defer u.Unlock() + if u.initialized != 0 { // non-atomic read is ok as it is protected by the lock + return + } + + t := u.typ + u.unrecognized = invalidField + u.extensions = invalidField + u.v1extensions = invalidField + u.sizecache = invalidField + + // If the message can marshal itself, let it do it, for compatibility. + // NOTE: This is not efficient. + if reflect.PtrTo(t).Implements(marshalerType) { + u.hasmarshaler = true + atomic.StoreInt32(&u.initialized, 1) + return + } + + // get oneof implementers + var oneofImplementers []interface{} + if m, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); ok { + _, _, _, oneofImplementers = m.XXX_OneofFuncs() + } + + n := t.NumField() + + // deal with XXX fields first + for i := 0; i < t.NumField(); i++ { + f := t.Field(i) + if !strings.HasPrefix(f.Name, "XXX_") { + continue + } + switch f.Name { + case "XXX_sizecache": + u.sizecache = toField(&f) + case "XXX_unrecognized": + u.unrecognized = toField(&f) + case "XXX_InternalExtensions": + u.extensions = toField(&f) + u.messageset = f.Tag.Get("protobuf_messageset") == "1" + case "XXX_extensions": + u.v1extensions = toField(&f) + case "XXX_NoUnkeyedLiteral": + // nothing to do + default: + panic("unknown XXX field: " + f.Name) + } + n-- + } + + // normal fields + fields := make([]marshalFieldInfo, n) // batch allocation + u.fields = make([]*marshalFieldInfo, 0, n) + for i, j := 0, 0; i < t.NumField(); i++ { + f := t.Field(i) + + if strings.HasPrefix(f.Name, "XXX_") { + continue + } + field := &fields[j] + j++ + field.name = f.Name + u.fields = append(u.fields, field) + if f.Tag.Get("protobuf_oneof") != "" { + field.computeOneofFieldInfo(&f, oneofImplementers) + continue + } + if f.Tag.Get("protobuf") == "" { + // field has no tag (not in generated message), ignore it + u.fields = u.fields[:len(u.fields)-1] + j-- + continue + } + field.computeMarshalFieldInfo(&f) + } + + // fields are marshaled in tag order on the wire. + sort.Sort(byTag(u.fields)) + + atomic.StoreInt32(&u.initialized, 1) +} + +// helper for sorting fields by tag +type byTag []*marshalFieldInfo + +func (a byTag) Len() int { return len(a) } +func (a byTag) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a byTag) Less(i, j int) bool { return a[i].wiretag < a[j].wiretag } + +// getExtElemInfo returns the information to marshal an extension element. +// The info it returns is initialized. +func (u *marshalInfo) getExtElemInfo(desc *ExtensionDesc) *marshalElemInfo { + // get from cache first + u.RLock() + e, ok := u.extElems[desc.Field] + u.RUnlock() + if ok { + return e + } + + t := reflect.TypeOf(desc.ExtensionType) // pointer or slice to basic type or struct + tags := strings.Split(desc.Tag, ",") + tag, err := strconv.Atoi(tags[1]) + if err != nil { + panic("tag is not an integer") + } + wt := wiretype(tags[0]) + sizer, marshaler := typeMarshaler(t, tags, false, false) + e = &marshalElemInfo{ + wiretag: uint64(tag)<<3 | wt, + tagsize: SizeVarint(uint64(tag) << 3), + sizer: sizer, + marshaler: marshaler, + isptr: t.Kind() == reflect.Ptr, + } + + // update cache + u.Lock() + if u.extElems == nil { + u.extElems = make(map[int32]*marshalElemInfo) + } + u.extElems[desc.Field] = e + u.Unlock() + return e +} + +// computeMarshalFieldInfo fills up the information to marshal a field. +func (fi *marshalFieldInfo) computeMarshalFieldInfo(f *reflect.StructField) { + // parse protobuf tag of the field. + // tag has format of "bytes,49,opt,name=foo,def=hello!" + tags := strings.Split(f.Tag.Get("protobuf"), ",") + if tags[0] == "" { + return + } + tag, err := strconv.Atoi(tags[1]) + if err != nil { + panic("tag is not an integer") + } + wt := wiretype(tags[0]) + if tags[2] == "req" { + fi.required = true + } + fi.setTag(f, tag, wt) + fi.setMarshaler(f, tags) +} + +func (fi *marshalFieldInfo) computeOneofFieldInfo(f *reflect.StructField, oneofImplementers []interface{}) { + fi.field = toField(f) + fi.wiretag = 1<<31 - 1 // Use a large tag number, make oneofs sorted at the end. This tag will not appear on the wire. + fi.isPointer = true + fi.sizer, fi.marshaler = makeOneOfMarshaler(fi, f) + fi.oneofElems = make(map[reflect.Type]*marshalElemInfo) + + ityp := f.Type // interface type + for _, o := range oneofImplementers { + t := reflect.TypeOf(o) + if !t.Implements(ityp) { + continue + } + sf := t.Elem().Field(0) // oneof implementer is a struct with a single field + tags := strings.Split(sf.Tag.Get("protobuf"), ",") + tag, err := strconv.Atoi(tags[1]) + if err != nil { + panic("tag is not an integer") + } + wt := wiretype(tags[0]) + sizer, marshaler := typeMarshaler(sf.Type, tags, false, true) // oneof should not omit any zero value + fi.oneofElems[t.Elem()] = &marshalElemInfo{ + wiretag: uint64(tag)<<3 | wt, + tagsize: SizeVarint(uint64(tag) << 3), + sizer: sizer, + marshaler: marshaler, + } + } +} + +type oneofMessage interface { + XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{}) +} + +// wiretype returns the wire encoding of the type. +func wiretype(encoding string) uint64 { + switch encoding { + case "fixed32": + return WireFixed32 + case "fixed64": + return WireFixed64 + case "varint", "zigzag32", "zigzag64": + return WireVarint + case "bytes": + return WireBytes + case "group": + return WireStartGroup + } + panic("unknown wire type " + encoding) +} + +// setTag fills up the tag (in wire format) and its size in the info of a field. +func (fi *marshalFieldInfo) setTag(f *reflect.StructField, tag int, wt uint64) { + fi.field = toField(f) + fi.wiretag = uint64(tag)<<3 | wt + fi.tagsize = SizeVarint(uint64(tag) << 3) +} + +// setMarshaler fills up the sizer and marshaler in the info of a field. +func (fi *marshalFieldInfo) setMarshaler(f *reflect.StructField, tags []string) { + switch f.Type.Kind() { + case reflect.Map: + // map field + fi.isPointer = true + fi.sizer, fi.marshaler = makeMapMarshaler(f) + return + case reflect.Ptr, reflect.Slice: + fi.isPointer = true + } + fi.sizer, fi.marshaler = typeMarshaler(f.Type, tags, true, false) +} + +// typeMarshaler returns the sizer and marshaler of a given field. +// t is the type of the field. +// tags is the generated "protobuf" tag of the field. +// If nozero is true, zero value is not marshaled to the wire. +// If oneof is true, it is a oneof field. +func typeMarshaler(t reflect.Type, tags []string, nozero, oneof bool) (sizer, marshaler) { + encoding := tags[0] + + pointer := false + slice := false + if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 { + slice = true + t = t.Elem() + } + if t.Kind() == reflect.Ptr { + pointer = true + t = t.Elem() + } + + packed := false + proto3 := false + for i := 2; i < len(tags); i++ { + if tags[i] == "packed" { + packed = true + } + if tags[i] == "proto3" { + proto3 = true + } + } + + switch t.Kind() { + case reflect.Bool: + if pointer { + return sizeBoolPtr, appendBoolPtr + } + if slice { + if packed { + return sizeBoolPackedSlice, appendBoolPackedSlice + } + return sizeBoolSlice, appendBoolSlice + } + if nozero { + return sizeBoolValueNoZero, appendBoolValueNoZero + } + return sizeBoolValue, appendBoolValue + case reflect.Uint32: + switch encoding { + case "fixed32": + if pointer { + return sizeFixed32Ptr, appendFixed32Ptr + } + if slice { + if packed { + return sizeFixed32PackedSlice, appendFixed32PackedSlice + } + return sizeFixed32Slice, appendFixed32Slice + } + if nozero { + return sizeFixed32ValueNoZero, appendFixed32ValueNoZero + } + return sizeFixed32Value, appendFixed32Value + case "varint": + if pointer { + return sizeVarint32Ptr, appendVarint32Ptr + } + if slice { + if packed { + return sizeVarint32PackedSlice, appendVarint32PackedSlice + } + return sizeVarint32Slice, appendVarint32Slice + } + if nozero { + return sizeVarint32ValueNoZero, appendVarint32ValueNoZero + } + return sizeVarint32Value, appendVarint32Value + } + case reflect.Int32: + switch encoding { + case "fixed32": + if pointer { + return sizeFixedS32Ptr, appendFixedS32Ptr + } + if slice { + if packed { + return sizeFixedS32PackedSlice, appendFixedS32PackedSlice + } + return sizeFixedS32Slice, appendFixedS32Slice + } + if nozero { + return sizeFixedS32ValueNoZero, appendFixedS32ValueNoZero + } + return sizeFixedS32Value, appendFixedS32Value + case "varint": + if pointer { + return sizeVarintS32Ptr, appendVarintS32Ptr + } + if slice { + if packed { + return sizeVarintS32PackedSlice, appendVarintS32PackedSlice + } + return sizeVarintS32Slice, appendVarintS32Slice + } + if nozero { + return sizeVarintS32ValueNoZero, appendVarintS32ValueNoZero + } + return sizeVarintS32Value, appendVarintS32Value + case "zigzag32": + if pointer { + return sizeZigzag32Ptr, appendZigzag32Ptr + } + if slice { + if packed { + return sizeZigzag32PackedSlice, appendZigzag32PackedSlice + } + return sizeZigzag32Slice, appendZigzag32Slice + } + if nozero { + return sizeZigzag32ValueNoZero, appendZigzag32ValueNoZero + } + return sizeZigzag32Value, appendZigzag32Value + } + case reflect.Uint64: + switch encoding { + case "fixed64": + if pointer { + return sizeFixed64Ptr, appendFixed64Ptr + } + if slice { + if packed { + return sizeFixed64PackedSlice, appendFixed64PackedSlice + } + return sizeFixed64Slice, appendFixed64Slice + } + if nozero { + return sizeFixed64ValueNoZero, appendFixed64ValueNoZero + } + return sizeFixed64Value, appendFixed64Value + case "varint": + if pointer { + return sizeVarint64Ptr, appendVarint64Ptr + } + if slice { + if packed { + return sizeVarint64PackedSlice, appendVarint64PackedSlice + } + return sizeVarint64Slice, appendVarint64Slice + } + if nozero { + return sizeVarint64ValueNoZero, appendVarint64ValueNoZero + } + return sizeVarint64Value, appendVarint64Value + } + case reflect.Int64: + switch encoding { + case "fixed64": + if pointer { + return sizeFixedS64Ptr, appendFixedS64Ptr + } + if slice { + if packed { + return sizeFixedS64PackedSlice, appendFixedS64PackedSlice + } + return sizeFixedS64Slice, appendFixedS64Slice + } + if nozero { + return sizeFixedS64ValueNoZero, appendFixedS64ValueNoZero + } + return sizeFixedS64Value, appendFixedS64Value + case "varint": + if pointer { + return sizeVarintS64Ptr, appendVarintS64Ptr + } + if slice { + if packed { + return sizeVarintS64PackedSlice, appendVarintS64PackedSlice + } + return sizeVarintS64Slice, appendVarintS64Slice + } + if nozero { + return sizeVarintS64ValueNoZero, appendVarintS64ValueNoZero + } + return sizeVarintS64Value, appendVarintS64Value + case "zigzag64": + if pointer { + return sizeZigzag64Ptr, appendZigzag64Ptr + } + if slice { + if packed { + return sizeZigzag64PackedSlice, appendZigzag64PackedSlice + } + return sizeZigzag64Slice, appendZigzag64Slice + } + if nozero { + return sizeZigzag64ValueNoZero, appendZigzag64ValueNoZero + } + return sizeZigzag64Value, appendZigzag64Value + } + case reflect.Float32: + if pointer { + return sizeFloat32Ptr, appendFloat32Ptr + } + if slice { + if packed { + return sizeFloat32PackedSlice, appendFloat32PackedSlice + } + return sizeFloat32Slice, appendFloat32Slice + } + if nozero { + return sizeFloat32ValueNoZero, appendFloat32ValueNoZero + } + return sizeFloat32Value, appendFloat32Value + case reflect.Float64: + if pointer { + return sizeFloat64Ptr, appendFloat64Ptr + } + if slice { + if packed { + return sizeFloat64PackedSlice, appendFloat64PackedSlice + } + return sizeFloat64Slice, appendFloat64Slice + } + if nozero { + return sizeFloat64ValueNoZero, appendFloat64ValueNoZero + } + return sizeFloat64Value, appendFloat64Value + case reflect.String: + if pointer { + return sizeStringPtr, appendStringPtr + } + if slice { + return sizeStringSlice, appendStringSlice + } + if nozero { + return sizeStringValueNoZero, appendStringValueNoZero + } + return sizeStringValue, appendStringValue + case reflect.Slice: + if slice { + return sizeBytesSlice, appendBytesSlice + } + if oneof { + // Oneof bytes field may also have "proto3" tag. + // We want to marshal it as a oneof field. Do this + // check before the proto3 check. + return sizeBytesOneof, appendBytesOneof + } + if proto3 { + return sizeBytes3, appendBytes3 + } + return sizeBytes, appendBytes + case reflect.Struct: + switch encoding { + case "group": + if slice { + return makeGroupSliceMarshaler(getMarshalInfo(t)) + } + return makeGroupMarshaler(getMarshalInfo(t)) + case "bytes": + if slice { + return makeMessageSliceMarshaler(getMarshalInfo(t)) + } + return makeMessageMarshaler(getMarshalInfo(t)) + } + } + panic(fmt.Sprintf("unknown or mismatched type: type: %v, wire type: %v", t, encoding)) +} + +// Below are functions to size/marshal a specific type of a field. +// They are stored in the field's info, and called by function pointers. +// They have type sizer or marshaler. + +func sizeFixed32Value(_ pointer, tagsize int) int { + return 4 + tagsize +} +func sizeFixed32ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toUint32() + if v == 0 { + return 0 + } + return 4 + tagsize +} +func sizeFixed32Ptr(ptr pointer, tagsize int) int { + p := *ptr.toUint32Ptr() + if p == nil { + return 0 + } + return 4 + tagsize +} +func sizeFixed32Slice(ptr pointer, tagsize int) int { + s := *ptr.toUint32Slice() + return (4 + tagsize) * len(s) +} +func sizeFixed32PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toUint32Slice() + if len(s) == 0 { + return 0 + } + return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize +} +func sizeFixedS32Value(_ pointer, tagsize int) int { + return 4 + tagsize +} +func sizeFixedS32ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toInt32() + if v == 0 { + return 0 + } + return 4 + tagsize +} +func sizeFixedS32Ptr(ptr pointer, tagsize int) int { + p := ptr.getInt32Ptr() + if p == nil { + return 0 + } + return 4 + tagsize +} +func sizeFixedS32Slice(ptr pointer, tagsize int) int { + s := ptr.getInt32Slice() + return (4 + tagsize) * len(s) +} +func sizeFixedS32PackedSlice(ptr pointer, tagsize int) int { + s := ptr.getInt32Slice() + if len(s) == 0 { + return 0 + } + return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize +} +func sizeFloat32Value(_ pointer, tagsize int) int { + return 4 + tagsize +} +func sizeFloat32ValueNoZero(ptr pointer, tagsize int) int { + v := math.Float32bits(*ptr.toFloat32()) + if v == 0 { + return 0 + } + return 4 + tagsize +} +func sizeFloat32Ptr(ptr pointer, tagsize int) int { + p := *ptr.toFloat32Ptr() + if p == nil { + return 0 + } + return 4 + tagsize +} +func sizeFloat32Slice(ptr pointer, tagsize int) int { + s := *ptr.toFloat32Slice() + return (4 + tagsize) * len(s) +} +func sizeFloat32PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toFloat32Slice() + if len(s) == 0 { + return 0 + } + return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize +} +func sizeFixed64Value(_ pointer, tagsize int) int { + return 8 + tagsize +} +func sizeFixed64ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toUint64() + if v == 0 { + return 0 + } + return 8 + tagsize +} +func sizeFixed64Ptr(ptr pointer, tagsize int) int { + p := *ptr.toUint64Ptr() + if p == nil { + return 0 + } + return 8 + tagsize +} +func sizeFixed64Slice(ptr pointer, tagsize int) int { + s := *ptr.toUint64Slice() + return (8 + tagsize) * len(s) +} +func sizeFixed64PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toUint64Slice() + if len(s) == 0 { + return 0 + } + return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize +} +func sizeFixedS64Value(_ pointer, tagsize int) int { + return 8 + tagsize +} +func sizeFixedS64ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toInt64() + if v == 0 { + return 0 + } + return 8 + tagsize +} +func sizeFixedS64Ptr(ptr pointer, tagsize int) int { + p := *ptr.toInt64Ptr() + if p == nil { + return 0 + } + return 8 + tagsize +} +func sizeFixedS64Slice(ptr pointer, tagsize int) int { + s := *ptr.toInt64Slice() + return (8 + tagsize) * len(s) +} +func sizeFixedS64PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toInt64Slice() + if len(s) == 0 { + return 0 + } + return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize +} +func sizeFloat64Value(_ pointer, tagsize int) int { + return 8 + tagsize +} +func sizeFloat64ValueNoZero(ptr pointer, tagsize int) int { + v := math.Float64bits(*ptr.toFloat64()) + if v == 0 { + return 0 + } + return 8 + tagsize +} +func sizeFloat64Ptr(ptr pointer, tagsize int) int { + p := *ptr.toFloat64Ptr() + if p == nil { + return 0 + } + return 8 + tagsize +} +func sizeFloat64Slice(ptr pointer, tagsize int) int { + s := *ptr.toFloat64Slice() + return (8 + tagsize) * len(s) +} +func sizeFloat64PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toFloat64Slice() + if len(s) == 0 { + return 0 + } + return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize +} +func sizeVarint32Value(ptr pointer, tagsize int) int { + v := *ptr.toUint32() + return SizeVarint(uint64(v)) + tagsize +} +func sizeVarint32ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toUint32() + if v == 0 { + return 0 + } + return SizeVarint(uint64(v)) + tagsize +} +func sizeVarint32Ptr(ptr pointer, tagsize int) int { + p := *ptr.toUint32Ptr() + if p == nil { + return 0 + } + return SizeVarint(uint64(*p)) + tagsize +} +func sizeVarint32Slice(ptr pointer, tagsize int) int { + s := *ptr.toUint32Slice() + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + tagsize + } + return n +} +func sizeVarint32PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toUint32Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + } + return n + SizeVarint(uint64(n)) + tagsize +} +func sizeVarintS32Value(ptr pointer, tagsize int) int { + v := *ptr.toInt32() + return SizeVarint(uint64(v)) + tagsize +} +func sizeVarintS32ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toInt32() + if v == 0 { + return 0 + } + return SizeVarint(uint64(v)) + tagsize +} +func sizeVarintS32Ptr(ptr pointer, tagsize int) int { + p := ptr.getInt32Ptr() + if p == nil { + return 0 + } + return SizeVarint(uint64(*p)) + tagsize +} +func sizeVarintS32Slice(ptr pointer, tagsize int) int { + s := ptr.getInt32Slice() + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + tagsize + } + return n +} +func sizeVarintS32PackedSlice(ptr pointer, tagsize int) int { + s := ptr.getInt32Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + } + return n + SizeVarint(uint64(n)) + tagsize +} +func sizeVarint64Value(ptr pointer, tagsize int) int { + v := *ptr.toUint64() + return SizeVarint(v) + tagsize +} +func sizeVarint64ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toUint64() + if v == 0 { + return 0 + } + return SizeVarint(v) + tagsize +} +func sizeVarint64Ptr(ptr pointer, tagsize int) int { + p := *ptr.toUint64Ptr() + if p == nil { + return 0 + } + return SizeVarint(*p) + tagsize +} +func sizeVarint64Slice(ptr pointer, tagsize int) int { + s := *ptr.toUint64Slice() + n := 0 + for _, v := range s { + n += SizeVarint(v) + tagsize + } + return n +} +func sizeVarint64PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toUint64Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += SizeVarint(v) + } + return n + SizeVarint(uint64(n)) + tagsize +} +func sizeVarintS64Value(ptr pointer, tagsize int) int { + v := *ptr.toInt64() + return SizeVarint(uint64(v)) + tagsize +} +func sizeVarintS64ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toInt64() + if v == 0 { + return 0 + } + return SizeVarint(uint64(v)) + tagsize +} +func sizeVarintS64Ptr(ptr pointer, tagsize int) int { + p := *ptr.toInt64Ptr() + if p == nil { + return 0 + } + return SizeVarint(uint64(*p)) + tagsize +} +func sizeVarintS64Slice(ptr pointer, tagsize int) int { + s := *ptr.toInt64Slice() + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + tagsize + } + return n +} +func sizeVarintS64PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toInt64Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + } + return n + SizeVarint(uint64(n)) + tagsize +} +func sizeZigzag32Value(ptr pointer, tagsize int) int { + v := *ptr.toInt32() + return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize +} +func sizeZigzag32ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toInt32() + if v == 0 { + return 0 + } + return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize +} +func sizeZigzag32Ptr(ptr pointer, tagsize int) int { + p := ptr.getInt32Ptr() + if p == nil { + return 0 + } + v := *p + return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize +} +func sizeZigzag32Slice(ptr pointer, tagsize int) int { + s := ptr.getInt32Slice() + n := 0 + for _, v := range s { + n += SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize + } + return n +} +func sizeZigzag32PackedSlice(ptr pointer, tagsize int) int { + s := ptr.getInt32Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31)))) + } + return n + SizeVarint(uint64(n)) + tagsize +} +func sizeZigzag64Value(ptr pointer, tagsize int) int { + v := *ptr.toInt64() + return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize +} +func sizeZigzag64ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toInt64() + if v == 0 { + return 0 + } + return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize +} +func sizeZigzag64Ptr(ptr pointer, tagsize int) int { + p := *ptr.toInt64Ptr() + if p == nil { + return 0 + } + v := *p + return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize +} +func sizeZigzag64Slice(ptr pointer, tagsize int) int { + s := *ptr.toInt64Slice() + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize + } + return n +} +func sizeZigzag64PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toInt64Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63))) + } + return n + SizeVarint(uint64(n)) + tagsize +} +func sizeBoolValue(_ pointer, tagsize int) int { + return 1 + tagsize +} +func sizeBoolValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toBool() + if !v { + return 0 + } + return 1 + tagsize +} +func sizeBoolPtr(ptr pointer, tagsize int) int { + p := *ptr.toBoolPtr() + if p == nil { + return 0 + } + return 1 + tagsize +} +func sizeBoolSlice(ptr pointer, tagsize int) int { + s := *ptr.toBoolSlice() + return (1 + tagsize) * len(s) +} +func sizeBoolPackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toBoolSlice() + if len(s) == 0 { + return 0 + } + return len(s) + SizeVarint(uint64(len(s))) + tagsize +} +func sizeStringValue(ptr pointer, tagsize int) int { + v := *ptr.toString() + return len(v) + SizeVarint(uint64(len(v))) + tagsize +} +func sizeStringValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toString() + if v == "" { + return 0 + } + return len(v) + SizeVarint(uint64(len(v))) + tagsize +} +func sizeStringPtr(ptr pointer, tagsize int) int { + p := *ptr.toStringPtr() + if p == nil { + return 0 + } + v := *p + return len(v) + SizeVarint(uint64(len(v))) + tagsize +} +func sizeStringSlice(ptr pointer, tagsize int) int { + s := *ptr.toStringSlice() + n := 0 + for _, v := range s { + n += len(v) + SizeVarint(uint64(len(v))) + tagsize + } + return n +} +func sizeBytes(ptr pointer, tagsize int) int { + v := *ptr.toBytes() + if v == nil { + return 0 + } + return len(v) + SizeVarint(uint64(len(v))) + tagsize +} +func sizeBytes3(ptr pointer, tagsize int) int { + v := *ptr.toBytes() + if len(v) == 0 { + return 0 + } + return len(v) + SizeVarint(uint64(len(v))) + tagsize +} +func sizeBytesOneof(ptr pointer, tagsize int) int { + v := *ptr.toBytes() + return len(v) + SizeVarint(uint64(len(v))) + tagsize +} +func sizeBytesSlice(ptr pointer, tagsize int) int { + s := *ptr.toBytesSlice() + n := 0 + for _, v := range s { + n += len(v) + SizeVarint(uint64(len(v))) + tagsize + } + return n +} + +// appendFixed32 appends an encoded fixed32 to b. +func appendFixed32(b []byte, v uint32) []byte { + b = append(b, + byte(v), + byte(v>>8), + byte(v>>16), + byte(v>>24)) + return b +} + +// appendFixed64 appends an encoded fixed64 to b. +func appendFixed64(b []byte, v uint64) []byte { + b = append(b, + byte(v), + byte(v>>8), + byte(v>>16), + byte(v>>24), + byte(v>>32), + byte(v>>40), + byte(v>>48), + byte(v>>56)) + return b +} + +// appendVarint appends an encoded varint to b. +func appendVarint(b []byte, v uint64) []byte { + // TODO: make 1-byte (maybe 2-byte) case inline-able, once we + // have non-leaf inliner. + switch { + case v < 1<<7: + b = append(b, byte(v)) + case v < 1<<14: + b = append(b, + byte(v&0x7f|0x80), + byte(v>>7)) + case v < 1<<21: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte(v>>14)) + case v < 1<<28: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte(v>>21)) + case v < 1<<35: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte(v>>28)) + case v < 1<<42: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte(v>>35)) + case v < 1<<49: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte((v>>35)&0x7f|0x80), + byte(v>>42)) + case v < 1<<56: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte((v>>35)&0x7f|0x80), + byte((v>>42)&0x7f|0x80), + byte(v>>49)) + case v < 1<<63: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte((v>>35)&0x7f|0x80), + byte((v>>42)&0x7f|0x80), + byte((v>>49)&0x7f|0x80), + byte(v>>56)) + default: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte((v>>35)&0x7f|0x80), + byte((v>>42)&0x7f|0x80), + byte((v>>49)&0x7f|0x80), + byte((v>>56)&0x7f|0x80), + 1) + } + return b +} + +func appendFixed32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint32() + b = appendVarint(b, wiretag) + b = appendFixed32(b, v) + return b, nil +} +func appendFixed32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint32() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed32(b, v) + return b, nil +} +func appendFixed32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toUint32Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed32(b, *p) + return b, nil +} +func appendFixed32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint32Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendFixed32(b, v) + } + return b, nil +} +func appendFixed32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint32Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + b = appendVarint(b, uint64(4*len(s))) + for _, v := range s { + b = appendFixed32(b, v) + } + return b, nil +} +func appendFixedS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt32() + b = appendVarint(b, wiretag) + b = appendFixed32(b, uint32(v)) + return b, nil +} +func appendFixedS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt32() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed32(b, uint32(v)) + return b, nil +} +func appendFixedS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := ptr.getInt32Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed32(b, uint32(*p)) + return b, nil +} +func appendFixedS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := ptr.getInt32Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendFixed32(b, uint32(v)) + } + return b, nil +} +func appendFixedS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := ptr.getInt32Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + b = appendVarint(b, uint64(4*len(s))) + for _, v := range s { + b = appendFixed32(b, uint32(v)) + } + return b, nil +} +func appendFloat32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := math.Float32bits(*ptr.toFloat32()) + b = appendVarint(b, wiretag) + b = appendFixed32(b, v) + return b, nil +} +func appendFloat32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := math.Float32bits(*ptr.toFloat32()) + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed32(b, v) + return b, nil +} +func appendFloat32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toFloat32Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed32(b, math.Float32bits(*p)) + return b, nil +} +func appendFloat32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toFloat32Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendFixed32(b, math.Float32bits(v)) + } + return b, nil +} +func appendFloat32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toFloat32Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + b = appendVarint(b, uint64(4*len(s))) + for _, v := range s { + b = appendFixed32(b, math.Float32bits(v)) + } + return b, nil +} +func appendFixed64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint64() + b = appendVarint(b, wiretag) + b = appendFixed64(b, v) + return b, nil +} +func appendFixed64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint64() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed64(b, v) + return b, nil +} +func appendFixed64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toUint64Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed64(b, *p) + return b, nil +} +func appendFixed64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint64Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendFixed64(b, v) + } + return b, nil +} +func appendFixed64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint64Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + b = appendVarint(b, uint64(8*len(s))) + for _, v := range s { + b = appendFixed64(b, v) + } + return b, nil +} +func appendFixedS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt64() + b = appendVarint(b, wiretag) + b = appendFixed64(b, uint64(v)) + return b, nil +} +func appendFixedS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt64() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed64(b, uint64(v)) + return b, nil +} +func appendFixedS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toInt64Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed64(b, uint64(*p)) + return b, nil +} +func appendFixedS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toInt64Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendFixed64(b, uint64(v)) + } + return b, nil +} +func appendFixedS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toInt64Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + b = appendVarint(b, uint64(8*len(s))) + for _, v := range s { + b = appendFixed64(b, uint64(v)) + } + return b, nil +} +func appendFloat64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := math.Float64bits(*ptr.toFloat64()) + b = appendVarint(b, wiretag) + b = appendFixed64(b, v) + return b, nil +} +func appendFloat64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := math.Float64bits(*ptr.toFloat64()) + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed64(b, v) + return b, nil +} +func appendFloat64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toFloat64Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed64(b, math.Float64bits(*p)) + return b, nil +} +func appendFloat64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toFloat64Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendFixed64(b, math.Float64bits(v)) + } + return b, nil +} +func appendFloat64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toFloat64Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + b = appendVarint(b, uint64(8*len(s))) + for _, v := range s { + b = appendFixed64(b, math.Float64bits(v)) + } + return b, nil +} +func appendVarint32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint32() + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + return b, nil +} +func appendVarint32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint32() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + return b, nil +} +func appendVarint32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toUint32Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(*p)) + return b, nil +} +func appendVarint32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint32Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + } + return b, nil +} +func appendVarint32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint32Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + // compute size + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + } + b = appendVarint(b, uint64(n)) + for _, v := range s { + b = appendVarint(b, uint64(v)) + } + return b, nil +} +func appendVarintS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt32() + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + return b, nil +} +func appendVarintS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt32() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + return b, nil +} +func appendVarintS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := ptr.getInt32Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(*p)) + return b, nil +} +func appendVarintS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := ptr.getInt32Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + } + return b, nil +} +func appendVarintS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := ptr.getInt32Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + // compute size + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + } + b = appendVarint(b, uint64(n)) + for _, v := range s { + b = appendVarint(b, uint64(v)) + } + return b, nil +} +func appendVarint64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint64() + b = appendVarint(b, wiretag) + b = appendVarint(b, v) + return b, nil +} +func appendVarint64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint64() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, v) + return b, nil +} +func appendVarint64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toUint64Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, *p) + return b, nil +} +func appendVarint64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint64Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, v) + } + return b, nil +} +func appendVarint64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint64Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + // compute size + n := 0 + for _, v := range s { + n += SizeVarint(v) + } + b = appendVarint(b, uint64(n)) + for _, v := range s { + b = appendVarint(b, v) + } + return b, nil +} +func appendVarintS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt64() + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + return b, nil +} +func appendVarintS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt64() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + return b, nil +} +func appendVarintS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toInt64Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(*p)) + return b, nil +} +func appendVarintS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toInt64Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + } + return b, nil +} +func appendVarintS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toInt64Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + // compute size + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + } + b = appendVarint(b, uint64(n)) + for _, v := range s { + b = appendVarint(b, uint64(v)) + } + return b, nil +} +func appendZigzag32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt32() + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + return b, nil +} +func appendZigzag32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt32() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + return b, nil +} +func appendZigzag32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := ptr.getInt32Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + v := *p + b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + return b, nil +} +func appendZigzag32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := ptr.getInt32Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + } + return b, nil +} +func appendZigzag32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := ptr.getInt32Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + // compute size + n := 0 + for _, v := range s { + n += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31)))) + } + b = appendVarint(b, uint64(n)) + for _, v := range s { + b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + } + return b, nil +} +func appendZigzag64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt64() + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) + return b, nil +} +func appendZigzag64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt64() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) + return b, nil +} +func appendZigzag64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toInt64Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + v := *p + b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) + return b, nil +} +func appendZigzag64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toInt64Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) + } + return b, nil +} +func appendZigzag64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toInt64Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + // compute size + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63))) + } + b = appendVarint(b, uint64(n)) + for _, v := range s { + b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) + } + return b, nil +} +func appendBoolValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toBool() + b = appendVarint(b, wiretag) + if v { + b = append(b, 1) + } else { + b = append(b, 0) + } + return b, nil +} +func appendBoolValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toBool() + if !v { + return b, nil + } + b = appendVarint(b, wiretag) + b = append(b, 1) + return b, nil +} + +func appendBoolPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toBoolPtr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + if *p { + b = append(b, 1) + } else { + b = append(b, 0) + } + return b, nil +} +func appendBoolSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toBoolSlice() + for _, v := range s { + b = appendVarint(b, wiretag) + if v { + b = append(b, 1) + } else { + b = append(b, 0) + } + } + return b, nil +} +func appendBoolPackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toBoolSlice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + b = appendVarint(b, uint64(len(s))) + for _, v := range s { + if v { + b = append(b, 1) + } else { + b = append(b, 0) + } + } + return b, nil +} +func appendStringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toString() + if !utf8.ValidString(v) { + return nil, errInvalidUTF8 + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + return b, nil +} +func appendStringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toString() + if v == "" { + return b, nil + } + if !utf8.ValidString(v) { + return nil, errInvalidUTF8 + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + return b, nil +} +func appendStringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toStringPtr() + if p == nil { + return b, nil + } + v := *p + if !utf8.ValidString(v) { + return nil, errInvalidUTF8 + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + return b, nil +} +func appendStringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toStringSlice() + for _, v := range s { + if !utf8.ValidString(v) { + return nil, errInvalidUTF8 + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + } + return b, nil +} +func appendBytes(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toBytes() + if v == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + return b, nil +} +func appendBytes3(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toBytes() + if len(v) == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + return b, nil +} +func appendBytesOneof(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toBytes() + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + return b, nil +} +func appendBytesSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toBytesSlice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + } + return b, nil +} + +// makeGroupMarshaler returns the sizer and marshaler for a group. +// u is the marshal info of the underlying message. +func makeGroupMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + p := ptr.getPointer() + if p.isNil() { + return 0 + } + return u.size(p) + 2*tagsize + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + p := ptr.getPointer() + if p.isNil() { + return b, nil + } + var err error + b = appendVarint(b, wiretag) // start group + b, err = u.marshal(b, p, deterministic) + b = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group + return b, err + } +} + +// makeGroupSliceMarshaler returns the sizer and marshaler for a group slice. +// u is the marshal info of the underlying message. +func makeGroupSliceMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + s := ptr.getPointerSlice() + n := 0 + for _, v := range s { + if v.isNil() { + continue + } + n += u.size(v) + 2*tagsize + } + return n + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + s := ptr.getPointerSlice() + var err, errreq error + for _, v := range s { + if v.isNil() { + return b, errRepeatedHasNil + } + b = appendVarint(b, wiretag) // start group + b, err = u.marshal(b, v, deterministic) + b = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group + if err != nil { + if _, ok := err.(*RequiredNotSetError); ok { + // Required field in submessage is not set. + // We record the error but keep going, to give a complete marshaling. + if errreq == nil { + errreq = err + } + continue + } + if err == ErrNil { + err = errRepeatedHasNil + } + return b, err + } + } + return b, errreq + } +} + +// makeMessageMarshaler returns the sizer and marshaler for a message field. +// u is the marshal info of the message. +func makeMessageMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + p := ptr.getPointer() + if p.isNil() { + return 0 + } + siz := u.size(p) + return siz + SizeVarint(uint64(siz)) + tagsize + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + p := ptr.getPointer() + if p.isNil() { + return b, nil + } + b = appendVarint(b, wiretag) + siz := u.cachedsize(p) + b = appendVarint(b, uint64(siz)) + return u.marshal(b, p, deterministic) + } +} + +// makeMessageSliceMarshaler returns the sizer and marshaler for a message slice. +// u is the marshal info of the message. +func makeMessageSliceMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + s := ptr.getPointerSlice() + n := 0 + for _, v := range s { + if v.isNil() { + continue + } + siz := u.size(v) + n += siz + SizeVarint(uint64(siz)) + tagsize + } + return n + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + s := ptr.getPointerSlice() + var err, errreq error + for _, v := range s { + if v.isNil() { + return b, errRepeatedHasNil + } + b = appendVarint(b, wiretag) + siz := u.cachedsize(v) + b = appendVarint(b, uint64(siz)) + b, err = u.marshal(b, v, deterministic) + + if err != nil { + if _, ok := err.(*RequiredNotSetError); ok { + // Required field in submessage is not set. + // We record the error but keep going, to give a complete marshaling. + if errreq == nil { + errreq = err + } + continue + } + if err == ErrNil { + err = errRepeatedHasNil + } + return b, err + } + } + return b, errreq + } +} + +// makeMapMarshaler returns the sizer and marshaler for a map field. +// f is the pointer to the reflect data structure of the field. +func makeMapMarshaler(f *reflect.StructField) (sizer, marshaler) { + // figure out key and value type + t := f.Type + keyType := t.Key() + valType := t.Elem() + keyTags := strings.Split(f.Tag.Get("protobuf_key"), ",") + valTags := strings.Split(f.Tag.Get("protobuf_val"), ",") + keySizer, keyMarshaler := typeMarshaler(keyType, keyTags, false, false) // don't omit zero value in map + valSizer, valMarshaler := typeMarshaler(valType, valTags, false, false) // don't omit zero value in map + keyWireTag := 1<<3 | wiretype(keyTags[0]) + valWireTag := 2<<3 | wiretype(valTags[0]) + + // We create an interface to get the addresses of the map key and value. + // If value is pointer-typed, the interface is a direct interface, the + // idata itself is the value. Otherwise, the idata is the pointer to the + // value. + // Key cannot be pointer-typed. + valIsPtr := valType.Kind() == reflect.Ptr + return func(ptr pointer, tagsize int) int { + m := ptr.asPointerTo(t).Elem() // the map + n := 0 + for _, k := range m.MapKeys() { + ki := k.Interface() + vi := m.MapIndex(k).Interface() + kaddr := toAddrPointer(&ki, false) // pointer to key + vaddr := toAddrPointer(&vi, valIsPtr) // pointer to value + siz := keySizer(kaddr, 1) + valSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1) + n += siz + SizeVarint(uint64(siz)) + tagsize + } + return n + }, + func(b []byte, ptr pointer, tag uint64, deterministic bool) ([]byte, error) { + m := ptr.asPointerTo(t).Elem() // the map + var err error + keys := m.MapKeys() + if len(keys) > 1 && deterministic { + sort.Sort(mapKeys(keys)) + } + for _, k := range keys { + ki := k.Interface() + vi := m.MapIndex(k).Interface() + kaddr := toAddrPointer(&ki, false) // pointer to key + vaddr := toAddrPointer(&vi, valIsPtr) // pointer to value + b = appendVarint(b, tag) + siz := keySizer(kaddr, 1) + valSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1) + b = appendVarint(b, uint64(siz)) + b, err = keyMarshaler(b, kaddr, keyWireTag, deterministic) + if err != nil { + return b, err + } + b, err = valMarshaler(b, vaddr, valWireTag, deterministic) + if err != nil && err != ErrNil { // allow nil value in map + return b, err + } + } + return b, nil + } +} + +// makeOneOfMarshaler returns the sizer and marshaler for a oneof field. +// fi is the marshal info of the field. +// f is the pointer to the reflect data structure of the field. +func makeOneOfMarshaler(fi *marshalFieldInfo, f *reflect.StructField) (sizer, marshaler) { + // Oneof field is an interface. We need to get the actual data type on the fly. + t := f.Type + return func(ptr pointer, _ int) int { + p := ptr.getInterfacePointer() + if p.isNil() { + return 0 + } + v := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct + telem := v.Type() + e := fi.oneofElems[telem] + return e.sizer(p, e.tagsize) + }, + func(b []byte, ptr pointer, _ uint64, deterministic bool) ([]byte, error) { + p := ptr.getInterfacePointer() + if p.isNil() { + return b, nil + } + v := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct + telem := v.Type() + if telem.Field(0).Type.Kind() == reflect.Ptr && p.getPointer().isNil() { + return b, errOneofHasNil + } + e := fi.oneofElems[telem] + return e.marshaler(b, p, e.wiretag, deterministic) + } +} + +// sizeExtensions computes the size of encoded data for a XXX_InternalExtensions field. +func (u *marshalInfo) sizeExtensions(ext *XXX_InternalExtensions) int { + m, mu := ext.extensionsRead() + if m == nil { + return 0 + } + mu.Lock() + + n := 0 + for _, e := range m { + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + n += len(e.enc) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr) + n += ei.sizer(p, ei.tagsize) + } + mu.Unlock() + return n +} + +// appendExtensions marshals a XXX_InternalExtensions field to the end of byte slice b. +func (u *marshalInfo) appendExtensions(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) { + m, mu := ext.extensionsRead() + if m == nil { + return b, nil + } + mu.Lock() + defer mu.Unlock() + + var err error + + // Fast-path for common cases: zero or one extensions. + // Don't bother sorting the keys. + if len(m) <= 1 { + for _, e := range m { + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + b = append(b, e.enc...) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr) + b, err = ei.marshaler(b, p, ei.wiretag, deterministic) + if err != nil { + return b, err + } + } + return b, nil + } + + // Sort the keys to provide a deterministic encoding. + // Not sure this is required, but the old code does it. + keys := make([]int, 0, len(m)) + for k := range m { + keys = append(keys, int(k)) + } + sort.Ints(keys) + + for _, k := range keys { + e := m[int32(k)] + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + b = append(b, e.enc...) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr) + b, err = ei.marshaler(b, p, ei.wiretag, deterministic) + if err != nil { + return b, err + } + } + return b, nil +} + +// message set format is: +// message MessageSet { +// repeated group Item = 1 { +// required int32 type_id = 2; +// required string message = 3; +// }; +// } + +// sizeMessageSet computes the size of encoded data for a XXX_InternalExtensions field +// in message set format (above). +func (u *marshalInfo) sizeMessageSet(ext *XXX_InternalExtensions) int { + m, mu := ext.extensionsRead() + if m == nil { + return 0 + } + mu.Lock() + + n := 0 + for id, e := range m { + n += 2 // start group, end group. tag = 1 (size=1) + n += SizeVarint(uint64(id)) + 1 // type_id, tag = 2 (size=1) + + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint + siz := len(msgWithLen) + n += siz + 1 // message, tag = 3 (size=1) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr) + n += ei.sizer(p, 1) // message, tag = 3 (size=1) + } + mu.Unlock() + return n +} + +// appendMessageSet marshals a XXX_InternalExtensions field in message set format (above) +// to the end of byte slice b. +func (u *marshalInfo) appendMessageSet(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) { + m, mu := ext.extensionsRead() + if m == nil { + return b, nil + } + mu.Lock() + defer mu.Unlock() + + var err error + + // Fast-path for common cases: zero or one extensions. + // Don't bother sorting the keys. + if len(m) <= 1 { + for id, e := range m { + b = append(b, 1<<3|WireStartGroup) + b = append(b, 2<<3|WireVarint) + b = appendVarint(b, uint64(id)) + + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint + b = append(b, 3<<3|WireBytes) + b = append(b, msgWithLen...) + b = append(b, 1<<3|WireEndGroup) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr) + b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic) + if err != nil { + return b, err + } + b = append(b, 1<<3|WireEndGroup) + } + return b, nil + } + + // Sort the keys to provide a deterministic encoding. + keys := make([]int, 0, len(m)) + for k := range m { + keys = append(keys, int(k)) + } + sort.Ints(keys) + + for _, id := range keys { + e := m[int32(id)] + b = append(b, 1<<3|WireStartGroup) + b = append(b, 2<<3|WireVarint) + b = appendVarint(b, uint64(id)) + + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint + b = append(b, 3<<3|WireBytes) + b = append(b, msgWithLen...) + b = append(b, 1<<3|WireEndGroup) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr) + b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic) + b = append(b, 1<<3|WireEndGroup) + if err != nil { + return b, err + } + } + return b, nil +} + +// sizeV1Extensions computes the size of encoded data for a V1-API extension field. +func (u *marshalInfo) sizeV1Extensions(m map[int32]Extension) int { + if m == nil { + return 0 + } + + n := 0 + for _, e := range m { + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + n += len(e.enc) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr) + n += ei.sizer(p, ei.tagsize) + } + return n +} + +// appendV1Extensions marshals a V1-API extension field to the end of byte slice b. +func (u *marshalInfo) appendV1Extensions(b []byte, m map[int32]Extension, deterministic bool) ([]byte, error) { + if m == nil { + return b, nil + } + + // Sort the keys to provide a deterministic encoding. + keys := make([]int, 0, len(m)) + for k := range m { + keys = append(keys, int(k)) + } + sort.Ints(keys) + + var err error + for _, k := range keys { + e := m[int32(k)] + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + b = append(b, e.enc...) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr) + b, err = ei.marshaler(b, p, ei.wiretag, deterministic) + if err != nil { + return b, err + } + } + return b, nil +} + +// newMarshaler is the interface representing objects that can marshal themselves. +// +// This exists to support protoc-gen-go generated messages. +// The proto package will stop type-asserting to this interface in the future. +// +// DO NOT DEPEND ON THIS. +type newMarshaler interface { + XXX_Size() int + XXX_Marshal(b []byte, deterministic bool) ([]byte, error) +} + +// Size returns the encoded size of a protocol buffer message. +// This is the main entry point. +func Size(pb Message) int { + if m, ok := pb.(newMarshaler); ok { + return m.XXX_Size() + } + if m, ok := pb.(Marshaler); ok { + // If the message can marshal itself, let it do it, for compatibility. + // NOTE: This is not efficient. + b, _ := m.Marshal() + return len(b) + } + // in case somehow we didn't generate the wrapper + if pb == nil { + return 0 + } + var info InternalMessageInfo + return info.Size(pb) +} + +// Marshal takes a protocol buffer message +// and encodes it into the wire format, returning the data. +// This is the main entry point. +func Marshal(pb Message) ([]byte, error) { + if m, ok := pb.(newMarshaler); ok { + siz := m.XXX_Size() + b := make([]byte, 0, siz) + return m.XXX_Marshal(b, false) + } + if m, ok := pb.(Marshaler); ok { + // If the message can marshal itself, let it do it, for compatibility. + // NOTE: This is not efficient. + return m.Marshal() + } + // in case somehow we didn't generate the wrapper + if pb == nil { + return nil, ErrNil + } + var info InternalMessageInfo + siz := info.Size(pb) + b := make([]byte, 0, siz) + return info.Marshal(b, pb, false) +} + +// Marshal takes a protocol buffer message +// and encodes it into the wire format, writing the result to the +// Buffer. +// This is an alternative entry point. It is not necessary to use +// a Buffer for most applications. +func (p *Buffer) Marshal(pb Message) error { + var err error + if m, ok := pb.(newMarshaler); ok { + siz := m.XXX_Size() + p.grow(siz) // make sure buf has enough capacity + p.buf, err = m.XXX_Marshal(p.buf, p.deterministic) + return err + } + if m, ok := pb.(Marshaler); ok { + // If the message can marshal itself, let it do it, for compatibility. + // NOTE: This is not efficient. + b, err := m.Marshal() + p.buf = append(p.buf, b...) + return err + } + // in case somehow we didn't generate the wrapper + if pb == nil { + return ErrNil + } + var info InternalMessageInfo + siz := info.Size(pb) + p.grow(siz) // make sure buf has enough capacity + p.buf, err = info.Marshal(p.buf, pb, p.deterministic) + return err +} + +// grow grows the buffer's capacity, if necessary, to guarantee space for +// another n bytes. After grow(n), at least n bytes can be written to the +// buffer without another allocation. +func (p *Buffer) grow(n int) { + need := len(p.buf) + n + if need <= cap(p.buf) { + return + } + newCap := len(p.buf) * 2 + if newCap < need { + newCap = need + } + p.buf = append(make([]byte, 0, newCap), p.buf...) +} diff --git a/vendor/github.com/golang/protobuf/proto/table_merge.go b/vendor/github.com/golang/protobuf/proto/table_merge.go new file mode 100644 index 00000000..5525def6 --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/table_merge.go @@ -0,0 +1,654 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2016 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +import ( + "fmt" + "reflect" + "strings" + "sync" + "sync/atomic" +) + +// Merge merges the src message into dst. +// This assumes that dst and src of the same type and are non-nil. +func (a *InternalMessageInfo) Merge(dst, src Message) { + mi := atomicLoadMergeInfo(&a.merge) + if mi == nil { + mi = getMergeInfo(reflect.TypeOf(dst).Elem()) + atomicStoreMergeInfo(&a.merge, mi) + } + mi.merge(toPointer(&dst), toPointer(&src)) +} + +type mergeInfo struct { + typ reflect.Type + + initialized int32 // 0: only typ is valid, 1: everything is valid + lock sync.Mutex + + fields []mergeFieldInfo + unrecognized field // Offset of XXX_unrecognized +} + +type mergeFieldInfo struct { + field field // Offset of field, guaranteed to be valid + + // isPointer reports whether the value in the field is a pointer. + // This is true for the following situations: + // * Pointer to struct + // * Pointer to basic type (proto2 only) + // * Slice (first value in slice header is a pointer) + // * String (first value in string header is a pointer) + isPointer bool + + // basicWidth reports the width of the field assuming that it is directly + // embedded in the struct (as is the case for basic types in proto3). + // The possible values are: + // 0: invalid + // 1: bool + // 4: int32, uint32, float32 + // 8: int64, uint64, float64 + basicWidth int + + // Where dst and src are pointers to the types being merged. + merge func(dst, src pointer) +} + +var ( + mergeInfoMap = map[reflect.Type]*mergeInfo{} + mergeInfoLock sync.Mutex +) + +func getMergeInfo(t reflect.Type) *mergeInfo { + mergeInfoLock.Lock() + defer mergeInfoLock.Unlock() + mi := mergeInfoMap[t] + if mi == nil { + mi = &mergeInfo{typ: t} + mergeInfoMap[t] = mi + } + return mi +} + +// merge merges src into dst assuming they are both of type *mi.typ. +func (mi *mergeInfo) merge(dst, src pointer) { + if dst.isNil() { + panic("proto: nil destination") + } + if src.isNil() { + return // Nothing to do. + } + + if atomic.LoadInt32(&mi.initialized) == 0 { + mi.computeMergeInfo() + } + + for _, fi := range mi.fields { + sfp := src.offset(fi.field) + + // As an optimization, we can avoid the merge function call cost + // if we know for sure that the source will have no effect + // by checking if it is the zero value. + if unsafeAllowed { + if fi.isPointer && sfp.getPointer().isNil() { // Could be slice or string + continue + } + if fi.basicWidth > 0 { + switch { + case fi.basicWidth == 1 && !*sfp.toBool(): + continue + case fi.basicWidth == 4 && *sfp.toUint32() == 0: + continue + case fi.basicWidth == 8 && *sfp.toUint64() == 0: + continue + } + } + } + + dfp := dst.offset(fi.field) + fi.merge(dfp, sfp) + } + + // TODO: Make this faster? + out := dst.asPointerTo(mi.typ).Elem() + in := src.asPointerTo(mi.typ).Elem() + if emIn, err := extendable(in.Addr().Interface()); err == nil { + emOut, _ := extendable(out.Addr().Interface()) + mIn, muIn := emIn.extensionsRead() + if mIn != nil { + mOut := emOut.extensionsWrite() + muIn.Lock() + mergeExtension(mOut, mIn) + muIn.Unlock() + } + } + + if mi.unrecognized.IsValid() { + if b := *src.offset(mi.unrecognized).toBytes(); len(b) > 0 { + *dst.offset(mi.unrecognized).toBytes() = append([]byte(nil), b...) + } + } +} + +func (mi *mergeInfo) computeMergeInfo() { + mi.lock.Lock() + defer mi.lock.Unlock() + if mi.initialized != 0 { + return + } + t := mi.typ + n := t.NumField() + + props := GetProperties(t) + for i := 0; i < n; i++ { + f := t.Field(i) + if strings.HasPrefix(f.Name, "XXX_") { + continue + } + + mfi := mergeFieldInfo{field: toField(&f)} + tf := f.Type + + // As an optimization, we can avoid the merge function call cost + // if we know for sure that the source will have no effect + // by checking if it is the zero value. + if unsafeAllowed { + switch tf.Kind() { + case reflect.Ptr, reflect.Slice, reflect.String: + // As a special case, we assume slices and strings are pointers + // since we know that the first field in the SliceSlice or + // StringHeader is a data pointer. + mfi.isPointer = true + case reflect.Bool: + mfi.basicWidth = 1 + case reflect.Int32, reflect.Uint32, reflect.Float32: + mfi.basicWidth = 4 + case reflect.Int64, reflect.Uint64, reflect.Float64: + mfi.basicWidth = 8 + } + } + + // Unwrap tf to get at its most basic type. + var isPointer, isSlice bool + if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 { + isSlice = true + tf = tf.Elem() + } + if tf.Kind() == reflect.Ptr { + isPointer = true + tf = tf.Elem() + } + if isPointer && isSlice && tf.Kind() != reflect.Struct { + panic("both pointer and slice for basic type in " + tf.Name()) + } + + switch tf.Kind() { + case reflect.Int32: + switch { + case isSlice: // E.g., []int32 + mfi.merge = func(dst, src pointer) { + // NOTE: toInt32Slice is not defined (see pointer_reflect.go). + /* + sfsp := src.toInt32Slice() + if *sfsp != nil { + dfsp := dst.toInt32Slice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []int64{} + } + } + */ + sfs := src.getInt32Slice() + if sfs != nil { + dfs := dst.getInt32Slice() + dfs = append(dfs, sfs...) + if dfs == nil { + dfs = []int32{} + } + dst.setInt32Slice(dfs) + } + } + case isPointer: // E.g., *int32 + mfi.merge = func(dst, src pointer) { + // NOTE: toInt32Ptr is not defined (see pointer_reflect.go). + /* + sfpp := src.toInt32Ptr() + if *sfpp != nil { + dfpp := dst.toInt32Ptr() + if *dfpp == nil { + *dfpp = Int32(**sfpp) + } else { + **dfpp = **sfpp + } + } + */ + sfp := src.getInt32Ptr() + if sfp != nil { + dfp := dst.getInt32Ptr() + if dfp == nil { + dst.setInt32Ptr(*sfp) + } else { + *dfp = *sfp + } + } + } + default: // E.g., int32 + mfi.merge = func(dst, src pointer) { + if v := *src.toInt32(); v != 0 { + *dst.toInt32() = v + } + } + } + case reflect.Int64: + switch { + case isSlice: // E.g., []int64 + mfi.merge = func(dst, src pointer) { + sfsp := src.toInt64Slice() + if *sfsp != nil { + dfsp := dst.toInt64Slice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []int64{} + } + } + } + case isPointer: // E.g., *int64 + mfi.merge = func(dst, src pointer) { + sfpp := src.toInt64Ptr() + if *sfpp != nil { + dfpp := dst.toInt64Ptr() + if *dfpp == nil { + *dfpp = Int64(**sfpp) + } else { + **dfpp = **sfpp + } + } + } + default: // E.g., int64 + mfi.merge = func(dst, src pointer) { + if v := *src.toInt64(); v != 0 { + *dst.toInt64() = v + } + } + } + case reflect.Uint32: + switch { + case isSlice: // E.g., []uint32 + mfi.merge = func(dst, src pointer) { + sfsp := src.toUint32Slice() + if *sfsp != nil { + dfsp := dst.toUint32Slice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []uint32{} + } + } + } + case isPointer: // E.g., *uint32 + mfi.merge = func(dst, src pointer) { + sfpp := src.toUint32Ptr() + if *sfpp != nil { + dfpp := dst.toUint32Ptr() + if *dfpp == nil { + *dfpp = Uint32(**sfpp) + } else { + **dfpp = **sfpp + } + } + } + default: // E.g., uint32 + mfi.merge = func(dst, src pointer) { + if v := *src.toUint32(); v != 0 { + *dst.toUint32() = v + } + } + } + case reflect.Uint64: + switch { + case isSlice: // E.g., []uint64 + mfi.merge = func(dst, src pointer) { + sfsp := src.toUint64Slice() + if *sfsp != nil { + dfsp := dst.toUint64Slice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []uint64{} + } + } + } + case isPointer: // E.g., *uint64 + mfi.merge = func(dst, src pointer) { + sfpp := src.toUint64Ptr() + if *sfpp != nil { + dfpp := dst.toUint64Ptr() + if *dfpp == nil { + *dfpp = Uint64(**sfpp) + } else { + **dfpp = **sfpp + } + } + } + default: // E.g., uint64 + mfi.merge = func(dst, src pointer) { + if v := *src.toUint64(); v != 0 { + *dst.toUint64() = v + } + } + } + case reflect.Float32: + switch { + case isSlice: // E.g., []float32 + mfi.merge = func(dst, src pointer) { + sfsp := src.toFloat32Slice() + if *sfsp != nil { + dfsp := dst.toFloat32Slice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []float32{} + } + } + } + case isPointer: // E.g., *float32 + mfi.merge = func(dst, src pointer) { + sfpp := src.toFloat32Ptr() + if *sfpp != nil { + dfpp := dst.toFloat32Ptr() + if *dfpp == nil { + *dfpp = Float32(**sfpp) + } else { + **dfpp = **sfpp + } + } + } + default: // E.g., float32 + mfi.merge = func(dst, src pointer) { + if v := *src.toFloat32(); v != 0 { + *dst.toFloat32() = v + } + } + } + case reflect.Float64: + switch { + case isSlice: // E.g., []float64 + mfi.merge = func(dst, src pointer) { + sfsp := src.toFloat64Slice() + if *sfsp != nil { + dfsp := dst.toFloat64Slice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []float64{} + } + } + } + case isPointer: // E.g., *float64 + mfi.merge = func(dst, src pointer) { + sfpp := src.toFloat64Ptr() + if *sfpp != nil { + dfpp := dst.toFloat64Ptr() + if *dfpp == nil { + *dfpp = Float64(**sfpp) + } else { + **dfpp = **sfpp + } + } + } + default: // E.g., float64 + mfi.merge = func(dst, src pointer) { + if v := *src.toFloat64(); v != 0 { + *dst.toFloat64() = v + } + } + } + case reflect.Bool: + switch { + case isSlice: // E.g., []bool + mfi.merge = func(dst, src pointer) { + sfsp := src.toBoolSlice() + if *sfsp != nil { + dfsp := dst.toBoolSlice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []bool{} + } + } + } + case isPointer: // E.g., *bool + mfi.merge = func(dst, src pointer) { + sfpp := src.toBoolPtr() + if *sfpp != nil { + dfpp := dst.toBoolPtr() + if *dfpp == nil { + *dfpp = Bool(**sfpp) + } else { + **dfpp = **sfpp + } + } + } + default: // E.g., bool + mfi.merge = func(dst, src pointer) { + if v := *src.toBool(); v { + *dst.toBool() = v + } + } + } + case reflect.String: + switch { + case isSlice: // E.g., []string + mfi.merge = func(dst, src pointer) { + sfsp := src.toStringSlice() + if *sfsp != nil { + dfsp := dst.toStringSlice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []string{} + } + } + } + case isPointer: // E.g., *string + mfi.merge = func(dst, src pointer) { + sfpp := src.toStringPtr() + if *sfpp != nil { + dfpp := dst.toStringPtr() + if *dfpp == nil { + *dfpp = String(**sfpp) + } else { + **dfpp = **sfpp + } + } + } + default: // E.g., string + mfi.merge = func(dst, src pointer) { + if v := *src.toString(); v != "" { + *dst.toString() = v + } + } + } + case reflect.Slice: + isProto3 := props.Prop[i].proto3 + switch { + case isPointer: + panic("bad pointer in byte slice case in " + tf.Name()) + case tf.Elem().Kind() != reflect.Uint8: + panic("bad element kind in byte slice case in " + tf.Name()) + case isSlice: // E.g., [][]byte + mfi.merge = func(dst, src pointer) { + sbsp := src.toBytesSlice() + if *sbsp != nil { + dbsp := dst.toBytesSlice() + for _, sb := range *sbsp { + if sb == nil { + *dbsp = append(*dbsp, nil) + } else { + *dbsp = append(*dbsp, append([]byte{}, sb...)) + } + } + if *dbsp == nil { + *dbsp = [][]byte{} + } + } + } + default: // E.g., []byte + mfi.merge = func(dst, src pointer) { + sbp := src.toBytes() + if *sbp != nil { + dbp := dst.toBytes() + if !isProto3 || len(*sbp) > 0 { + *dbp = append([]byte{}, *sbp...) + } + } + } + } + case reflect.Struct: + switch { + case !isPointer: + panic(fmt.Sprintf("message field %s without pointer", tf)) + case isSlice: // E.g., []*pb.T + mi := getMergeInfo(tf) + mfi.merge = func(dst, src pointer) { + sps := src.getPointerSlice() + if sps != nil { + dps := dst.getPointerSlice() + for _, sp := range sps { + var dp pointer + if !sp.isNil() { + dp = valToPointer(reflect.New(tf)) + mi.merge(dp, sp) + } + dps = append(dps, dp) + } + if dps == nil { + dps = []pointer{} + } + dst.setPointerSlice(dps) + } + } + default: // E.g., *pb.T + mi := getMergeInfo(tf) + mfi.merge = func(dst, src pointer) { + sp := src.getPointer() + if !sp.isNil() { + dp := dst.getPointer() + if dp.isNil() { + dp = valToPointer(reflect.New(tf)) + dst.setPointer(dp) + } + mi.merge(dp, sp) + } + } + } + case reflect.Map: + switch { + case isPointer || isSlice: + panic("bad pointer or slice in map case in " + tf.Name()) + default: // E.g., map[K]V + mfi.merge = func(dst, src pointer) { + sm := src.asPointerTo(tf).Elem() + if sm.Len() == 0 { + return + } + dm := dst.asPointerTo(tf).Elem() + if dm.IsNil() { + dm.Set(reflect.MakeMap(tf)) + } + + switch tf.Elem().Kind() { + case reflect.Ptr: // Proto struct (e.g., *T) + for _, key := range sm.MapKeys() { + val := sm.MapIndex(key) + val = reflect.ValueOf(Clone(val.Interface().(Message))) + dm.SetMapIndex(key, val) + } + case reflect.Slice: // E.g. Bytes type (e.g., []byte) + for _, key := range sm.MapKeys() { + val := sm.MapIndex(key) + val = reflect.ValueOf(append([]byte{}, val.Bytes()...)) + dm.SetMapIndex(key, val) + } + default: // Basic type (e.g., string) + for _, key := range sm.MapKeys() { + val := sm.MapIndex(key) + dm.SetMapIndex(key, val) + } + } + } + } + case reflect.Interface: + // Must be oneof field. + switch { + case isPointer || isSlice: + panic("bad pointer or slice in interface case in " + tf.Name()) + default: // E.g., interface{} + // TODO: Make this faster? + mfi.merge = func(dst, src pointer) { + su := src.asPointerTo(tf).Elem() + if !su.IsNil() { + du := dst.asPointerTo(tf).Elem() + typ := su.Elem().Type() + if du.IsNil() || du.Elem().Type() != typ { + du.Set(reflect.New(typ.Elem())) // Initialize interface if empty + } + sv := su.Elem().Elem().Field(0) + if sv.Kind() == reflect.Ptr && sv.IsNil() { + return + } + dv := du.Elem().Elem().Field(0) + if dv.Kind() == reflect.Ptr && dv.IsNil() { + dv.Set(reflect.New(sv.Type().Elem())) // Initialize proto message if empty + } + switch sv.Type().Kind() { + case reflect.Ptr: // Proto struct (e.g., *T) + Merge(dv.Interface().(Message), sv.Interface().(Message)) + case reflect.Slice: // E.g. Bytes type (e.g., []byte) + dv.Set(reflect.ValueOf(append([]byte{}, sv.Bytes()...))) + default: // Basic type (e.g., string) + dv.Set(sv) + } + } + } + } + default: + panic(fmt.Sprintf("merger not found for type:%s", tf)) + } + mi.fields = append(mi.fields, mfi) + } + + mi.unrecognized = invalidField + if f, ok := t.FieldByName("XXX_unrecognized"); ok { + if f.Type != reflect.TypeOf([]byte{}) { + panic("expected XXX_unrecognized to be of type []byte") + } + mi.unrecognized = toField(&f) + } + + atomic.StoreInt32(&mi.initialized, 1) +} diff --git a/vendor/github.com/golang/protobuf/proto/table_unmarshal.go b/vendor/github.com/golang/protobuf/proto/table_unmarshal.go new file mode 100644 index 00000000..55f0340a --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/table_unmarshal.go @@ -0,0 +1,1967 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2016 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +import ( + "errors" + "fmt" + "io" + "math" + "reflect" + "strconv" + "strings" + "sync" + "sync/atomic" + "unicode/utf8" +) + +// Unmarshal is the entry point from the generated .pb.go files. +// This function is not intended to be used by non-generated code. +// This function is not subject to any compatibility guarantee. +// msg contains a pointer to a protocol buffer struct. +// b is the data to be unmarshaled into the protocol buffer. +// a is a pointer to a place to store cached unmarshal information. +func (a *InternalMessageInfo) Unmarshal(msg Message, b []byte) error { + // Load the unmarshal information for this message type. + // The atomic load ensures memory consistency. + u := atomicLoadUnmarshalInfo(&a.unmarshal) + if u == nil { + // Slow path: find unmarshal info for msg, update a with it. + u = getUnmarshalInfo(reflect.TypeOf(msg).Elem()) + atomicStoreUnmarshalInfo(&a.unmarshal, u) + } + // Then do the unmarshaling. + err := u.unmarshal(toPointer(&msg), b) + return err +} + +type unmarshalInfo struct { + typ reflect.Type // type of the protobuf struct + + // 0 = only typ field is initialized + // 1 = completely initialized + initialized int32 + lock sync.Mutex // prevents double initialization + dense []unmarshalFieldInfo // fields indexed by tag # + sparse map[uint64]unmarshalFieldInfo // fields indexed by tag # + reqFields []string // names of required fields + reqMask uint64 // 1< 0 { + // Read tag and wire type. + // Special case 1 and 2 byte varints. + var x uint64 + if b[0] < 128 { + x = uint64(b[0]) + b = b[1:] + } else if len(b) >= 2 && b[1] < 128 { + x = uint64(b[0]&0x7f) + uint64(b[1])<<7 + b = b[2:] + } else { + var n int + x, n = decodeVarint(b) + if n == 0 { + return io.ErrUnexpectedEOF + } + b = b[n:] + } + tag := x >> 3 + wire := int(x) & 7 + + // Dispatch on the tag to one of the unmarshal* functions below. + var f unmarshalFieldInfo + if tag < uint64(len(u.dense)) { + f = u.dense[tag] + } else { + f = u.sparse[tag] + } + if fn := f.unmarshal; fn != nil { + var err error + b, err = fn(b, m.offset(f.field), wire) + if err == nil { + reqMask |= f.reqMask + continue + } + if r, ok := err.(*RequiredNotSetError); ok { + // Remember this error, but keep parsing. We need to produce + // a full parse even if a required field is missing. + rnse = r + reqMask |= f.reqMask + continue + } + if err != errInternalBadWireType { + return err + } + // Fragments with bad wire type are treated as unknown fields. + } + + // Unknown tag. + if !u.unrecognized.IsValid() { + // Don't keep unrecognized data; just skip it. + var err error + b, err = skipField(b, wire) + if err != nil { + return err + } + continue + } + // Keep unrecognized data around. + // maybe in extensions, maybe in the unrecognized field. + z := m.offset(u.unrecognized).toBytes() + var emap map[int32]Extension + var e Extension + for _, r := range u.extensionRanges { + if uint64(r.Start) <= tag && tag <= uint64(r.End) { + if u.extensions.IsValid() { + mp := m.offset(u.extensions).toExtensions() + emap = mp.extensionsWrite() + e = emap[int32(tag)] + z = &e.enc + break + } + if u.oldExtensions.IsValid() { + p := m.offset(u.oldExtensions).toOldExtensions() + emap = *p + if emap == nil { + emap = map[int32]Extension{} + *p = emap + } + e = emap[int32(tag)] + z = &e.enc + break + } + panic("no extensions field available") + } + } + + // Use wire type to skip data. + var err error + b0 := b + b, err = skipField(b, wire) + if err != nil { + return err + } + *z = encodeVarint(*z, tag<<3|uint64(wire)) + *z = append(*z, b0[:len(b0)-len(b)]...) + + if emap != nil { + emap[int32(tag)] = e + } + } + if rnse != nil { + // A required field of a submessage/group is missing. Return that error. + return rnse + } + if reqMask != u.reqMask { + // A required field of this message is missing. + for _, n := range u.reqFields { + if reqMask&1 == 0 { + return &RequiredNotSetError{n} + } + reqMask >>= 1 + } + } + return nil +} + +// computeUnmarshalInfo fills in u with information for use +// in unmarshaling protocol buffers of type u.typ. +func (u *unmarshalInfo) computeUnmarshalInfo() { + u.lock.Lock() + defer u.lock.Unlock() + if u.initialized != 0 { + return + } + t := u.typ + n := t.NumField() + + // Set up the "not found" value for the unrecognized byte buffer. + // This is the default for proto3. + u.unrecognized = invalidField + u.extensions = invalidField + u.oldExtensions = invalidField + + // List of the generated type and offset for each oneof field. + type oneofField struct { + ityp reflect.Type // interface type of oneof field + field field // offset in containing message + } + var oneofFields []oneofField + + for i := 0; i < n; i++ { + f := t.Field(i) + if f.Name == "XXX_unrecognized" { + // The byte slice used to hold unrecognized input is special. + if f.Type != reflect.TypeOf(([]byte)(nil)) { + panic("bad type for XXX_unrecognized field: " + f.Type.Name()) + } + u.unrecognized = toField(&f) + continue + } + if f.Name == "XXX_InternalExtensions" { + // Ditto here. + if f.Type != reflect.TypeOf(XXX_InternalExtensions{}) { + panic("bad type for XXX_InternalExtensions field: " + f.Type.Name()) + } + u.extensions = toField(&f) + if f.Tag.Get("protobuf_messageset") == "1" { + u.isMessageSet = true + } + continue + } + if f.Name == "XXX_extensions" { + // An older form of the extensions field. + if f.Type != reflect.TypeOf((map[int32]Extension)(nil)) { + panic("bad type for XXX_extensions field: " + f.Type.Name()) + } + u.oldExtensions = toField(&f) + continue + } + if f.Name == "XXX_NoUnkeyedLiteral" || f.Name == "XXX_sizecache" { + continue + } + + oneof := f.Tag.Get("protobuf_oneof") + if oneof != "" { + oneofFields = append(oneofFields, oneofField{f.Type, toField(&f)}) + // The rest of oneof processing happens below. + continue + } + + tags := f.Tag.Get("protobuf") + tagArray := strings.Split(tags, ",") + if len(tagArray) < 2 { + panic("protobuf tag not enough fields in " + t.Name() + "." + f.Name + ": " + tags) + } + tag, err := strconv.Atoi(tagArray[1]) + if err != nil { + panic("protobuf tag field not an integer: " + tagArray[1]) + } + + name := "" + for _, tag := range tagArray[3:] { + if strings.HasPrefix(tag, "name=") { + name = tag[5:] + } + } + + // Extract unmarshaling function from the field (its type and tags). + unmarshal := fieldUnmarshaler(&f) + + // Required field? + var reqMask uint64 + if tagArray[2] == "req" { + bit := len(u.reqFields) + u.reqFields = append(u.reqFields, name) + reqMask = uint64(1) << uint(bit) + // TODO: if we have more than 64 required fields, we end up + // not verifying that all required fields are present. + // Fix this, perhaps using a count of required fields? + } + + // Store the info in the correct slot in the message. + u.setTag(tag, toField(&f), unmarshal, reqMask) + } + + // Find any types associated with oneof fields. + // TODO: XXX_OneofFuncs returns more info than we need. Get rid of some of it? + fn := reflect.Zero(reflect.PtrTo(t)).MethodByName("XXX_OneofFuncs") + if fn.IsValid() { + res := fn.Call(nil)[3] // last return value from XXX_OneofFuncs: []interface{} + for i := res.Len() - 1; i >= 0; i-- { + v := res.Index(i) // interface{} + tptr := reflect.ValueOf(v.Interface()).Type() // *Msg_X + typ := tptr.Elem() // Msg_X + + f := typ.Field(0) // oneof implementers have one field + baseUnmarshal := fieldUnmarshaler(&f) + tagstr := strings.Split(f.Tag.Get("protobuf"), ",")[1] + tag, err := strconv.Atoi(tagstr) + if err != nil { + panic("protobuf tag field not an integer: " + tagstr) + } + + // Find the oneof field that this struct implements. + // Might take O(n^2) to process all of the oneofs, but who cares. + for _, of := range oneofFields { + if tptr.Implements(of.ityp) { + // We have found the corresponding interface for this struct. + // That lets us know where this struct should be stored + // when we encounter it during unmarshaling. + unmarshal := makeUnmarshalOneof(typ, of.ityp, baseUnmarshal) + u.setTag(tag, of.field, unmarshal, 0) + } + } + } + } + + // Get extension ranges, if any. + fn = reflect.Zero(reflect.PtrTo(t)).MethodByName("ExtensionRangeArray") + if fn.IsValid() { + if !u.extensions.IsValid() && !u.oldExtensions.IsValid() { + panic("a message with extensions, but no extensions field in " + t.Name()) + } + u.extensionRanges = fn.Call(nil)[0].Interface().([]ExtensionRange) + } + + // Explicitly disallow tag 0. This will ensure we flag an error + // when decoding a buffer of all zeros. Without this code, we + // would decode and skip an all-zero buffer of even length. + // [0 0] is [tag=0/wiretype=varint varint-encoded-0]. + u.setTag(0, zeroField, func(b []byte, f pointer, w int) ([]byte, error) { + return nil, fmt.Errorf("proto: %s: illegal tag 0 (wire type %d)", t, w) + }, 0) + + // Set mask for required field check. + u.reqMask = uint64(1)<= 0 && (tag < 16 || tag < 2*n) { // TODO: what are the right numbers here? + for len(u.dense) <= tag { + u.dense = append(u.dense, unmarshalFieldInfo{}) + } + u.dense[tag] = i + return + } + if u.sparse == nil { + u.sparse = map[uint64]unmarshalFieldInfo{} + } + u.sparse[uint64(tag)] = i +} + +// fieldUnmarshaler returns an unmarshaler for the given field. +func fieldUnmarshaler(f *reflect.StructField) unmarshaler { + if f.Type.Kind() == reflect.Map { + return makeUnmarshalMap(f) + } + return typeUnmarshaler(f.Type, f.Tag.Get("protobuf")) +} + +// typeUnmarshaler returns an unmarshaler for the given field type / field tag pair. +func typeUnmarshaler(t reflect.Type, tags string) unmarshaler { + tagArray := strings.Split(tags, ",") + encoding := tagArray[0] + name := "unknown" + for _, tag := range tagArray[3:] { + if strings.HasPrefix(tag, "name=") { + name = tag[5:] + } + } + + // Figure out packaging (pointer, slice, or both) + slice := false + pointer := false + if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 { + slice = true + t = t.Elem() + } + if t.Kind() == reflect.Ptr { + pointer = true + t = t.Elem() + } + + // We'll never have both pointer and slice for basic types. + if pointer && slice && t.Kind() != reflect.Struct { + panic("both pointer and slice for basic type in " + t.Name()) + } + + switch t.Kind() { + case reflect.Bool: + if pointer { + return unmarshalBoolPtr + } + if slice { + return unmarshalBoolSlice + } + return unmarshalBoolValue + case reflect.Int32: + switch encoding { + case "fixed32": + if pointer { + return unmarshalFixedS32Ptr + } + if slice { + return unmarshalFixedS32Slice + } + return unmarshalFixedS32Value + case "varint": + // this could be int32 or enum + if pointer { + return unmarshalInt32Ptr + } + if slice { + return unmarshalInt32Slice + } + return unmarshalInt32Value + case "zigzag32": + if pointer { + return unmarshalSint32Ptr + } + if slice { + return unmarshalSint32Slice + } + return unmarshalSint32Value + } + case reflect.Int64: + switch encoding { + case "fixed64": + if pointer { + return unmarshalFixedS64Ptr + } + if slice { + return unmarshalFixedS64Slice + } + return unmarshalFixedS64Value + case "varint": + if pointer { + return unmarshalInt64Ptr + } + if slice { + return unmarshalInt64Slice + } + return unmarshalInt64Value + case "zigzag64": + if pointer { + return unmarshalSint64Ptr + } + if slice { + return unmarshalSint64Slice + } + return unmarshalSint64Value + } + case reflect.Uint32: + switch encoding { + case "fixed32": + if pointer { + return unmarshalFixed32Ptr + } + if slice { + return unmarshalFixed32Slice + } + return unmarshalFixed32Value + case "varint": + if pointer { + return unmarshalUint32Ptr + } + if slice { + return unmarshalUint32Slice + } + return unmarshalUint32Value + } + case reflect.Uint64: + switch encoding { + case "fixed64": + if pointer { + return unmarshalFixed64Ptr + } + if slice { + return unmarshalFixed64Slice + } + return unmarshalFixed64Value + case "varint": + if pointer { + return unmarshalUint64Ptr + } + if slice { + return unmarshalUint64Slice + } + return unmarshalUint64Value + } + case reflect.Float32: + if pointer { + return unmarshalFloat32Ptr + } + if slice { + return unmarshalFloat32Slice + } + return unmarshalFloat32Value + case reflect.Float64: + if pointer { + return unmarshalFloat64Ptr + } + if slice { + return unmarshalFloat64Slice + } + return unmarshalFloat64Value + case reflect.Map: + panic("map type in typeUnmarshaler in " + t.Name()) + case reflect.Slice: + if pointer { + panic("bad pointer in slice case in " + t.Name()) + } + if slice { + return unmarshalBytesSlice + } + return unmarshalBytesValue + case reflect.String: + if pointer { + return unmarshalStringPtr + } + if slice { + return unmarshalStringSlice + } + return unmarshalStringValue + case reflect.Struct: + // message or group field + if !pointer { + panic(fmt.Sprintf("message/group field %s:%s without pointer", t, encoding)) + } + switch encoding { + case "bytes": + if slice { + return makeUnmarshalMessageSlicePtr(getUnmarshalInfo(t), name) + } + return makeUnmarshalMessagePtr(getUnmarshalInfo(t), name) + case "group": + if slice { + return makeUnmarshalGroupSlicePtr(getUnmarshalInfo(t), name) + } + return makeUnmarshalGroupPtr(getUnmarshalInfo(t), name) + } + } + panic(fmt.Sprintf("unmarshaler not found type:%s encoding:%s", t, encoding)) +} + +// Below are all the unmarshalers for individual fields of various types. + +func unmarshalInt64Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x) + *f.toInt64() = v + return b, nil +} + +func unmarshalInt64Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x) + *f.toInt64Ptr() = &v + return b, nil +} + +func unmarshalInt64Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + x, n = decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x) + s := f.toInt64Slice() + *s = append(*s, v) + } + return res, nil + } + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x) + s := f.toInt64Slice() + *s = append(*s, v) + return b, nil +} + +func unmarshalSint64Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x>>1) ^ int64(x)<<63>>63 + *f.toInt64() = v + return b, nil +} + +func unmarshalSint64Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x>>1) ^ int64(x)<<63>>63 + *f.toInt64Ptr() = &v + return b, nil +} + +func unmarshalSint64Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + x, n = decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x>>1) ^ int64(x)<<63>>63 + s := f.toInt64Slice() + *s = append(*s, v) + } + return res, nil + } + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x>>1) ^ int64(x)<<63>>63 + s := f.toInt64Slice() + *s = append(*s, v) + return b, nil +} + +func unmarshalUint64Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint64(x) + *f.toUint64() = v + return b, nil +} + +func unmarshalUint64Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint64(x) + *f.toUint64Ptr() = &v + return b, nil +} + +func unmarshalUint64Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + x, n = decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint64(x) + s := f.toUint64Slice() + *s = append(*s, v) + } + return res, nil + } + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint64(x) + s := f.toUint64Slice() + *s = append(*s, v) + return b, nil +} + +func unmarshalInt32Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x) + *f.toInt32() = v + return b, nil +} + +func unmarshalInt32Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x) + f.setInt32Ptr(v) + return b, nil +} + +func unmarshalInt32Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + x, n = decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x) + f.appendInt32Slice(v) + } + return res, nil + } + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x) + f.appendInt32Slice(v) + return b, nil +} + +func unmarshalSint32Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x>>1) ^ int32(x)<<31>>31 + *f.toInt32() = v + return b, nil +} + +func unmarshalSint32Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x>>1) ^ int32(x)<<31>>31 + f.setInt32Ptr(v) + return b, nil +} + +func unmarshalSint32Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + x, n = decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x>>1) ^ int32(x)<<31>>31 + f.appendInt32Slice(v) + } + return res, nil + } + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x>>1) ^ int32(x)<<31>>31 + f.appendInt32Slice(v) + return b, nil +} + +func unmarshalUint32Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint32(x) + *f.toUint32() = v + return b, nil +} + +func unmarshalUint32Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint32(x) + *f.toUint32Ptr() = &v + return b, nil +} + +func unmarshalUint32Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + x, n = decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint32(x) + s := f.toUint32Slice() + *s = append(*s, v) + } + return res, nil + } + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint32(x) + s := f.toUint32Slice() + *s = append(*s, v) + return b, nil +} + +func unmarshalFixed64Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 + *f.toUint64() = v + return b[8:], nil +} + +func unmarshalFixed64Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 + *f.toUint64Ptr() = &v + return b[8:], nil +} + +func unmarshalFixed64Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 + s := f.toUint64Slice() + *s = append(*s, v) + b = b[8:] + } + return res, nil + } + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 + s := f.toUint64Slice() + *s = append(*s, v) + return b[8:], nil +} + +func unmarshalFixedS64Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 + *f.toInt64() = v + return b[8:], nil +} + +func unmarshalFixedS64Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 + *f.toInt64Ptr() = &v + return b[8:], nil +} + +func unmarshalFixedS64Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 + s := f.toInt64Slice() + *s = append(*s, v) + b = b[8:] + } + return res, nil + } + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 + s := f.toInt64Slice() + *s = append(*s, v) + return b[8:], nil +} + +func unmarshalFixed32Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 + *f.toUint32() = v + return b[4:], nil +} + +func unmarshalFixed32Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 + *f.toUint32Ptr() = &v + return b[4:], nil +} + +func unmarshalFixed32Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 + s := f.toUint32Slice() + *s = append(*s, v) + b = b[4:] + } + return res, nil + } + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 + s := f.toUint32Slice() + *s = append(*s, v) + return b[4:], nil +} + +func unmarshalFixedS32Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 + *f.toInt32() = v + return b[4:], nil +} + +func unmarshalFixedS32Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 + f.setInt32Ptr(v) + return b[4:], nil +} + +func unmarshalFixedS32Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 + f.appendInt32Slice(v) + b = b[4:] + } + return res, nil + } + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 + f.appendInt32Slice(v) + return b[4:], nil +} + +func unmarshalBoolValue(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + // Note: any length varint is allowed, even though any sane + // encoder will use one byte. + // See https://github.com/golang/protobuf/issues/76 + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + // TODO: check if x>1? Tests seem to indicate no. + v := x != 0 + *f.toBool() = v + return b[n:], nil +} + +func unmarshalBoolPtr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + v := x != 0 + *f.toBoolPtr() = &v + return b[n:], nil +} + +func unmarshalBoolSlice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + x, n = decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + v := x != 0 + s := f.toBoolSlice() + *s = append(*s, v) + b = b[n:] + } + return res, nil + } + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + v := x != 0 + s := f.toBoolSlice() + *s = append(*s, v) + return b[n:], nil +} + +func unmarshalFloat64Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) + *f.toFloat64() = v + return b[8:], nil +} + +func unmarshalFloat64Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) + *f.toFloat64Ptr() = &v + return b[8:], nil +} + +func unmarshalFloat64Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) + s := f.toFloat64Slice() + *s = append(*s, v) + b = b[8:] + } + return res, nil + } + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) + s := f.toFloat64Slice() + *s = append(*s, v) + return b[8:], nil +} + +func unmarshalFloat32Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) + *f.toFloat32() = v + return b[4:], nil +} + +func unmarshalFloat32Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) + *f.toFloat32Ptr() = &v + return b[4:], nil +} + +func unmarshalFloat32Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) + s := f.toFloat32Slice() + *s = append(*s, v) + b = b[4:] + } + return res, nil + } + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) + s := f.toFloat32Slice() + *s = append(*s, v) + return b[4:], nil +} + +func unmarshalStringValue(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := string(b[:x]) + if !utf8.ValidString(v) { + return nil, errInvalidUTF8 + } + *f.toString() = v + return b[x:], nil +} + +func unmarshalStringPtr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := string(b[:x]) + if !utf8.ValidString(v) { + return nil, errInvalidUTF8 + } + *f.toStringPtr() = &v + return b[x:], nil +} + +func unmarshalStringSlice(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := string(b[:x]) + if !utf8.ValidString(v) { + return nil, errInvalidUTF8 + } + s := f.toStringSlice() + *s = append(*s, v) + return b[x:], nil +} + +var emptyBuf [0]byte + +func unmarshalBytesValue(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + // The use of append here is a trick which avoids the zeroing + // that would be required if we used a make/copy pair. + // We append to emptyBuf instead of nil because we want + // a non-nil result even when the length is 0. + v := append(emptyBuf[:], b[:x]...) + *f.toBytes() = v + return b[x:], nil +} + +func unmarshalBytesSlice(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := append(emptyBuf[:], b[:x]...) + s := f.toBytesSlice() + *s = append(*s, v) + return b[x:], nil +} + +func makeUnmarshalMessagePtr(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + // First read the message field to see if something is there. + // The semantics of multiple submessages are weird. Instead of + // the last one winning (as it is for all other fields), multiple + // submessages are merged. + v := f.getPointer() + if v.isNil() { + v = valToPointer(reflect.New(sub.typ)) + f.setPointer(v) + } + err := sub.unmarshal(v, b[:x]) + if err != nil { + if r, ok := err.(*RequiredNotSetError); ok { + r.field = name + "." + r.field + } else { + return nil, err + } + } + return b[x:], err + } +} + +func makeUnmarshalMessageSlicePtr(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := valToPointer(reflect.New(sub.typ)) + err := sub.unmarshal(v, b[:x]) + if err != nil { + if r, ok := err.(*RequiredNotSetError); ok { + r.field = name + "." + r.field + } else { + return nil, err + } + } + f.appendPointer(v) + return b[x:], err + } +} + +func makeUnmarshalGroupPtr(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireStartGroup { + return b, errInternalBadWireType + } + x, y := findEndGroup(b) + if x < 0 { + return nil, io.ErrUnexpectedEOF + } + v := f.getPointer() + if v.isNil() { + v = valToPointer(reflect.New(sub.typ)) + f.setPointer(v) + } + err := sub.unmarshal(v, b[:x]) + if err != nil { + if r, ok := err.(*RequiredNotSetError); ok { + r.field = name + "." + r.field + } else { + return nil, err + } + } + return b[y:], err + } +} + +func makeUnmarshalGroupSlicePtr(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireStartGroup { + return b, errInternalBadWireType + } + x, y := findEndGroup(b) + if x < 0 { + return nil, io.ErrUnexpectedEOF + } + v := valToPointer(reflect.New(sub.typ)) + err := sub.unmarshal(v, b[:x]) + if err != nil { + if r, ok := err.(*RequiredNotSetError); ok { + r.field = name + "." + r.field + } else { + return nil, err + } + } + f.appendPointer(v) + return b[y:], err + } +} + +func makeUnmarshalMap(f *reflect.StructField) unmarshaler { + t := f.Type + kt := t.Key() + vt := t.Elem() + unmarshalKey := typeUnmarshaler(kt, f.Tag.Get("protobuf_key")) + unmarshalVal := typeUnmarshaler(vt, f.Tag.Get("protobuf_val")) + return func(b []byte, f pointer, w int) ([]byte, error) { + // The map entry is a submessage. Figure out how big it is. + if w != WireBytes { + return nil, fmt.Errorf("proto: bad wiretype for map field: got %d want %d", w, WireBytes) + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + r := b[x:] // unused data to return + b = b[:x] // data for map entry + + // Note: we could use #keys * #values ~= 200 functions + // to do map decoding without reflection. Probably not worth it. + // Maps will be somewhat slow. Oh well. + + // Read key and value from data. + k := reflect.New(kt) + v := reflect.New(vt) + for len(b) > 0 { + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + wire := int(x) & 7 + b = b[n:] + + var err error + switch x >> 3 { + case 1: + b, err = unmarshalKey(b, valToPointer(k), wire) + case 2: + b, err = unmarshalVal(b, valToPointer(v), wire) + default: + err = errInternalBadWireType // skip unknown tag + } + + if err == nil { + continue + } + if err != errInternalBadWireType { + return nil, err + } + + // Skip past unknown fields. + b, err = skipField(b, wire) + if err != nil { + return nil, err + } + } + + // Get map, allocate if needed. + m := f.asPointerTo(t).Elem() // an addressable map[K]T + if m.IsNil() { + m.Set(reflect.MakeMap(t)) + } + + // Insert into map. + m.SetMapIndex(k.Elem(), v.Elem()) + + return r, nil + } +} + +// makeUnmarshalOneof makes an unmarshaler for oneof fields. +// for: +// message Msg { +// oneof F { +// int64 X = 1; +// float64 Y = 2; +// } +// } +// typ is the type of the concrete entry for a oneof case (e.g. Msg_X). +// ityp is the interface type of the oneof field (e.g. isMsg_F). +// unmarshal is the unmarshaler for the base type of the oneof case (e.g. int64). +// Note that this function will be called once for each case in the oneof. +func makeUnmarshalOneof(typ, ityp reflect.Type, unmarshal unmarshaler) unmarshaler { + sf := typ.Field(0) + field0 := toField(&sf) + return func(b []byte, f pointer, w int) ([]byte, error) { + // Allocate holder for value. + v := reflect.New(typ) + + // Unmarshal data into holder. + // We unmarshal into the first field of the holder object. + var err error + b, err = unmarshal(b, valToPointer(v).offset(field0), w) + if err != nil { + return nil, err + } + + // Write pointer to holder into target field. + f.asPointerTo(ityp).Elem().Set(v) + + return b, nil + } +} + +// Error used by decode internally. +var errInternalBadWireType = errors.New("proto: internal error: bad wiretype") + +// skipField skips past a field of type wire and returns the remaining bytes. +func skipField(b []byte, wire int) ([]byte, error) { + switch wire { + case WireVarint: + _, k := decodeVarint(b) + if k == 0 { + return b, io.ErrUnexpectedEOF + } + b = b[k:] + case WireFixed32: + if len(b) < 4 { + return b, io.ErrUnexpectedEOF + } + b = b[4:] + case WireFixed64: + if len(b) < 8 { + return b, io.ErrUnexpectedEOF + } + b = b[8:] + case WireBytes: + m, k := decodeVarint(b) + if k == 0 || uint64(len(b)-k) < m { + return b, io.ErrUnexpectedEOF + } + b = b[uint64(k)+m:] + case WireStartGroup: + _, i := findEndGroup(b) + if i == -1 { + return b, io.ErrUnexpectedEOF + } + b = b[i:] + default: + return b, fmt.Errorf("proto: can't skip unknown wire type %d", wire) + } + return b, nil +} + +// findEndGroup finds the index of the next EndGroup tag. +// Groups may be nested, so the "next" EndGroup tag is the first +// unpaired EndGroup. +// findEndGroup returns the indexes of the start and end of the EndGroup tag. +// Returns (-1,-1) if it can't find one. +func findEndGroup(b []byte) (int, int) { + depth := 1 + i := 0 + for { + x, n := decodeVarint(b[i:]) + if n == 0 { + return -1, -1 + } + j := i + i += n + switch x & 7 { + case WireVarint: + _, k := decodeVarint(b[i:]) + if k == 0 { + return -1, -1 + } + i += k + case WireFixed32: + if len(b)-4 < i { + return -1, -1 + } + i += 4 + case WireFixed64: + if len(b)-8 < i { + return -1, -1 + } + i += 8 + case WireBytes: + m, k := decodeVarint(b[i:]) + if k == 0 { + return -1, -1 + } + i += k + if uint64(len(b)-i) < m { + return -1, -1 + } + i += int(m) + case WireStartGroup: + depth++ + case WireEndGroup: + depth-- + if depth == 0 { + return j, i + } + default: + return -1, -1 + } + } +} + +// encodeVarint appends a varint-encoded integer to b and returns the result. +func encodeVarint(b []byte, x uint64) []byte { + for x >= 1<<7 { + b = append(b, byte(x&0x7f|0x80)) + x >>= 7 + } + return append(b, byte(x)) +} + +// decodeVarint reads a varint-encoded integer from b. +// Returns the decoded integer and the number of bytes read. +// If there is an error, it returns 0,0. +func decodeVarint(b []byte) (uint64, int) { + var x, y uint64 + if len(b) <= 0 { + goto bad + } + x = uint64(b[0]) + if x < 0x80 { + return x, 1 + } + x -= 0x80 + + if len(b) <= 1 { + goto bad + } + y = uint64(b[1]) + x += y << 7 + if y < 0x80 { + return x, 2 + } + x -= 0x80 << 7 + + if len(b) <= 2 { + goto bad + } + y = uint64(b[2]) + x += y << 14 + if y < 0x80 { + return x, 3 + } + x -= 0x80 << 14 + + if len(b) <= 3 { + goto bad + } + y = uint64(b[3]) + x += y << 21 + if y < 0x80 { + return x, 4 + } + x -= 0x80 << 21 + + if len(b) <= 4 { + goto bad + } + y = uint64(b[4]) + x += y << 28 + if y < 0x80 { + return x, 5 + } + x -= 0x80 << 28 + + if len(b) <= 5 { + goto bad + } + y = uint64(b[5]) + x += y << 35 + if y < 0x80 { + return x, 6 + } + x -= 0x80 << 35 + + if len(b) <= 6 { + goto bad + } + y = uint64(b[6]) + x += y << 42 + if y < 0x80 { + return x, 7 + } + x -= 0x80 << 42 + + if len(b) <= 7 { + goto bad + } + y = uint64(b[7]) + x += y << 49 + if y < 0x80 { + return x, 8 + } + x -= 0x80 << 49 + + if len(b) <= 8 { + goto bad + } + y = uint64(b[8]) + x += y << 56 + if y < 0x80 { + return x, 9 + } + x -= 0x80 << 56 + + if len(b) <= 9 { + goto bad + } + y = uint64(b[9]) + x += y << 63 + if y < 2 { + return x, 10 + } + +bad: + return 0, 0 +} diff --git a/vendor/github.com/golang/protobuf/proto/text.go b/vendor/github.com/golang/protobuf/proto/text.go new file mode 100644 index 00000000..2205fdaa --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/text.go @@ -0,0 +1,843 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +// Functions for writing the text protocol buffer format. + +import ( + "bufio" + "bytes" + "encoding" + "errors" + "fmt" + "io" + "log" + "math" + "reflect" + "sort" + "strings" +) + +var ( + newline = []byte("\n") + spaces = []byte(" ") + endBraceNewline = []byte("}\n") + backslashN = []byte{'\\', 'n'} + backslashR = []byte{'\\', 'r'} + backslashT = []byte{'\\', 't'} + backslashDQ = []byte{'\\', '"'} + backslashBS = []byte{'\\', '\\'} + posInf = []byte("inf") + negInf = []byte("-inf") + nan = []byte("nan") +) + +type writer interface { + io.Writer + WriteByte(byte) error +} + +// textWriter is an io.Writer that tracks its indentation level. +type textWriter struct { + ind int + complete bool // if the current position is a complete line + compact bool // whether to write out as a one-liner + w writer +} + +func (w *textWriter) WriteString(s string) (n int, err error) { + if !strings.Contains(s, "\n") { + if !w.compact && w.complete { + w.writeIndent() + } + w.complete = false + return io.WriteString(w.w, s) + } + // WriteString is typically called without newlines, so this + // codepath and its copy are rare. We copy to avoid + // duplicating all of Write's logic here. + return w.Write([]byte(s)) +} + +func (w *textWriter) Write(p []byte) (n int, err error) { + newlines := bytes.Count(p, newline) + if newlines == 0 { + if !w.compact && w.complete { + w.writeIndent() + } + n, err = w.w.Write(p) + w.complete = false + return n, err + } + + frags := bytes.SplitN(p, newline, newlines+1) + if w.compact { + for i, frag := range frags { + if i > 0 { + if err := w.w.WriteByte(' '); err != nil { + return n, err + } + n++ + } + nn, err := w.w.Write(frag) + n += nn + if err != nil { + return n, err + } + } + return n, nil + } + + for i, frag := range frags { + if w.complete { + w.writeIndent() + } + nn, err := w.w.Write(frag) + n += nn + if err != nil { + return n, err + } + if i+1 < len(frags) { + if err := w.w.WriteByte('\n'); err != nil { + return n, err + } + n++ + } + } + w.complete = len(frags[len(frags)-1]) == 0 + return n, nil +} + +func (w *textWriter) WriteByte(c byte) error { + if w.compact && c == '\n' { + c = ' ' + } + if !w.compact && w.complete { + w.writeIndent() + } + err := w.w.WriteByte(c) + w.complete = c == '\n' + return err +} + +func (w *textWriter) indent() { w.ind++ } + +func (w *textWriter) unindent() { + if w.ind == 0 { + log.Print("proto: textWriter unindented too far") + return + } + w.ind-- +} + +func writeName(w *textWriter, props *Properties) error { + if _, err := w.WriteString(props.OrigName); err != nil { + return err + } + if props.Wire != "group" { + return w.WriteByte(':') + } + return nil +} + +func requiresQuotes(u string) bool { + // When type URL contains any characters except [0-9A-Za-z./\-]*, it must be quoted. + for _, ch := range u { + switch { + case ch == '.' || ch == '/' || ch == '_': + continue + case '0' <= ch && ch <= '9': + continue + case 'A' <= ch && ch <= 'Z': + continue + case 'a' <= ch && ch <= 'z': + continue + default: + return true + } + } + return false +} + +// isAny reports whether sv is a google.protobuf.Any message +func isAny(sv reflect.Value) bool { + type wkt interface { + XXX_WellKnownType() string + } + t, ok := sv.Addr().Interface().(wkt) + return ok && t.XXX_WellKnownType() == "Any" +} + +// writeProto3Any writes an expanded google.protobuf.Any message. +// +// It returns (false, nil) if sv value can't be unmarshaled (e.g. because +// required messages are not linked in). +// +// It returns (true, error) when sv was written in expanded format or an error +// was encountered. +func (tm *TextMarshaler) writeProto3Any(w *textWriter, sv reflect.Value) (bool, error) { + turl := sv.FieldByName("TypeUrl") + val := sv.FieldByName("Value") + if !turl.IsValid() || !val.IsValid() { + return true, errors.New("proto: invalid google.protobuf.Any message") + } + + b, ok := val.Interface().([]byte) + if !ok { + return true, errors.New("proto: invalid google.protobuf.Any message") + } + + parts := strings.Split(turl.String(), "/") + mt := MessageType(parts[len(parts)-1]) + if mt == nil { + return false, nil + } + m := reflect.New(mt.Elem()) + if err := Unmarshal(b, m.Interface().(Message)); err != nil { + return false, nil + } + w.Write([]byte("[")) + u := turl.String() + if requiresQuotes(u) { + writeString(w, u) + } else { + w.Write([]byte(u)) + } + if w.compact { + w.Write([]byte("]:<")) + } else { + w.Write([]byte("]: <\n")) + w.ind++ + } + if err := tm.writeStruct(w, m.Elem()); err != nil { + return true, err + } + if w.compact { + w.Write([]byte("> ")) + } else { + w.ind-- + w.Write([]byte(">\n")) + } + return true, nil +} + +func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error { + if tm.ExpandAny && isAny(sv) { + if canExpand, err := tm.writeProto3Any(w, sv); canExpand { + return err + } + } + st := sv.Type() + sprops := GetProperties(st) + for i := 0; i < sv.NumField(); i++ { + fv := sv.Field(i) + props := sprops.Prop[i] + name := st.Field(i).Name + + if name == "XXX_NoUnkeyedLiteral" { + continue + } + + if strings.HasPrefix(name, "XXX_") { + // There are two XXX_ fields: + // XXX_unrecognized []byte + // XXX_extensions map[int32]proto.Extension + // The first is handled here; + // the second is handled at the bottom of this function. + if name == "XXX_unrecognized" && !fv.IsNil() { + if err := writeUnknownStruct(w, fv.Interface().([]byte)); err != nil { + return err + } + } + continue + } + if fv.Kind() == reflect.Ptr && fv.IsNil() { + // Field not filled in. This could be an optional field or + // a required field that wasn't filled in. Either way, there + // isn't anything we can show for it. + continue + } + if fv.Kind() == reflect.Slice && fv.IsNil() { + // Repeated field that is empty, or a bytes field that is unused. + continue + } + + if props.Repeated && fv.Kind() == reflect.Slice { + // Repeated field. + for j := 0; j < fv.Len(); j++ { + if err := writeName(w, props); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte(' '); err != nil { + return err + } + } + v := fv.Index(j) + if v.Kind() == reflect.Ptr && v.IsNil() { + // A nil message in a repeated field is not valid, + // but we can handle that more gracefully than panicking. + if _, err := w.Write([]byte("\n")); err != nil { + return err + } + continue + } + if err := tm.writeAny(w, v, props); err != nil { + return err + } + if err := w.WriteByte('\n'); err != nil { + return err + } + } + continue + } + if fv.Kind() == reflect.Map { + // Map fields are rendered as a repeated struct with key/value fields. + keys := fv.MapKeys() + sort.Sort(mapKeys(keys)) + for _, key := range keys { + val := fv.MapIndex(key) + if err := writeName(w, props); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte(' '); err != nil { + return err + } + } + // open struct + if err := w.WriteByte('<'); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte('\n'); err != nil { + return err + } + } + w.indent() + // key + if _, err := w.WriteString("key:"); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte(' '); err != nil { + return err + } + } + if err := tm.writeAny(w, key, props.mkeyprop); err != nil { + return err + } + if err := w.WriteByte('\n'); err != nil { + return err + } + // nil values aren't legal, but we can avoid panicking because of them. + if val.Kind() != reflect.Ptr || !val.IsNil() { + // value + if _, err := w.WriteString("value:"); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte(' '); err != nil { + return err + } + } + if err := tm.writeAny(w, val, props.mvalprop); err != nil { + return err + } + if err := w.WriteByte('\n'); err != nil { + return err + } + } + // close struct + w.unindent() + if err := w.WriteByte('>'); err != nil { + return err + } + if err := w.WriteByte('\n'); err != nil { + return err + } + } + continue + } + if props.proto3 && fv.Kind() == reflect.Slice && fv.Len() == 0 { + // empty bytes field + continue + } + if fv.Kind() != reflect.Ptr && fv.Kind() != reflect.Slice { + // proto3 non-repeated scalar field; skip if zero value + if isProto3Zero(fv) { + continue + } + } + + if fv.Kind() == reflect.Interface { + // Check if it is a oneof. + if st.Field(i).Tag.Get("protobuf_oneof") != "" { + // fv is nil, or holds a pointer to generated struct. + // That generated struct has exactly one field, + // which has a protobuf struct tag. + if fv.IsNil() { + continue + } + inner := fv.Elem().Elem() // interface -> *T -> T + tag := inner.Type().Field(0).Tag.Get("protobuf") + props = new(Properties) // Overwrite the outer props var, but not its pointee. + props.Parse(tag) + // Write the value in the oneof, not the oneof itself. + fv = inner.Field(0) + + // Special case to cope with malformed messages gracefully: + // If the value in the oneof is a nil pointer, don't panic + // in writeAny. + if fv.Kind() == reflect.Ptr && fv.IsNil() { + // Use errors.New so writeAny won't render quotes. + msg := errors.New("/* nil */") + fv = reflect.ValueOf(&msg).Elem() + } + } + } + + if err := writeName(w, props); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte(' '); err != nil { + return err + } + } + + // Enums have a String method, so writeAny will work fine. + if err := tm.writeAny(w, fv, props); err != nil { + return err + } + + if err := w.WriteByte('\n'); err != nil { + return err + } + } + + // Extensions (the XXX_extensions field). + pv := sv.Addr() + if _, err := extendable(pv.Interface()); err == nil { + if err := tm.writeExtensions(w, pv); err != nil { + return err + } + } + + return nil +} + +// writeAny writes an arbitrary field. +func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Properties) error { + v = reflect.Indirect(v) + + // Floats have special cases. + if v.Kind() == reflect.Float32 || v.Kind() == reflect.Float64 { + x := v.Float() + var b []byte + switch { + case math.IsInf(x, 1): + b = posInf + case math.IsInf(x, -1): + b = negInf + case math.IsNaN(x): + b = nan + } + if b != nil { + _, err := w.Write(b) + return err + } + // Other values are handled below. + } + + // We don't attempt to serialise every possible value type; only those + // that can occur in protocol buffers. + switch v.Kind() { + case reflect.Slice: + // Should only be a []byte; repeated fields are handled in writeStruct. + if err := writeString(w, string(v.Bytes())); err != nil { + return err + } + case reflect.String: + if err := writeString(w, v.String()); err != nil { + return err + } + case reflect.Struct: + // Required/optional group/message. + var bra, ket byte = '<', '>' + if props != nil && props.Wire == "group" { + bra, ket = '{', '}' + } + if err := w.WriteByte(bra); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte('\n'); err != nil { + return err + } + } + w.indent() + if v.CanAddr() { + // Calling v.Interface on a struct causes the reflect package to + // copy the entire struct. This is racy with the new Marshaler + // since we atomically update the XXX_sizecache. + // + // Thus, we retrieve a pointer to the struct if possible to avoid + // a race since v.Interface on the pointer doesn't copy the struct. + // + // If v is not addressable, then we are not worried about a race + // since it implies that the binary Marshaler cannot possibly be + // mutating this value. + v = v.Addr() + } + if etm, ok := v.Interface().(encoding.TextMarshaler); ok { + text, err := etm.MarshalText() + if err != nil { + return err + } + if _, err = w.Write(text); err != nil { + return err + } + } else { + if v.Kind() == reflect.Ptr { + v = v.Elem() + } + if err := tm.writeStruct(w, v); err != nil { + return err + } + } + w.unindent() + if err := w.WriteByte(ket); err != nil { + return err + } + default: + _, err := fmt.Fprint(w, v.Interface()) + return err + } + return nil +} + +// equivalent to C's isprint. +func isprint(c byte) bool { + return c >= 0x20 && c < 0x7f +} + +// writeString writes a string in the protocol buffer text format. +// It is similar to strconv.Quote except we don't use Go escape sequences, +// we treat the string as a byte sequence, and we use octal escapes. +// These differences are to maintain interoperability with the other +// languages' implementations of the text format. +func writeString(w *textWriter, s string) error { + // use WriteByte here to get any needed indent + if err := w.WriteByte('"'); err != nil { + return err + } + // Loop over the bytes, not the runes. + for i := 0; i < len(s); i++ { + var err error + // Divergence from C++: we don't escape apostrophes. + // There's no need to escape them, and the C++ parser + // copes with a naked apostrophe. + switch c := s[i]; c { + case '\n': + _, err = w.w.Write(backslashN) + case '\r': + _, err = w.w.Write(backslashR) + case '\t': + _, err = w.w.Write(backslashT) + case '"': + _, err = w.w.Write(backslashDQ) + case '\\': + _, err = w.w.Write(backslashBS) + default: + if isprint(c) { + err = w.w.WriteByte(c) + } else { + _, err = fmt.Fprintf(w.w, "\\%03o", c) + } + } + if err != nil { + return err + } + } + return w.WriteByte('"') +} + +func writeUnknownStruct(w *textWriter, data []byte) (err error) { + if !w.compact { + if _, err := fmt.Fprintf(w, "/* %d unknown bytes */\n", len(data)); err != nil { + return err + } + } + b := NewBuffer(data) + for b.index < len(b.buf) { + x, err := b.DecodeVarint() + if err != nil { + _, err := fmt.Fprintf(w, "/* %v */\n", err) + return err + } + wire, tag := x&7, x>>3 + if wire == WireEndGroup { + w.unindent() + if _, err := w.Write(endBraceNewline); err != nil { + return err + } + continue + } + if _, err := fmt.Fprint(w, tag); err != nil { + return err + } + if wire != WireStartGroup { + if err := w.WriteByte(':'); err != nil { + return err + } + } + if !w.compact || wire == WireStartGroup { + if err := w.WriteByte(' '); err != nil { + return err + } + } + switch wire { + case WireBytes: + buf, e := b.DecodeRawBytes(false) + if e == nil { + _, err = fmt.Fprintf(w, "%q", buf) + } else { + _, err = fmt.Fprintf(w, "/* %v */", e) + } + case WireFixed32: + x, err = b.DecodeFixed32() + err = writeUnknownInt(w, x, err) + case WireFixed64: + x, err = b.DecodeFixed64() + err = writeUnknownInt(w, x, err) + case WireStartGroup: + err = w.WriteByte('{') + w.indent() + case WireVarint: + x, err = b.DecodeVarint() + err = writeUnknownInt(w, x, err) + default: + _, err = fmt.Fprintf(w, "/* unknown wire type %d */", wire) + } + if err != nil { + return err + } + if err = w.WriteByte('\n'); err != nil { + return err + } + } + return nil +} + +func writeUnknownInt(w *textWriter, x uint64, err error) error { + if err == nil { + _, err = fmt.Fprint(w, x) + } else { + _, err = fmt.Fprintf(w, "/* %v */", err) + } + return err +} + +type int32Slice []int32 + +func (s int32Slice) Len() int { return len(s) } +func (s int32Slice) Less(i, j int) bool { return s[i] < s[j] } +func (s int32Slice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +// writeExtensions writes all the extensions in pv. +// pv is assumed to be a pointer to a protocol message struct that is extendable. +func (tm *TextMarshaler) writeExtensions(w *textWriter, pv reflect.Value) error { + emap := extensionMaps[pv.Type().Elem()] + ep, _ := extendable(pv.Interface()) + + // Order the extensions by ID. + // This isn't strictly necessary, but it will give us + // canonical output, which will also make testing easier. + m, mu := ep.extensionsRead() + if m == nil { + return nil + } + mu.Lock() + ids := make([]int32, 0, len(m)) + for id := range m { + ids = append(ids, id) + } + sort.Sort(int32Slice(ids)) + mu.Unlock() + + for _, extNum := range ids { + ext := m[extNum] + var desc *ExtensionDesc + if emap != nil { + desc = emap[extNum] + } + if desc == nil { + // Unknown extension. + if err := writeUnknownStruct(w, ext.enc); err != nil { + return err + } + continue + } + + pb, err := GetExtension(ep, desc) + if err != nil { + return fmt.Errorf("failed getting extension: %v", err) + } + + // Repeated extensions will appear as a slice. + if !desc.repeated() { + if err := tm.writeExtension(w, desc.Name, pb); err != nil { + return err + } + } else { + v := reflect.ValueOf(pb) + for i := 0; i < v.Len(); i++ { + if err := tm.writeExtension(w, desc.Name, v.Index(i).Interface()); err != nil { + return err + } + } + } + } + return nil +} + +func (tm *TextMarshaler) writeExtension(w *textWriter, name string, pb interface{}) error { + if _, err := fmt.Fprintf(w, "[%s]:", name); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte(' '); err != nil { + return err + } + } + if err := tm.writeAny(w, reflect.ValueOf(pb), nil); err != nil { + return err + } + if err := w.WriteByte('\n'); err != nil { + return err + } + return nil +} + +func (w *textWriter) writeIndent() { + if !w.complete { + return + } + remain := w.ind * 2 + for remain > 0 { + n := remain + if n > len(spaces) { + n = len(spaces) + } + w.w.Write(spaces[:n]) + remain -= n + } + w.complete = false +} + +// TextMarshaler is a configurable text format marshaler. +type TextMarshaler struct { + Compact bool // use compact text format (one line). + ExpandAny bool // expand google.protobuf.Any messages of known types +} + +// Marshal writes a given protocol buffer in text format. +// The only errors returned are from w. +func (tm *TextMarshaler) Marshal(w io.Writer, pb Message) error { + val := reflect.ValueOf(pb) + if pb == nil || val.IsNil() { + w.Write([]byte("")) + return nil + } + var bw *bufio.Writer + ww, ok := w.(writer) + if !ok { + bw = bufio.NewWriter(w) + ww = bw + } + aw := &textWriter{ + w: ww, + complete: true, + compact: tm.Compact, + } + + if etm, ok := pb.(encoding.TextMarshaler); ok { + text, err := etm.MarshalText() + if err != nil { + return err + } + if _, err = aw.Write(text); err != nil { + return err + } + if bw != nil { + return bw.Flush() + } + return nil + } + // Dereference the received pointer so we don't have outer < and >. + v := reflect.Indirect(val) + if err := tm.writeStruct(aw, v); err != nil { + return err + } + if bw != nil { + return bw.Flush() + } + return nil +} + +// Text is the same as Marshal, but returns the string directly. +func (tm *TextMarshaler) Text(pb Message) string { + var buf bytes.Buffer + tm.Marshal(&buf, pb) + return buf.String() +} + +var ( + defaultTextMarshaler = TextMarshaler{} + compactTextMarshaler = TextMarshaler{Compact: true} +) + +// TODO: consider removing some of the Marshal functions below. + +// MarshalText writes a given protocol buffer in text format. +// The only errors returned are from w. +func MarshalText(w io.Writer, pb Message) error { return defaultTextMarshaler.Marshal(w, pb) } + +// MarshalTextString is the same as MarshalText, but returns the string directly. +func MarshalTextString(pb Message) string { return defaultTextMarshaler.Text(pb) } + +// CompactText writes a given protocol buffer in compact text format (one line). +func CompactText(w io.Writer, pb Message) error { return compactTextMarshaler.Marshal(w, pb) } + +// CompactTextString is the same as CompactText, but returns the string directly. +func CompactTextString(pb Message) string { return compactTextMarshaler.Text(pb) } diff --git a/vendor/github.com/golang/protobuf/proto/text_parser.go b/vendor/github.com/golang/protobuf/proto/text_parser.go new file mode 100644 index 00000000..0685bae3 --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/text_parser.go @@ -0,0 +1,880 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +// Functions for parsing the Text protocol buffer format. +// TODO: message sets. + +import ( + "encoding" + "errors" + "fmt" + "reflect" + "strconv" + "strings" + "unicode/utf8" +) + +// Error string emitted when deserializing Any and fields are already set +const anyRepeatedlyUnpacked = "Any message unpacked multiple times, or %q already set" + +type ParseError struct { + Message string + Line int // 1-based line number + Offset int // 0-based byte offset from start of input +} + +func (p *ParseError) Error() string { + if p.Line == 1 { + // show offset only for first line + return fmt.Sprintf("line 1.%d: %v", p.Offset, p.Message) + } + return fmt.Sprintf("line %d: %v", p.Line, p.Message) +} + +type token struct { + value string + err *ParseError + line int // line number + offset int // byte number from start of input, not start of line + unquoted string // the unquoted version of value, if it was a quoted string +} + +func (t *token) String() string { + if t.err == nil { + return fmt.Sprintf("%q (line=%d, offset=%d)", t.value, t.line, t.offset) + } + return fmt.Sprintf("parse error: %v", t.err) +} + +type textParser struct { + s string // remaining input + done bool // whether the parsing is finished (success or error) + backed bool // whether back() was called + offset, line int + cur token +} + +func newTextParser(s string) *textParser { + p := new(textParser) + p.s = s + p.line = 1 + p.cur.line = 1 + return p +} + +func (p *textParser) errorf(format string, a ...interface{}) *ParseError { + pe := &ParseError{fmt.Sprintf(format, a...), p.cur.line, p.cur.offset} + p.cur.err = pe + p.done = true + return pe +} + +// Numbers and identifiers are matched by [-+._A-Za-z0-9] +func isIdentOrNumberChar(c byte) bool { + switch { + case 'A' <= c && c <= 'Z', 'a' <= c && c <= 'z': + return true + case '0' <= c && c <= '9': + return true + } + switch c { + case '-', '+', '.', '_': + return true + } + return false +} + +func isWhitespace(c byte) bool { + switch c { + case ' ', '\t', '\n', '\r': + return true + } + return false +} + +func isQuote(c byte) bool { + switch c { + case '"', '\'': + return true + } + return false +} + +func (p *textParser) skipWhitespace() { + i := 0 + for i < len(p.s) && (isWhitespace(p.s[i]) || p.s[i] == '#') { + if p.s[i] == '#' { + // comment; skip to end of line or input + for i < len(p.s) && p.s[i] != '\n' { + i++ + } + if i == len(p.s) { + break + } + } + if p.s[i] == '\n' { + p.line++ + } + i++ + } + p.offset += i + p.s = p.s[i:len(p.s)] + if len(p.s) == 0 { + p.done = true + } +} + +func (p *textParser) advance() { + // Skip whitespace + p.skipWhitespace() + if p.done { + return + } + + // Start of non-whitespace + p.cur.err = nil + p.cur.offset, p.cur.line = p.offset, p.line + p.cur.unquoted = "" + switch p.s[0] { + case '<', '>', '{', '}', ':', '[', ']', ';', ',', '/': + // Single symbol + p.cur.value, p.s = p.s[0:1], p.s[1:len(p.s)] + case '"', '\'': + // Quoted string + i := 1 + for i < len(p.s) && p.s[i] != p.s[0] && p.s[i] != '\n' { + if p.s[i] == '\\' && i+1 < len(p.s) { + // skip escaped char + i++ + } + i++ + } + if i >= len(p.s) || p.s[i] != p.s[0] { + p.errorf("unmatched quote") + return + } + unq, err := unquoteC(p.s[1:i], rune(p.s[0])) + if err != nil { + p.errorf("invalid quoted string %s: %v", p.s[0:i+1], err) + return + } + p.cur.value, p.s = p.s[0:i+1], p.s[i+1:len(p.s)] + p.cur.unquoted = unq + default: + i := 0 + for i < len(p.s) && isIdentOrNumberChar(p.s[i]) { + i++ + } + if i == 0 { + p.errorf("unexpected byte %#x", p.s[0]) + return + } + p.cur.value, p.s = p.s[0:i], p.s[i:len(p.s)] + } + p.offset += len(p.cur.value) +} + +var ( + errBadUTF8 = errors.New("proto: bad UTF-8") +) + +func unquoteC(s string, quote rune) (string, error) { + // This is based on C++'s tokenizer.cc. + // Despite its name, this is *not* parsing C syntax. + // For instance, "\0" is an invalid quoted string. + + // Avoid allocation in trivial cases. + simple := true + for _, r := range s { + if r == '\\' || r == quote { + simple = false + break + } + } + if simple { + return s, nil + } + + buf := make([]byte, 0, 3*len(s)/2) + for len(s) > 0 { + r, n := utf8.DecodeRuneInString(s) + if r == utf8.RuneError && n == 1 { + return "", errBadUTF8 + } + s = s[n:] + if r != '\\' { + if r < utf8.RuneSelf { + buf = append(buf, byte(r)) + } else { + buf = append(buf, string(r)...) + } + continue + } + + ch, tail, err := unescape(s) + if err != nil { + return "", err + } + buf = append(buf, ch...) + s = tail + } + return string(buf), nil +} + +func unescape(s string) (ch string, tail string, err error) { + r, n := utf8.DecodeRuneInString(s) + if r == utf8.RuneError && n == 1 { + return "", "", errBadUTF8 + } + s = s[n:] + switch r { + case 'a': + return "\a", s, nil + case 'b': + return "\b", s, nil + case 'f': + return "\f", s, nil + case 'n': + return "\n", s, nil + case 'r': + return "\r", s, nil + case 't': + return "\t", s, nil + case 'v': + return "\v", s, nil + case '?': + return "?", s, nil // trigraph workaround + case '\'', '"', '\\': + return string(r), s, nil + case '0', '1', '2', '3', '4', '5', '6', '7': + if len(s) < 2 { + return "", "", fmt.Errorf(`\%c requires 2 following digits`, r) + } + ss := string(r) + s[:2] + s = s[2:] + i, err := strconv.ParseUint(ss, 8, 8) + if err != nil { + return "", "", fmt.Errorf(`\%s contains non-octal digits`, ss) + } + return string([]byte{byte(i)}), s, nil + case 'x', 'X', 'u', 'U': + var n int + switch r { + case 'x', 'X': + n = 2 + case 'u': + n = 4 + case 'U': + n = 8 + } + if len(s) < n { + return "", "", fmt.Errorf(`\%c requires %d following digits`, r, n) + } + ss := s[:n] + s = s[n:] + i, err := strconv.ParseUint(ss, 16, 64) + if err != nil { + return "", "", fmt.Errorf(`\%c%s contains non-hexadecimal digits`, r, ss) + } + if r == 'x' || r == 'X' { + return string([]byte{byte(i)}), s, nil + } + if i > utf8.MaxRune { + return "", "", fmt.Errorf(`\%c%s is not a valid Unicode code point`, r, ss) + } + return string(i), s, nil + } + return "", "", fmt.Errorf(`unknown escape \%c`, r) +} + +// Back off the parser by one token. Can only be done between calls to next(). +// It makes the next advance() a no-op. +func (p *textParser) back() { p.backed = true } + +// Advances the parser and returns the new current token. +func (p *textParser) next() *token { + if p.backed || p.done { + p.backed = false + return &p.cur + } + p.advance() + if p.done { + p.cur.value = "" + } else if len(p.cur.value) > 0 && isQuote(p.cur.value[0]) { + // Look for multiple quoted strings separated by whitespace, + // and concatenate them. + cat := p.cur + for { + p.skipWhitespace() + if p.done || !isQuote(p.s[0]) { + break + } + p.advance() + if p.cur.err != nil { + return &p.cur + } + cat.value += " " + p.cur.value + cat.unquoted += p.cur.unquoted + } + p.done = false // parser may have seen EOF, but we want to return cat + p.cur = cat + } + return &p.cur +} + +func (p *textParser) consumeToken(s string) error { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value != s { + p.back() + return p.errorf("expected %q, found %q", s, tok.value) + } + return nil +} + +// Return a RequiredNotSetError indicating which required field was not set. +func (p *textParser) missingRequiredFieldError(sv reflect.Value) *RequiredNotSetError { + st := sv.Type() + sprops := GetProperties(st) + for i := 0; i < st.NumField(); i++ { + if !isNil(sv.Field(i)) { + continue + } + + props := sprops.Prop[i] + if props.Required { + return &RequiredNotSetError{fmt.Sprintf("%v.%v", st, props.OrigName)} + } + } + return &RequiredNotSetError{fmt.Sprintf("%v.", st)} // should not happen +} + +// Returns the index in the struct for the named field, as well as the parsed tag properties. +func structFieldByName(sprops *StructProperties, name string) (int, *Properties, bool) { + i, ok := sprops.decoderOrigNames[name] + if ok { + return i, sprops.Prop[i], true + } + return -1, nil, false +} + +// Consume a ':' from the input stream (if the next token is a colon), +// returning an error if a colon is needed but not present. +func (p *textParser) checkForColon(props *Properties, typ reflect.Type) *ParseError { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value != ":" { + // Colon is optional when the field is a group or message. + needColon := true + switch props.Wire { + case "group": + needColon = false + case "bytes": + // A "bytes" field is either a message, a string, or a repeated field; + // those three become *T, *string and []T respectively, so we can check for + // this field being a pointer to a non-string. + if typ.Kind() == reflect.Ptr { + // *T or *string + if typ.Elem().Kind() == reflect.String { + break + } + } else if typ.Kind() == reflect.Slice { + // []T or []*T + if typ.Elem().Kind() != reflect.Ptr { + break + } + } else if typ.Kind() == reflect.String { + // The proto3 exception is for a string field, + // which requires a colon. + break + } + needColon = false + } + if needColon { + return p.errorf("expected ':', found %q", tok.value) + } + p.back() + } + return nil +} + +func (p *textParser) readStruct(sv reflect.Value, terminator string) error { + st := sv.Type() + sprops := GetProperties(st) + reqCount := sprops.reqCount + var reqFieldErr error + fieldSet := make(map[string]bool) + // A struct is a sequence of "name: value", terminated by one of + // '>' or '}', or the end of the input. A name may also be + // "[extension]" or "[type/url]". + // + // The whole struct can also be an expanded Any message, like: + // [type/url] < ... struct contents ... > + for { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value == terminator { + break + } + if tok.value == "[" { + // Looks like an extension or an Any. + // + // TODO: Check whether we need to handle + // namespace rooted names (e.g. ".something.Foo"). + extName, err := p.consumeExtName() + if err != nil { + return err + } + + if s := strings.LastIndex(extName, "/"); s >= 0 { + // If it contains a slash, it's an Any type URL. + messageName := extName[s+1:] + mt := MessageType(messageName) + if mt == nil { + return p.errorf("unrecognized message %q in google.protobuf.Any", messageName) + } + tok = p.next() + if tok.err != nil { + return tok.err + } + // consume an optional colon + if tok.value == ":" { + tok = p.next() + if tok.err != nil { + return tok.err + } + } + var terminator string + switch tok.value { + case "<": + terminator = ">" + case "{": + terminator = "}" + default: + return p.errorf("expected '{' or '<', found %q", tok.value) + } + v := reflect.New(mt.Elem()) + if pe := p.readStruct(v.Elem(), terminator); pe != nil { + return pe + } + b, err := Marshal(v.Interface().(Message)) + if err != nil { + return p.errorf("failed to marshal message of type %q: %v", messageName, err) + } + if fieldSet["type_url"] { + return p.errorf(anyRepeatedlyUnpacked, "type_url") + } + if fieldSet["value"] { + return p.errorf(anyRepeatedlyUnpacked, "value") + } + sv.FieldByName("TypeUrl").SetString(extName) + sv.FieldByName("Value").SetBytes(b) + fieldSet["type_url"] = true + fieldSet["value"] = true + continue + } + + var desc *ExtensionDesc + // This could be faster, but it's functional. + // TODO: Do something smarter than a linear scan. + for _, d := range RegisteredExtensions(reflect.New(st).Interface().(Message)) { + if d.Name == extName { + desc = d + break + } + } + if desc == nil { + return p.errorf("unrecognized extension %q", extName) + } + + props := &Properties{} + props.Parse(desc.Tag) + + typ := reflect.TypeOf(desc.ExtensionType) + if err := p.checkForColon(props, typ); err != nil { + return err + } + + rep := desc.repeated() + + // Read the extension structure, and set it in + // the value we're constructing. + var ext reflect.Value + if !rep { + ext = reflect.New(typ).Elem() + } else { + ext = reflect.New(typ.Elem()).Elem() + } + if err := p.readAny(ext, props); err != nil { + if _, ok := err.(*RequiredNotSetError); !ok { + return err + } + reqFieldErr = err + } + ep := sv.Addr().Interface().(Message) + if !rep { + SetExtension(ep, desc, ext.Interface()) + } else { + old, err := GetExtension(ep, desc) + var sl reflect.Value + if err == nil { + sl = reflect.ValueOf(old) // existing slice + } else { + sl = reflect.MakeSlice(typ, 0, 1) + } + sl = reflect.Append(sl, ext) + SetExtension(ep, desc, sl.Interface()) + } + if err := p.consumeOptionalSeparator(); err != nil { + return err + } + continue + } + + // This is a normal, non-extension field. + name := tok.value + var dst reflect.Value + fi, props, ok := structFieldByName(sprops, name) + if ok { + dst = sv.Field(fi) + } else if oop, ok := sprops.OneofTypes[name]; ok { + // It is a oneof. + props = oop.Prop + nv := reflect.New(oop.Type.Elem()) + dst = nv.Elem().Field(0) + field := sv.Field(oop.Field) + if !field.IsNil() { + return p.errorf("field '%s' would overwrite already parsed oneof '%s'", name, sv.Type().Field(oop.Field).Name) + } + field.Set(nv) + } + if !dst.IsValid() { + return p.errorf("unknown field name %q in %v", name, st) + } + + if dst.Kind() == reflect.Map { + // Consume any colon. + if err := p.checkForColon(props, dst.Type()); err != nil { + return err + } + + // Construct the map if it doesn't already exist. + if dst.IsNil() { + dst.Set(reflect.MakeMap(dst.Type())) + } + key := reflect.New(dst.Type().Key()).Elem() + val := reflect.New(dst.Type().Elem()).Elem() + + // The map entry should be this sequence of tokens: + // < key : KEY value : VALUE > + // However, implementations may omit key or value, and technically + // we should support them in any order. See b/28924776 for a time + // this went wrong. + + tok := p.next() + var terminator string + switch tok.value { + case "<": + terminator = ">" + case "{": + terminator = "}" + default: + return p.errorf("expected '{' or '<', found %q", tok.value) + } + for { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value == terminator { + break + } + switch tok.value { + case "key": + if err := p.consumeToken(":"); err != nil { + return err + } + if err := p.readAny(key, props.mkeyprop); err != nil { + return err + } + if err := p.consumeOptionalSeparator(); err != nil { + return err + } + case "value": + if err := p.checkForColon(props.mvalprop, dst.Type().Elem()); err != nil { + return err + } + if err := p.readAny(val, props.mvalprop); err != nil { + return err + } + if err := p.consumeOptionalSeparator(); err != nil { + return err + } + default: + p.back() + return p.errorf(`expected "key", "value", or %q, found %q`, terminator, tok.value) + } + } + + dst.SetMapIndex(key, val) + continue + } + + // Check that it's not already set if it's not a repeated field. + if !props.Repeated && fieldSet[name] { + return p.errorf("non-repeated field %q was repeated", name) + } + + if err := p.checkForColon(props, dst.Type()); err != nil { + return err + } + + // Parse into the field. + fieldSet[name] = true + if err := p.readAny(dst, props); err != nil { + if _, ok := err.(*RequiredNotSetError); !ok { + return err + } + reqFieldErr = err + } + if props.Required { + reqCount-- + } + + if err := p.consumeOptionalSeparator(); err != nil { + return err + } + + } + + if reqCount > 0 { + return p.missingRequiredFieldError(sv) + } + return reqFieldErr +} + +// consumeExtName consumes extension name or expanded Any type URL and the +// following ']'. It returns the name or URL consumed. +func (p *textParser) consumeExtName() (string, error) { + tok := p.next() + if tok.err != nil { + return "", tok.err + } + + // If extension name or type url is quoted, it's a single token. + if len(tok.value) > 2 && isQuote(tok.value[0]) && tok.value[len(tok.value)-1] == tok.value[0] { + name, err := unquoteC(tok.value[1:len(tok.value)-1], rune(tok.value[0])) + if err != nil { + return "", err + } + return name, p.consumeToken("]") + } + + // Consume everything up to "]" + var parts []string + for tok.value != "]" { + parts = append(parts, tok.value) + tok = p.next() + if tok.err != nil { + return "", p.errorf("unrecognized type_url or extension name: %s", tok.err) + } + if p.done && tok.value != "]" { + return "", p.errorf("unclosed type_url or extension name") + } + } + return strings.Join(parts, ""), nil +} + +// consumeOptionalSeparator consumes an optional semicolon or comma. +// It is used in readStruct to provide backward compatibility. +func (p *textParser) consumeOptionalSeparator() error { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value != ";" && tok.value != "," { + p.back() + } + return nil +} + +func (p *textParser) readAny(v reflect.Value, props *Properties) error { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value == "" { + return p.errorf("unexpected EOF") + } + + switch fv := v; fv.Kind() { + case reflect.Slice: + at := v.Type() + if at.Elem().Kind() == reflect.Uint8 { + // Special case for []byte + if tok.value[0] != '"' && tok.value[0] != '\'' { + // Deliberately written out here, as the error after + // this switch statement would write "invalid []byte: ...", + // which is not as user-friendly. + return p.errorf("invalid string: %v", tok.value) + } + bytes := []byte(tok.unquoted) + fv.Set(reflect.ValueOf(bytes)) + return nil + } + // Repeated field. + if tok.value == "[" { + // Repeated field with list notation, like [1,2,3]. + for { + fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem())) + err := p.readAny(fv.Index(fv.Len()-1), props) + if err != nil { + return err + } + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value == "]" { + break + } + if tok.value != "," { + return p.errorf("Expected ']' or ',' found %q", tok.value) + } + } + return nil + } + // One value of the repeated field. + p.back() + fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem())) + return p.readAny(fv.Index(fv.Len()-1), props) + case reflect.Bool: + // true/1/t/True or false/f/0/False. + switch tok.value { + case "true", "1", "t", "True": + fv.SetBool(true) + return nil + case "false", "0", "f", "False": + fv.SetBool(false) + return nil + } + case reflect.Float32, reflect.Float64: + v := tok.value + // Ignore 'f' for compatibility with output generated by C++, but don't + // remove 'f' when the value is "-inf" or "inf". + if strings.HasSuffix(v, "f") && tok.value != "-inf" && tok.value != "inf" { + v = v[:len(v)-1] + } + if f, err := strconv.ParseFloat(v, fv.Type().Bits()); err == nil { + fv.SetFloat(f) + return nil + } + case reflect.Int32: + if x, err := strconv.ParseInt(tok.value, 0, 32); err == nil { + fv.SetInt(x) + return nil + } + + if len(props.Enum) == 0 { + break + } + m, ok := enumValueMaps[props.Enum] + if !ok { + break + } + x, ok := m[tok.value] + if !ok { + break + } + fv.SetInt(int64(x)) + return nil + case reflect.Int64: + if x, err := strconv.ParseInt(tok.value, 0, 64); err == nil { + fv.SetInt(x) + return nil + } + + case reflect.Ptr: + // A basic field (indirected through pointer), or a repeated message/group + p.back() + fv.Set(reflect.New(fv.Type().Elem())) + return p.readAny(fv.Elem(), props) + case reflect.String: + if tok.value[0] == '"' || tok.value[0] == '\'' { + fv.SetString(tok.unquoted) + return nil + } + case reflect.Struct: + var terminator string + switch tok.value { + case "{": + terminator = "}" + case "<": + terminator = ">" + default: + return p.errorf("expected '{' or '<', found %q", tok.value) + } + // TODO: Handle nested messages which implement encoding.TextUnmarshaler. + return p.readStruct(fv, terminator) + case reflect.Uint32: + if x, err := strconv.ParseUint(tok.value, 0, 32); err == nil { + fv.SetUint(uint64(x)) + return nil + } + case reflect.Uint64: + if x, err := strconv.ParseUint(tok.value, 0, 64); err == nil { + fv.SetUint(x) + return nil + } + } + return p.errorf("invalid %v: %v", v.Type(), tok.value) +} + +// UnmarshalText reads a protocol buffer in Text format. UnmarshalText resets pb +// before starting to unmarshal, so any existing data in pb is always removed. +// If a required field is not set and no other error occurs, +// UnmarshalText returns *RequiredNotSetError. +func UnmarshalText(s string, pb Message) error { + if um, ok := pb.(encoding.TextUnmarshaler); ok { + return um.UnmarshalText([]byte(s)) + } + pb.Reset() + v := reflect.ValueOf(pb) + return newTextParser(s).readStruct(v.Elem(), "") +} diff --git a/vendor/github.com/google/go-github/AUTHORS b/vendor/github.com/google/go-github/AUTHORS new file mode 100644 index 00000000..4c2ad9b4 --- /dev/null +++ b/vendor/github.com/google/go-github/AUTHORS @@ -0,0 +1,173 @@ +# This is the official list of go-github authors for copyright purposes. +# +# This does not necessarily list everyone who has contributed code, since in +# some cases, their employer may be the copyright holder. To see the full list +# of contributors, see the revision history in source control or +# https://github.com/google/go-github/graphs/contributors. +# +# Authors who wish to be recognized in this file should add themselves (or +# their employer, as appropriate). + +178inaba +Abhinav Gupta +Ahmed Hagy +Ainsley Chong +Akeda Bagus +Alec Thomas +Aleks Clark +Alex Bramley +Alexander Harkness +Allen Sun +Amey Sakhadeo +Andreas Garnæs +Andrew Ryabchun +Andy Hume +Andy Lindeman +Anshuman Bhartiya +Antoine Pelisse +Anubha Kushwaha +Aravind +Arıl Bozoluk +Austin Dizzy +Beshr Kayali +Beyang Liu +Billy Lynch +Björn Häuser +Brad Harris +Bradley Falzon +Brian Egizi +Bryan Boreham +Cami Diez +Carlos Alexandro Becker +chandresh-pancholi +Charles Fenwick Elliott +Charlie Yan +Chris King +Chris Roche +Chris Schaefer +Christoph Sassenberg +Colin Misare +Craig Peterson +Cristian Maglie +Daehyeok Mun +Daniel Leavitt +Dave Du Cros +Dave Henderson +David Deng +Dennis Webb +Diego Lapiduz +Dmitri Shuralyov +dmnlk +Don Petersen +Doug Turner +Drew Fradette +Eli Uriegas +Elliott Beach +erwinvaneyk +Fabrice +Filippo Valsorda +Florian Forster +Francesc Gil +Francis +Fredrik Jönsson +Garrett Squire +Georgy Buranov +Gnahz +Google Inc. +griffin_stewie +Guz Alexander +Hanno Hecker +Hari haran +haya14busa +Huy Tr +huydx +i2bskn +Isao Jonas +isqua +Jameel Haffejee +Jan Kosecki +Jeremy Morris +Jihoon Chung +Jimmi Dyson +Joe Tsai +John Barton +John Engelman +jpbelanger-mtl +Juan Basso +Julien Rostand +Justin Abrahms +jzhoucliqr +Katrina Owen +Keita Urashima +Kevin Burke +Konrad Malawski +Kookheon Kwon +Krzysztof Kowalczyk +Kshitij Saraogi +kyokomi +Lucas Alcantara +Luke Evers +Luke Kysow +Luke Roberts +Luke Young +Maksim Zhylinski +Martin-Louis Bright +Mat Geist +Matt Brender +Matt Landis +Maxime Bury +Michael Tiller +Michał Glapa +Nathan VanBenschoten +Neil O'Toole +Nick Miyake +Nick Spragg +Nikhita Raghunath +Noah Zoschke +ns-cweber +Ondřej Kupka +Panagiotis Moustafellos +Parker Moore +Pavel Shtanko +Petr Shevtsov +Pierre Carrier +Piotr Zurek +Quinn Slack +Rackspace US, Inc. +Rajendra arora +RaviTeja Pothana +rc1140 +Red Hat, Inc. +Rob Figueiredo +Ronak Jain +Ruben Vereecken +Ryan Lower +Sahil Dua +saisi +Sam Minnée +Sander van Harmelen +Sarasa Kisaragi +Sean Wang +Sebastian Mandrean +Sebastian Mæland Pedersen +Sevki +Shawn Catanzarite +Shawn Smith +sona-tar +SoundCloud, Ltd. +Stian Eikeland +Thomas Bruyelle +Timothée Peignier +Trey Tacon +ttacon +Varadarajan Aravamudhan +Victor Castell +Victor Vrantchan +Vlad Ungureanu +Will Maier +William Bailey +Yann Malet +Yannick Utard +Yicheng Qin +Yumikiyo Osanai +Zach Latta diff --git a/vendor/github.com/google/go-github/LICENSE b/vendor/github.com/google/go-github/LICENSE new file mode 100644 index 00000000..28b6486f --- /dev/null +++ b/vendor/github.com/google/go-github/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2013 The go-github AUTHORS. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/google/go-github/github/activity.go b/vendor/github.com/google/go-github/github/activity.go new file mode 100644 index 00000000..d6c992c7 --- /dev/null +++ b/vendor/github.com/google/go-github/github/activity.go @@ -0,0 +1,69 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import "context" + +// ActivityService handles communication with the activity related +// methods of the GitHub API. +// +// GitHub API docs: https://developer.github.com/v3/activity/ +type ActivityService service + +// FeedLink represents a link to a related resource. +type FeedLink struct { + HRef *string `json:"href,omitempty"` + Type *string `json:"type,omitempty"` +} + +// Feeds represents timeline resources in Atom format. +type Feeds struct { + TimelineURL *string `json:"timeline_url,omitempty"` + UserURL *string `json:"user_url,omitempty"` + CurrentUserPublicURL *string `json:"current_user_public_url,omitempty"` + CurrentUserURL *string `json:"current_user_url,omitempty"` + CurrentUserActorURL *string `json:"current_user_actor_url,omitempty"` + CurrentUserOrganizationURL *string `json:"current_user_organization_url,omitempty"` + CurrentUserOrganizationURLs []string `json:"current_user_organization_urls,omitempty"` + Links *struct { + Timeline *FeedLink `json:"timeline,omitempty"` + User *FeedLink `json:"user,omitempty"` + CurrentUserPublic *FeedLink `json:"current_user_public,omitempty"` + CurrentUser *FeedLink `json:"current_user,omitempty"` + CurrentUserActor *FeedLink `json:"current_user_actor,omitempty"` + CurrentUserOrganization *FeedLink `json:"current_user_organization,omitempty"` + CurrentUserOrganizations []FeedLink `json:"current_user_organizations,omitempty"` + } `json:"_links,omitempty"` +} + +// ListFeeds lists all the feeds available to the authenticated user. +// +// GitHub provides several timeline resources in Atom format: +// Timeline: The GitHub global public timeline +// User: The public timeline for any user, using URI template +// Current user public: The public timeline for the authenticated user +// Current user: The private timeline for the authenticated user +// Current user actor: The private timeline for activity created by the +// authenticated user +// Current user organizations: The private timeline for the organizations +// the authenticated user is a member of. +// +// Note: Private feeds are only returned when authenticating via Basic Auth +// since current feed URIs use the older, non revocable auth tokens. +func (s *ActivityService) ListFeeds(ctx context.Context) (*Feeds, *Response, error) { + req, err := s.client.NewRequest("GET", "feeds", nil) + if err != nil { + return nil, nil, err + } + + f := &Feeds{} + resp, err := s.client.Do(ctx, req, f) + if err != nil { + return nil, resp, err + } + + return f, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/activity_events.go b/vendor/github.com/google/go-github/github/activity_events.go new file mode 100644 index 00000000..f337fcd2 --- /dev/null +++ b/vendor/github.com/google/go-github/github/activity_events.go @@ -0,0 +1,324 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "encoding/json" + "fmt" + "time" +) + +// Event represents a GitHub event. +type Event struct { + Type *string `json:"type,omitempty"` + Public *bool `json:"public,omitempty"` + RawPayload *json.RawMessage `json:"payload,omitempty"` + Repo *Repository `json:"repo,omitempty"` + Actor *User `json:"actor,omitempty"` + Org *Organization `json:"org,omitempty"` + CreatedAt *time.Time `json:"created_at,omitempty"` + ID *string `json:"id,omitempty"` +} + +func (e Event) String() string { + return Stringify(e) +} + +// ParsePayload parses the event payload. For recognized event types, +// a value of the corresponding struct type will be returned. +func (e *Event) ParsePayload() (payload interface{}, err error) { + switch *e.Type { + case "CommitCommentEvent": + payload = &CommitCommentEvent{} + case "CreateEvent": + payload = &CreateEvent{} + case "DeleteEvent": + payload = &DeleteEvent{} + case "DeploymentEvent": + payload = &DeploymentEvent{} + case "DeploymentStatusEvent": + payload = &DeploymentStatusEvent{} + case "ForkEvent": + payload = &ForkEvent{} + case "GollumEvent": + payload = &GollumEvent{} + case "InstallationEvent": + payload = &InstallationEvent{} + case "InstallationRepositoriesEvent": + payload = &InstallationRepositoriesEvent{} + case "IssueCommentEvent": + payload = &IssueCommentEvent{} + case "IssuesEvent": + payload = &IssuesEvent{} + case "LabelEvent": + payload = &LabelEvent{} + case "MarketplacePurchaseEvent": + payload = &MarketplacePurchaseEvent{} + case "MemberEvent": + payload = &MemberEvent{} + case "MembershipEvent": + payload = &MembershipEvent{} + case "MilestoneEvent": + payload = &MilestoneEvent{} + case "OrganizationEvent": + payload = &OrganizationEvent{} + case "OrgBlockEvent": + payload = &OrgBlockEvent{} + case "PageBuildEvent": + payload = &PageBuildEvent{} + case "PingEvent": + payload = &PingEvent{} + case "ProjectEvent": + payload = &ProjectEvent{} + case "ProjectCardEvent": + payload = &ProjectCardEvent{} + case "ProjectColumnEvent": + payload = &ProjectColumnEvent{} + case "PublicEvent": + payload = &PublicEvent{} + case "PullRequestEvent": + payload = &PullRequestEvent{} + case "PullRequestReviewEvent": + payload = &PullRequestReviewEvent{} + case "PullRequestReviewCommentEvent": + payload = &PullRequestReviewCommentEvent{} + case "PushEvent": + payload = &PushEvent{} + case "ReleaseEvent": + payload = &ReleaseEvent{} + case "RepositoryEvent": + payload = &RepositoryEvent{} + case "StatusEvent": + payload = &StatusEvent{} + case "TeamEvent": + payload = &TeamEvent{} + case "TeamAddEvent": + payload = &TeamAddEvent{} + case "WatchEvent": + payload = &WatchEvent{} + } + err = json.Unmarshal(*e.RawPayload, &payload) + return payload, err +} + +// Payload returns the parsed event payload. For recognized event types, +// a value of the corresponding struct type will be returned. +// +// Deprecated: Use ParsePayload instead, which returns an error +// rather than panics if JSON unmarshaling raw payload fails. +func (e *Event) Payload() (payload interface{}) { + var err error + payload, err = e.ParsePayload() + if err != nil { + panic(err) + } + return payload +} + +// ListEvents drinks from the firehose of all public events across GitHub. +// +// GitHub API docs: https://developer.github.com/v3/activity/events/#list-public-events +func (s *ActivityService) ListEvents(ctx context.Context, opt *ListOptions) ([]*Event, *Response, error) { + u, err := addOptions("events", opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var events []*Event + resp, err := s.client.Do(ctx, req, &events) + if err != nil { + return nil, resp, err + } + + return events, resp, nil +} + +// ListRepositoryEvents lists events for a repository. +// +// GitHub API docs: https://developer.github.com/v3/activity/events/#list-repository-events +func (s *ActivityService) ListRepositoryEvents(ctx context.Context, owner, repo string, opt *ListOptions) ([]*Event, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/events", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var events []*Event + resp, err := s.client.Do(ctx, req, &events) + if err != nil { + return nil, resp, err + } + + return events, resp, nil +} + +// ListIssueEventsForRepository lists issue events for a repository. +// +// GitHub API docs: https://developer.github.com/v3/activity/events/#list-issue-events-for-a-repository +func (s *ActivityService) ListIssueEventsForRepository(ctx context.Context, owner, repo string, opt *ListOptions) ([]*IssueEvent, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/issues/events", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var events []*IssueEvent + resp, err := s.client.Do(ctx, req, &events) + if err != nil { + return nil, resp, err + } + + return events, resp, nil +} + +// ListEventsForRepoNetwork lists public events for a network of repositories. +// +// GitHub API docs: https://developer.github.com/v3/activity/events/#list-public-events-for-a-network-of-repositories +func (s *ActivityService) ListEventsForRepoNetwork(ctx context.Context, owner, repo string, opt *ListOptions) ([]*Event, *Response, error) { + u := fmt.Sprintf("networks/%v/%v/events", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var events []*Event + resp, err := s.client.Do(ctx, req, &events) + if err != nil { + return nil, resp, err + } + + return events, resp, nil +} + +// ListEventsForOrganization lists public events for an organization. +// +// GitHub API docs: https://developer.github.com/v3/activity/events/#list-public-events-for-an-organization +func (s *ActivityService) ListEventsForOrganization(ctx context.Context, org string, opt *ListOptions) ([]*Event, *Response, error) { + u := fmt.Sprintf("orgs/%v/events", org) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var events []*Event + resp, err := s.client.Do(ctx, req, &events) + if err != nil { + return nil, resp, err + } + + return events, resp, nil +} + +// ListEventsPerformedByUser lists the events performed by a user. If publicOnly is +// true, only public events will be returned. +// +// GitHub API docs: https://developer.github.com/v3/activity/events/#list-events-performed-by-a-user +func (s *ActivityService) ListEventsPerformedByUser(ctx context.Context, user string, publicOnly bool, opt *ListOptions) ([]*Event, *Response, error) { + var u string + if publicOnly { + u = fmt.Sprintf("users/%v/events/public", user) + } else { + u = fmt.Sprintf("users/%v/events", user) + } + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var events []*Event + resp, err := s.client.Do(ctx, req, &events) + if err != nil { + return nil, resp, err + } + + return events, resp, nil +} + +// ListEventsReceivedByUser lists the events received by a user. If publicOnly is +// true, only public events will be returned. +// +// GitHub API docs: https://developer.github.com/v3/activity/events/#list-events-that-a-user-has-received +func (s *ActivityService) ListEventsReceivedByUser(ctx context.Context, user string, publicOnly bool, opt *ListOptions) ([]*Event, *Response, error) { + var u string + if publicOnly { + u = fmt.Sprintf("users/%v/received_events/public", user) + } else { + u = fmt.Sprintf("users/%v/received_events", user) + } + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var events []*Event + resp, err := s.client.Do(ctx, req, &events) + if err != nil { + return nil, resp, err + } + + return events, resp, nil +} + +// ListUserEventsForOrganization provides the user’s organization dashboard. You +// must be authenticated as the user to view this. +// +// GitHub API docs: https://developer.github.com/v3/activity/events/#list-events-for-an-organization +func (s *ActivityService) ListUserEventsForOrganization(ctx context.Context, org, user string, opt *ListOptions) ([]*Event, *Response, error) { + u := fmt.Sprintf("users/%v/events/orgs/%v", user, org) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var events []*Event + resp, err := s.client.Do(ctx, req, &events) + if err != nil { + return nil, resp, err + } + + return events, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/activity_notifications.go b/vendor/github.com/google/go-github/github/activity_notifications.go new file mode 100644 index 00000000..45c8b2ae --- /dev/null +++ b/vendor/github.com/google/go-github/github/activity_notifications.go @@ -0,0 +1,223 @@ +// Copyright 2014 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" + "time" +) + +// Notification identifies a GitHub notification for a user. +type Notification struct { + ID *string `json:"id,omitempty"` + Repository *Repository `json:"repository,omitempty"` + Subject *NotificationSubject `json:"subject,omitempty"` + + // Reason identifies the event that triggered the notification. + // + // GitHub API docs: https://developer.github.com/v3/activity/notifications/#notification-reasons + Reason *string `json:"reason,omitempty"` + + Unread *bool `json:"unread,omitempty"` + UpdatedAt *time.Time `json:"updated_at,omitempty"` + LastReadAt *time.Time `json:"last_read_at,omitempty"` + URL *string `json:"url,omitempty"` +} + +// NotificationSubject identifies the subject of a notification. +type NotificationSubject struct { + Title *string `json:"title,omitempty"` + URL *string `json:"url,omitempty"` + LatestCommentURL *string `json:"latest_comment_url,omitempty"` + Type *string `json:"type,omitempty"` +} + +// NotificationListOptions specifies the optional parameters to the +// ActivityService.ListNotifications method. +type NotificationListOptions struct { + All bool `url:"all,omitempty"` + Participating bool `url:"participating,omitempty"` + Since time.Time `url:"since,omitempty"` + Before time.Time `url:"before,omitempty"` + + ListOptions +} + +// ListNotifications lists all notifications for the authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/activity/notifications/#list-your-notifications +func (s *ActivityService) ListNotifications(ctx context.Context, opt *NotificationListOptions) ([]*Notification, *Response, error) { + u := fmt.Sprintf("notifications") + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var notifications []*Notification + resp, err := s.client.Do(ctx, req, ¬ifications) + if err != nil { + return nil, resp, err + } + + return notifications, resp, nil +} + +// ListRepositoryNotifications lists all notifications in a given repository +// for the authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/activity/notifications/#list-your-notifications-in-a-repository +func (s *ActivityService) ListRepositoryNotifications(ctx context.Context, owner, repo string, opt *NotificationListOptions) ([]*Notification, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/notifications", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var notifications []*Notification + resp, err := s.client.Do(ctx, req, ¬ifications) + if err != nil { + return nil, resp, err + } + + return notifications, resp, nil +} + +type markReadOptions struct { + LastReadAt time.Time `json:"last_read_at,omitempty"` +} + +// MarkNotificationsRead marks all notifications up to lastRead as read. +// +// GitHub API docs: https://developer.github.com/v3/activity/notifications/#mark-as-read +func (s *ActivityService) MarkNotificationsRead(ctx context.Context, lastRead time.Time) (*Response, error) { + opts := &markReadOptions{ + LastReadAt: lastRead, + } + req, err := s.client.NewRequest("PUT", "notifications", opts) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +// MarkRepositoryNotificationsRead marks all notifications up to lastRead in +// the specified repository as read. +// +// GitHub API docs: https://developer.github.com/v3/activity/notifications/#mark-notifications-as-read-in-a-repository +func (s *ActivityService) MarkRepositoryNotificationsRead(ctx context.Context, owner, repo string, lastRead time.Time) (*Response, error) { + opts := &markReadOptions{ + LastReadAt: lastRead, + } + u := fmt.Sprintf("repos/%v/%v/notifications", owner, repo) + req, err := s.client.NewRequest("PUT", u, opts) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +// GetThread gets the specified notification thread. +// +// GitHub API docs: https://developer.github.com/v3/activity/notifications/#view-a-single-thread +func (s *ActivityService) GetThread(ctx context.Context, id string) (*Notification, *Response, error) { + u := fmt.Sprintf("notifications/threads/%v", id) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + notification := new(Notification) + resp, err := s.client.Do(ctx, req, notification) + if err != nil { + return nil, resp, err + } + + return notification, resp, nil +} + +// MarkThreadRead marks the specified thread as read. +// +// GitHub API docs: https://developer.github.com/v3/activity/notifications/#mark-a-thread-as-read +func (s *ActivityService) MarkThreadRead(ctx context.Context, id string) (*Response, error) { + u := fmt.Sprintf("notifications/threads/%v", id) + + req, err := s.client.NewRequest("PATCH", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +// GetThreadSubscription checks to see if the authenticated user is subscribed +// to a thread. +// +// GitHub API docs: https://developer.github.com/v3/activity/notifications/#get-a-thread-subscription +func (s *ActivityService) GetThreadSubscription(ctx context.Context, id string) (*Subscription, *Response, error) { + u := fmt.Sprintf("notifications/threads/%v/subscription", id) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + sub := new(Subscription) + resp, err := s.client.Do(ctx, req, sub) + if err != nil { + return nil, resp, err + } + + return sub, resp, nil +} + +// SetThreadSubscription sets the subscription for the specified thread for the +// authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/activity/notifications/#set-a-thread-subscription +func (s *ActivityService) SetThreadSubscription(ctx context.Context, id string, subscription *Subscription) (*Subscription, *Response, error) { + u := fmt.Sprintf("notifications/threads/%v/subscription", id) + + req, err := s.client.NewRequest("PUT", u, subscription) + if err != nil { + return nil, nil, err + } + + sub := new(Subscription) + resp, err := s.client.Do(ctx, req, sub) + if err != nil { + return nil, resp, err + } + + return sub, resp, nil +} + +// DeleteThreadSubscription deletes the subscription for the specified thread +// for the authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/activity/notifications/#delete-a-thread-subscription +func (s *ActivityService) DeleteThreadSubscription(ctx context.Context, id string) (*Response, error) { + u := fmt.Sprintf("notifications/threads/%v/subscription", id) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/activity_star.go b/vendor/github.com/google/go-github/github/activity_star.go new file mode 100644 index 00000000..d5b06712 --- /dev/null +++ b/vendor/github.com/google/go-github/github/activity_star.go @@ -0,0 +1,135 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// StarredRepository is returned by ListStarred. +type StarredRepository struct { + StarredAt *Timestamp `json:"starred_at,omitempty"` + Repository *Repository `json:"repo,omitempty"` +} + +// Stargazer represents a user that has starred a repository. +type Stargazer struct { + StarredAt *Timestamp `json:"starred_at,omitempty"` + User *User `json:"user,omitempty"` +} + +// ListStargazers lists people who have starred the specified repo. +// +// GitHub API docs: https://developer.github.com/v3/activity/starring/#list-stargazers +func (s *ActivityService) ListStargazers(ctx context.Context, owner, repo string, opt *ListOptions) ([]*Stargazer, *Response, error) { + u := fmt.Sprintf("repos/%s/%s/stargazers", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypeStarringPreview) + + var stargazers []*Stargazer + resp, err := s.client.Do(ctx, req, &stargazers) + if err != nil { + return nil, resp, err + } + + return stargazers, resp, nil +} + +// ActivityListStarredOptions specifies the optional parameters to the +// ActivityService.ListStarred method. +type ActivityListStarredOptions struct { + // How to sort the repository list. Possible values are: created, updated, + // pushed, full_name. Default is "full_name". + Sort string `url:"sort,omitempty"` + + // Direction in which to sort repositories. Possible values are: asc, desc. + // Default is "asc" when sort is "full_name", otherwise default is "desc". + Direction string `url:"direction,omitempty"` + + ListOptions +} + +// ListStarred lists all the repos starred by a user. Passing the empty string +// will list the starred repositories for the authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/activity/starring/#list-repositories-being-starred +func (s *ActivityService) ListStarred(ctx context.Context, user string, opt *ActivityListStarredOptions) ([]*StarredRepository, *Response, error) { + var u string + if user != "" { + u = fmt.Sprintf("users/%v/starred", user) + } else { + u = "user/starred" + } + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypeStarringPreview) + + var repos []*StarredRepository + resp, err := s.client.Do(ctx, req, &repos) + if err != nil { + return nil, resp, err + } + + return repos, resp, nil +} + +// IsStarred checks if a repository is starred by authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/activity/starring/#check-if-you-are-starring-a-repository +func (s *ActivityService) IsStarred(ctx context.Context, owner, repo string) (bool, *Response, error) { + u := fmt.Sprintf("user/starred/%v/%v", owner, repo) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return false, nil, err + } + resp, err := s.client.Do(ctx, req, nil) + starred, err := parseBoolResponse(err) + return starred, resp, err +} + +// Star a repository as the authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/activity/starring/#star-a-repository +func (s *ActivityService) Star(ctx context.Context, owner, repo string) (*Response, error) { + u := fmt.Sprintf("user/starred/%v/%v", owner, repo) + req, err := s.client.NewRequest("PUT", u, nil) + if err != nil { + return nil, err + } + return s.client.Do(ctx, req, nil) +} + +// Unstar a repository as the authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/activity/starring/#unstar-a-repository +func (s *ActivityService) Unstar(ctx context.Context, owner, repo string) (*Response, error) { + u := fmt.Sprintf("user/starred/%v/%v", owner, repo) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/activity_watching.go b/vendor/github.com/google/go-github/github/activity_watching.go new file mode 100644 index 00000000..c749ca86 --- /dev/null +++ b/vendor/github.com/google/go-github/github/activity_watching.go @@ -0,0 +1,146 @@ +// Copyright 2014 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// Subscription identifies a repository or thread subscription. +type Subscription struct { + Subscribed *bool `json:"subscribed,omitempty"` + Ignored *bool `json:"ignored,omitempty"` + Reason *string `json:"reason,omitempty"` + CreatedAt *Timestamp `json:"created_at,omitempty"` + URL *string `json:"url,omitempty"` + + // only populated for repository subscriptions + RepositoryURL *string `json:"repository_url,omitempty"` + + // only populated for thread subscriptions + ThreadURL *string `json:"thread_url,omitempty"` +} + +// ListWatchers lists watchers of a particular repo. +// +// GitHub API docs: https://developer.github.com/v3/activity/watching/#list-watchers +func (s *ActivityService) ListWatchers(ctx context.Context, owner, repo string, opt *ListOptions) ([]*User, *Response, error) { + u := fmt.Sprintf("repos/%s/%s/subscribers", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var watchers []*User + resp, err := s.client.Do(ctx, req, &watchers) + if err != nil { + return nil, resp, err + } + + return watchers, resp, nil +} + +// ListWatched lists the repositories the specified user is watching. Passing +// the empty string will fetch watched repos for the authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/activity/watching/#list-repositories-being-watched +func (s *ActivityService) ListWatched(ctx context.Context, user string, opt *ListOptions) ([]*Repository, *Response, error) { + var u string + if user != "" { + u = fmt.Sprintf("users/%v/subscriptions", user) + } else { + u = "user/subscriptions" + } + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var watched []*Repository + resp, err := s.client.Do(ctx, req, &watched) + if err != nil { + return nil, resp, err + } + + return watched, resp, nil +} + +// GetRepositorySubscription returns the subscription for the specified +// repository for the authenticated user. If the authenticated user is not +// watching the repository, a nil Subscription is returned. +// +// GitHub API docs: https://developer.github.com/v3/activity/watching/#get-a-repository-subscription +func (s *ActivityService) GetRepositorySubscription(ctx context.Context, owner, repo string) (*Subscription, *Response, error) { + u := fmt.Sprintf("repos/%s/%s/subscription", owner, repo) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + sub := new(Subscription) + resp, err := s.client.Do(ctx, req, sub) + if err != nil { + // if it's just a 404, don't return that as an error + _, err = parseBoolResponse(err) + return nil, resp, err + } + + return sub, resp, nil +} + +// SetRepositorySubscription sets the subscription for the specified repository +// for the authenticated user. +// +// To watch a repository, set subscription.Subscribed to true. +// To ignore notifications made within a repository, set subscription.Ignored to true. +// To stop watching a repository, use DeleteRepositorySubscription. +// +// GitHub API docs: https://developer.github.com/v3/activity/watching/#set-a-repository-subscription +func (s *ActivityService) SetRepositorySubscription(ctx context.Context, owner, repo string, subscription *Subscription) (*Subscription, *Response, error) { + u := fmt.Sprintf("repos/%s/%s/subscription", owner, repo) + + req, err := s.client.NewRequest("PUT", u, subscription) + if err != nil { + return nil, nil, err + } + + sub := new(Subscription) + resp, err := s.client.Do(ctx, req, sub) + if err != nil { + return nil, resp, err + } + + return sub, resp, nil +} + +// DeleteRepositorySubscription deletes the subscription for the specified +// repository for the authenticated user. +// +// This is used to stop watching a repository. To control whether or not to +// receive notifications from a repository, use SetRepositorySubscription. +// +// GitHub API docs: https://developer.github.com/v3/activity/watching/#delete-a-repository-subscription +func (s *ActivityService) DeleteRepositorySubscription(ctx context.Context, owner, repo string) (*Response, error) { + u := fmt.Sprintf("repos/%s/%s/subscription", owner, repo) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/admin.go b/vendor/github.com/google/go-github/github/admin.go new file mode 100644 index 00000000..2d96733a --- /dev/null +++ b/vendor/github.com/google/go-github/github/admin.go @@ -0,0 +1,101 @@ +// Copyright 2016 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// AdminService handles communication with the admin related methods of the +// GitHub API. These API routes are normally only accessible for GitHub +// Enterprise installations. +// +// GitHub API docs: https://developer.github.com/v3/enterprise/ +type AdminService service + +// TeamLDAPMapping represents the mapping between a GitHub team and an LDAP group. +type TeamLDAPMapping struct { + ID *int64 `json:"id,omitempty"` + LDAPDN *string `json:"ldap_dn,omitempty"` + URL *string `json:"url,omitempty"` + Name *string `json:"name,omitempty"` + Slug *string `json:"slug,omitempty"` + Description *string `json:"description,omitempty"` + Privacy *string `json:"privacy,omitempty"` + Permission *string `json:"permission,omitempty"` + + MembersURL *string `json:"members_url,omitempty"` + RepositoriesURL *string `json:"repositories_url,omitempty"` +} + +func (m TeamLDAPMapping) String() string { + return Stringify(m) +} + +// UserLDAPMapping represents the mapping between a GitHub user and an LDAP user. +type UserLDAPMapping struct { + ID *int64 `json:"id,omitempty"` + LDAPDN *string `json:"ldap_dn,omitempty"` + Login *string `json:"login,omitempty"` + AvatarURL *string `json:"avatar_url,omitempty"` + GravatarID *string `json:"gravatar_id,omitempty"` + Type *string `json:"type,omitempty"` + SiteAdmin *bool `json:"site_admin,omitempty"` + + URL *string `json:"url,omitempty"` + EventsURL *string `json:"events_url,omitempty"` + FollowingURL *string `json:"following_url,omitempty"` + FollowersURL *string `json:"followers_url,omitempty"` + GistsURL *string `json:"gists_url,omitempty"` + OrganizationsURL *string `json:"organizations_url,omitempty"` + ReceivedEventsURL *string `json:"received_events_url,omitempty"` + ReposURL *string `json:"repos_url,omitempty"` + StarredURL *string `json:"starred_url,omitempty"` + SubscriptionsURL *string `json:"subscriptions_url,omitempty"` +} + +func (m UserLDAPMapping) String() string { + return Stringify(m) +} + +// UpdateUserLDAPMapping updates the mapping between a GitHub user and an LDAP user. +// +// GitHub API docs: https://developer.github.com/v3/enterprise/ldap/#update-ldap-mapping-for-a-user +func (s *AdminService) UpdateUserLDAPMapping(ctx context.Context, user string, mapping *UserLDAPMapping) (*UserLDAPMapping, *Response, error) { + u := fmt.Sprintf("admin/ldap/users/%v/mapping", user) + req, err := s.client.NewRequest("PATCH", u, mapping) + if err != nil { + return nil, nil, err + } + + m := new(UserLDAPMapping) + resp, err := s.client.Do(ctx, req, m) + if err != nil { + return nil, resp, err + } + + return m, resp, nil +} + +// UpdateTeamLDAPMapping updates the mapping between a GitHub team and an LDAP group. +// +// GitHub API docs: https://developer.github.com/v3/enterprise/ldap/#update-ldap-mapping-for-a-team +func (s *AdminService) UpdateTeamLDAPMapping(ctx context.Context, team int64, mapping *TeamLDAPMapping) (*TeamLDAPMapping, *Response, error) { + u := fmt.Sprintf("admin/ldap/teams/%v/mapping", team) + req, err := s.client.NewRequest("PATCH", u, mapping) + if err != nil { + return nil, nil, err + } + + m := new(TeamLDAPMapping) + resp, err := s.client.Do(ctx, req, m) + if err != nil { + return nil, resp, err + } + + return m, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/admin_stats.go b/vendor/github.com/google/go-github/github/admin_stats.go new file mode 100644 index 00000000..1550d250 --- /dev/null +++ b/vendor/github.com/google/go-github/github/admin_stats.go @@ -0,0 +1,171 @@ +// Copyright 2017 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// AdminStats represents a variety of stats of a Github Enterprise +// installation. +type AdminStats struct { + Issues *IssueStats `json:"issues,omitempty"` + Hooks *HookStats `json:"hooks,omitempty"` + Milestones *MilestoneStats `json:"milestones,omitempty"` + Orgs *OrgStats `json:"orgs,omitempty"` + Comments *CommentStats `json:"comments,omitempty"` + Pages *PageStats `json:"pages,omitempty"` + Users *UserStats `json:"users,omitempty"` + Gists *GistStats `json:"gists,omitempty"` + Pulls *PullStats `json:"pulls,omitempty"` + Repos *RepoStats `json:"repos,omitempty"` +} + +func (s AdminStats) String() string { + return Stringify(s) +} + +// IssueStats represents the number of total, open and closed issues. +type IssueStats struct { + TotalIssues *int `json:"total_issues,omitempty"` + OpenIssues *int `json:"open_issues,omitempty"` + ClosedIssues *int `json:"closed_issues,omitempty"` +} + +func (s IssueStats) String() string { + return Stringify(s) +} + +// HookStats represents the number of total, active and inactive hooks. +type HookStats struct { + TotalHooks *int `json:"total_hooks,omitempty"` + ActiveHooks *int `json:"active_hooks,omitempty"` + InactiveHooks *int `json:"inactive_hooks,omitempty"` +} + +func (s HookStats) String() string { + return Stringify(s) +} + +// MilestoneStats represents the number of total, open and close milestones. +type MilestoneStats struct { + TotalMilestones *int `json:"total_milestones,omitempty"` + OpenMilestones *int `json:"open_milestones,omitempty"` + ClosedMilestones *int `json:"closed_milestones,omitempty"` +} + +func (s MilestoneStats) String() string { + return Stringify(s) +} + +// OrgStats represents the number of total, disabled organizations and the team +// and team member count. +type OrgStats struct { + TotalOrgs *int `json:"total_orgs,omitempty"` + DisabledOrgs *int `json:"disabled_orgs,omitempty"` + TotalTeams *int `json:"total_teams,omitempty"` + TotalTeamMembers *int `json:"total_team_members,omitempty"` +} + +func (s OrgStats) String() string { + return Stringify(s) +} + +// CommentStats represents the number of total comments on commits, gists, issues +// and pull requests. +type CommentStats struct { + TotalCommitComments *int `json:"total_commit_comments,omitempty"` + TotalGistComments *int `json:"total_gist_comments,omitempty"` + TotalIssueComments *int `json:"total_issue_comments,omitempty"` + TotalPullRequestComments *int `json:"total_pull_request_comments,omitempty"` +} + +func (s CommentStats) String() string { + return Stringify(s) +} + +// PageStats represents the total number of github pages. +type PageStats struct { + TotalPages *int `json:"total_pages,omitempty"` +} + +func (s PageStats) String() string { + return Stringify(s) +} + +// UserStats represents the number of total, admin and suspended users. +type UserStats struct { + TotalUsers *int `json:"total_users,omitempty"` + AdminUsers *int `json:"admin_users,omitempty"` + SuspendedUsers *int `json:"suspended_users,omitempty"` +} + +func (s UserStats) String() string { + return Stringify(s) +} + +//GistStats represents the number of total, private and public gists. +type GistStats struct { + TotalGists *int `json:"total_gists,omitempty"` + PrivateGists *int `json:"private_gists,omitempty"` + PublicGists *int `json:"public_gists,omitempty"` +} + +func (s GistStats) String() string { + return Stringify(s) +} + +// PullStats represents the number of total, merged, mergable and unmergeable +// pull-requests. +type PullStats struct { + TotalPulls *int `json:"total_pulls,omitempty"` + MergedPulls *int `json:"merged_pulls,omitempty"` + MergablePulls *int `json:"mergeable_pulls,omitempty"` + UnmergablePulls *int `json:"unmergeable_pulls,omitempty"` +} + +func (s PullStats) String() string { + return Stringify(s) +} + +// RepoStats represents the number of total, root, fork, organization repositories +// together with the total number of pushes and wikis. +type RepoStats struct { + TotalRepos *int `json:"total_repos,omitempty"` + RootRepos *int `json:"root_repos,omitempty"` + ForkRepos *int `json:"fork_repos,omitempty"` + OrgRepos *int `json:"org_repos,omitempty"` + TotalPushes *int `json:"total_pushes,omitempty"` + TotalWikis *int `json:"total_wikis,omitempty"` +} + +func (s RepoStats) String() string { + return Stringify(s) +} + +// GetAdminStats returns a variety of metrics about a Github Enterprise +// installation. +// +// Please note that this is only available to site administrators, +// otherwise it will error with a 404 not found (instead of 401 or 403). +// +// GitHub API docs: https://developer.github.com/v3/enterprise-admin/admin_stats/ +func (s *AdminService) GetAdminStats(ctx context.Context) (*AdminStats, *Response, error) { + u := fmt.Sprintf("enterprise/stats/all") + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + m := new(AdminStats) + resp, err := s.client.Do(ctx, req, m) + if err != nil { + return nil, resp, err + } + + return m, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/apps.go b/vendor/github.com/google/go-github/github/apps.go new file mode 100644 index 00000000..c1f7f138 --- /dev/null +++ b/vendor/github.com/google/go-github/github/apps.go @@ -0,0 +1,197 @@ +// Copyright 2016 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" + "time" +) + +// AppsService provides access to the installation related functions +// in the GitHub API. +// +// GitHub API docs: https://developer.github.com/v3/apps/ +type AppsService service + +// App represents a GitHub App. +type App struct { + ID *int64 `json:"id,omitempty"` + Owner *User `json:"owner,omitempty"` + Name *string `json:"name,omitempty"` + Description *string `json:"description,omitempty"` + ExternalURL *string `json:"external_url,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` + CreatedAt *time.Time `json:"created_at,omitempty"` + UpdatedAt *time.Time `json:"updated_at,omitempty"` +} + +// InstallationToken represents an installation token. +type InstallationToken struct { + Token *string `json:"token,omitempty"` + ExpiresAt *time.Time `json:"expires_at,omitempty"` +} + +// InstallationPermissions lists the permissions for metadata, contents, issues and single file for an installation. +type InstallationPermissions struct { + Metadata *string `json:"metadata,omitempty"` + Contents *string `json:"contents,omitempty"` + Issues *string `json:"issues,omitempty"` + SingleFile *string `json:"single_file,omitempty"` +} + +// Installation represents a GitHub Apps installation. +type Installation struct { + ID *int64 `json:"id,omitempty"` + AppID *int64 `json:"app_id,omitempty"` + TargetID *int64 `json:"target_id,omitempty"` + Account *User `json:"account,omitempty"` + AccessTokensURL *string `json:"access_tokens_url,omitempty"` + RepositoriesURL *string `json:"repositories_url,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` + TargetType *string `json:"target_type,omitempty"` + SingleFileName *string `json:"single_file_name,omitempty"` + RepositorySelection *string `json:"repository_selection,omitempty"` + Events []string `json:"events,omitempty"` + Permissions *InstallationPermissions `json:"permissions,omitempty"` +} + +func (i Installation) String() string { + return Stringify(i) +} + +// Get a single GitHub App. Passing the empty string will get +// the authenticated GitHub App. +// +// Note: appSlug is just the URL-friendly name of your GitHub App. +// You can find this on the settings page for your GitHub App +// (e.g., https://github.com/settings/apps/:app_slug). +// +// GitHub API docs: https://developer.github.com/v3/apps/#get-a-single-github-app +func (s *AppsService) Get(ctx context.Context, appSlug string) (*App, *Response, error) { + var u string + if appSlug != "" { + u = fmt.Sprintf("apps/%v", appSlug) + } else { + u = "app" + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeIntegrationPreview) + + app := new(App) + resp, err := s.client.Do(ctx, req, app) + if err != nil { + return nil, resp, err + } + + return app, resp, nil +} + +// ListInstallations lists the installations that the current GitHub App has. +// +// GitHub API docs: https://developer.github.com/v3/apps/#find-installations +func (s *AppsService) ListInstallations(ctx context.Context, opt *ListOptions) ([]*Installation, *Response, error) { + u, err := addOptions("app/installations", opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeIntegrationPreview) + + var i []*Installation + resp, err := s.client.Do(ctx, req, &i) + if err != nil { + return nil, resp, err + } + + return i, resp, nil +} + +// GetInstallation returns the specified installation. +// +// GitHub API docs: https://developer.github.com/v3/apps/#get-a-single-installation +func (s *AppsService) GetInstallation(ctx context.Context, id int64) (*Installation, *Response, error) { + u := fmt.Sprintf("app/installations/%v", id) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeIntegrationPreview) + + i := new(Installation) + resp, err := s.client.Do(ctx, req, i) + if err != nil { + return nil, resp, err + } + + return i, resp, nil +} + +// ListUserInstallations lists installations that are accessible to the authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/apps/#list-installations-for-user +func (s *AppsService) ListUserInstallations(ctx context.Context, opt *ListOptions) ([]*Installation, *Response, error) { + u, err := addOptions("user/installations", opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeIntegrationPreview) + + var i struct { + Installations []*Installation `json:"installations"` + } + resp, err := s.client.Do(ctx, req, &i) + if err != nil { + return nil, resp, err + } + + return i.Installations, resp, nil +} + +// CreateInstallationToken creates a new installation token. +// +// GitHub API docs: https://developer.github.com/v3/apps/#create-a-new-installation-token +func (s *AppsService) CreateInstallationToken(ctx context.Context, id int64) (*InstallationToken, *Response, error) { + u := fmt.Sprintf("installations/%v/access_tokens", id) + + req, err := s.client.NewRequest("POST", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeIntegrationPreview) + + t := new(InstallationToken) + resp, err := s.client.Do(ctx, req, t) + if err != nil { + return nil, resp, err + } + + return t, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/apps_installation.go b/vendor/github.com/google/go-github/github/apps_installation.go new file mode 100644 index 00000000..ccfecb8d --- /dev/null +++ b/vendor/github.com/google/go-github/github/apps_installation.go @@ -0,0 +1,101 @@ +// Copyright 2016 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// ListRepos lists the repositories that are accessible to the authenticated installation. +// +// GitHub API docs: https://developer.github.com/v3/apps/installations/#list-repositories +func (s *AppsService) ListRepos(ctx context.Context, opt *ListOptions) ([]*Repository, *Response, error) { + u, err := addOptions("installation/repositories", opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeIntegrationPreview) + + var r struct { + Repositories []*Repository `json:"repositories"` + } + resp, err := s.client.Do(ctx, req, &r) + if err != nil { + return nil, resp, err + } + + return r.Repositories, resp, nil +} + +// ListUserRepos lists repositories that are accessible +// to the authenticated user for an installation. +// +// GitHub API docs: https://developer.github.com/v3/apps/installations/#list-repositories-accessible-to-the-user-for-an-installation +func (s *AppsService) ListUserRepos(ctx context.Context, id int64, opt *ListOptions) ([]*Repository, *Response, error) { + u := fmt.Sprintf("user/installations/%v/repositories", id) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeIntegrationPreview) + + var r struct { + Repositories []*Repository `json:"repositories"` + } + resp, err := s.client.Do(ctx, req, &r) + if err != nil { + return nil, resp, err + } + + return r.Repositories, resp, nil +} + +// AddRepository adds a single repository to an installation. +// +// GitHub API docs: https://developer.github.com/v3/apps/installations/#add-repository-to-installation +func (s *AppsService) AddRepository(ctx context.Context, instID, repoID int64) (*Repository, *Response, error) { + u := fmt.Sprintf("apps/installations/%v/repositories/%v", instID, repoID) + req, err := s.client.NewRequest("PUT", u, nil) + if err != nil { + return nil, nil, err + } + + r := new(Repository) + resp, err := s.client.Do(ctx, req, r) + if err != nil { + return nil, resp, err + } + + return r, resp, nil +} + +// RemoveRepository removes a single repository from an installation. +// +// GitHub docs: https://developer.github.com/v3/apps/installations/#remove-repository-from-installation +func (s *AppsService) RemoveRepository(ctx context.Context, instID, repoID int64) (*Response, error) { + u := fmt.Sprintf("apps/installations/%v/repositories/%v", instID, repoID) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/apps_marketplace.go b/vendor/github.com/google/go-github/github/apps_marketplace.go new file mode 100644 index 00000000..089cdbf7 --- /dev/null +++ b/vendor/github.com/google/go-github/github/apps_marketplace.go @@ -0,0 +1,180 @@ +// Copyright 2017 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// MarketplaceService handles communication with the marketplace related +// methods of the GitHub API. +// +// GitHub API docs: https://developer.github.com/v3/apps/marketplace/ +type MarketplaceService struct { + client *Client + // Stubbed controls whether endpoints that return stubbed data are used + // instead of production endpoints. Stubbed data is fake data that's useful + // for testing your GitHub Apps. Stubbed data is hard-coded and will not + // change based on actual subscriptions. + // + // GitHub API docs: https://developer.github.com/v3/apps/marketplace/ + Stubbed bool +} + +// MarketplacePlan represents a GitHub Apps Marketplace Listing Plan. +type MarketplacePlan struct { + URL *string `json:"url,omitempty"` + AccountsURL *string `json:"accounts_url,omitempty"` + ID *int64 `json:"id,omitempty"` + Name *string `json:"name,omitempty"` + Description *string `json:"description,omitempty"` + MonthlyPriceInCents *int `json:"monthly_price_in_cents,omitempty"` + YearlyPriceInCents *int `json:"yearly_price_in_cents,omitempty"` + PriceModel *string `json:"price_model,omitempty"` + UnitName *string `json:"unit_name,omitempty"` + Bullets *[]string `json:"bullets,omitempty"` +} + +// MarketplacePurchase represents a GitHub Apps Marketplace Purchase. +type MarketplacePurchase struct { + BillingCycle *string `json:"billing_cycle,omitempty"` + NextBillingDate *string `json:"next_billing_date,omitempty"` + UnitCount *int `json:"unit_count,omitempty"` + Plan *MarketplacePlan `json:"plan,omitempty"` + Account *MarketplacePlanAccount `json:"account,omitempty"` +} + +// MarketplacePlanAccount represents a GitHub Account (user or organization) on a specific plan. +type MarketplacePlanAccount struct { + URL *string `json:"url,omitempty"` + Type *string `json:"type,omitempty"` + ID *int64 `json:"id,omitempty"` + Login *string `json:"login,omitempty"` + Email *string `json:"email,omitempty"` + OrganizationBillingEmail *string `json:"organization_billing_email,omitempty"` + MarketplacePurchase *MarketplacePurchase `json:"marketplace_purchase,omitempty"` +} + +// ListPlans lists all plans for your Marketplace listing. +// +// GitHub API docs: https://developer.github.com/v3/apps/marketplace/#list-all-plans-for-your-marketplace-listing +func (s *MarketplaceService) ListPlans(ctx context.Context, opt *ListOptions) ([]*MarketplacePlan, *Response, error) { + uri := s.marketplaceURI("plans") + u, err := addOptions(uri, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeMarketplacePreview) + + var plans []*MarketplacePlan + resp, err := s.client.Do(ctx, req, &plans) + if err != nil { + return nil, resp, err + } + + return plans, resp, nil +} + +// ListPlanAccountsForPlan lists all GitHub accounts (user or organization) on a specific plan. +// +// GitHub API docs: https://developer.github.com/v3/apps/marketplace/#list-all-github-accounts-user-or-organization-on-a-specific-plan +func (s *MarketplaceService) ListPlanAccountsForPlan(ctx context.Context, planID int64, opt *ListOptions) ([]*MarketplacePlanAccount, *Response, error) { + uri := s.marketplaceURI(fmt.Sprintf("plans/%v/accounts", planID)) + u, err := addOptions(uri, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeMarketplacePreview) + + var accounts []*MarketplacePlanAccount + resp, err := s.client.Do(ctx, req, &accounts) + if err != nil { + return nil, resp, err + } + + return accounts, resp, nil +} + +// ListPlanAccountsForAccount lists all GitHub accounts (user or organization) associated with an account. +// +// GitHub API docs: https://developer.github.com/v3/apps/marketplace/#check-if-a-github-account-is-associated-with-any-marketplace-listing +func (s *MarketplaceService) ListPlanAccountsForAccount(ctx context.Context, accountID int64, opt *ListOptions) ([]*MarketplacePlanAccount, *Response, error) { + uri := s.marketplaceURI(fmt.Sprintf("accounts/%v", accountID)) + u, err := addOptions(uri, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeMarketplacePreview) + + var accounts []*MarketplacePlanAccount + resp, err := s.client.Do(ctx, req, &accounts) + if err != nil { + return nil, resp, err + } + + return accounts, resp, nil +} + +// ListMarketplacePurchasesForUser lists all GitHub marketplace purchases made by a user. +// +// GitHub API docs: https://developer.github.com/v3/apps/marketplace/#get-a-users-marketplace-purchases +func (s *MarketplaceService) ListMarketplacePurchasesForUser(ctx context.Context, opt *ListOptions) ([]*MarketplacePurchase, *Response, error) { + uri := "user/marketplace_purchases" + if s.Stubbed { + uri = "user/marketplace_purchases/stubbed" + } + + u, err := addOptions(uri, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeMarketplacePreview) + + var purchases []*MarketplacePurchase + resp, err := s.client.Do(ctx, req, &purchases) + if err != nil { + return nil, resp, err + } + + return purchases, resp, nil +} + +func (s *MarketplaceService) marketplaceURI(endpoint string) string { + url := "marketplace_listing" + if s.Stubbed { + url = "marketplace_listing/stubbed" + } + return url + "/" + endpoint +} diff --git a/vendor/github.com/google/go-github/github/authorizations.go b/vendor/github.com/google/go-github/github/authorizations.go new file mode 100644 index 00000000..190205b0 --- /dev/null +++ b/vendor/github.com/google/go-github/github/authorizations.go @@ -0,0 +1,435 @@ +// Copyright 2015 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// Scope models a GitHub authorization scope. +// +// GitHub API docs: https://developer.github.com/v3/oauth/#scopes +type Scope string + +// This is the set of scopes for GitHub API V3 +const ( + ScopeNone Scope = "(no scope)" // REVISIT: is this actually returned, or just a documentation artifact? + ScopeUser Scope = "user" + ScopeUserEmail Scope = "user:email" + ScopeUserFollow Scope = "user:follow" + ScopePublicRepo Scope = "public_repo" + ScopeRepo Scope = "repo" + ScopeRepoDeployment Scope = "repo_deployment" + ScopeRepoStatus Scope = "repo:status" + ScopeDeleteRepo Scope = "delete_repo" + ScopeNotifications Scope = "notifications" + ScopeGist Scope = "gist" + ScopeReadRepoHook Scope = "read:repo_hook" + ScopeWriteRepoHook Scope = "write:repo_hook" + ScopeAdminRepoHook Scope = "admin:repo_hook" + ScopeAdminOrgHook Scope = "admin:org_hook" + ScopeReadOrg Scope = "read:org" + ScopeWriteOrg Scope = "write:org" + ScopeAdminOrg Scope = "admin:org" + ScopeReadPublicKey Scope = "read:public_key" + ScopeWritePublicKey Scope = "write:public_key" + ScopeAdminPublicKey Scope = "admin:public_key" + ScopeReadGPGKey Scope = "read:gpg_key" + ScopeWriteGPGKey Scope = "write:gpg_key" + ScopeAdminGPGKey Scope = "admin:gpg_key" +) + +// AuthorizationsService handles communication with the authorization related +// methods of the GitHub API. +// +// This service requires HTTP Basic Authentication; it cannot be accessed using +// an OAuth token. +// +// GitHub API docs: https://developer.github.com/v3/oauth_authorizations/ +type AuthorizationsService service + +// Authorization represents an individual GitHub authorization. +type Authorization struct { + ID *int64 `json:"id,omitempty"` + URL *string `json:"url,omitempty"` + Scopes []Scope `json:"scopes,omitempty"` + Token *string `json:"token,omitempty"` + TokenLastEight *string `json:"token_last_eight,omitempty"` + HashedToken *string `json:"hashed_token,omitempty"` + App *AuthorizationApp `json:"app,omitempty"` + Note *string `json:"note,omitempty"` + NoteURL *string `json:"note_url,omitempty"` + UpdatedAt *Timestamp `json:"updated_at,omitempty"` + CreatedAt *Timestamp `json:"created_at,omitempty"` + Fingerprint *string `json:"fingerprint,omitempty"` + + // User is only populated by the Check and Reset methods. + User *User `json:"user,omitempty"` +} + +func (a Authorization) String() string { + return Stringify(a) +} + +// AuthorizationApp represents an individual GitHub app (in the context of authorization). +type AuthorizationApp struct { + URL *string `json:"url,omitempty"` + Name *string `json:"name,omitempty"` + ClientID *string `json:"client_id,omitempty"` +} + +func (a AuthorizationApp) String() string { + return Stringify(a) +} + +// Grant represents an OAuth application that has been granted access to an account. +type Grant struct { + ID *int64 `json:"id,omitempty"` + URL *string `json:"url,omitempty"` + App *AuthorizationApp `json:"app,omitempty"` + CreatedAt *Timestamp `json:"created_at,omitempty"` + UpdatedAt *Timestamp `json:"updated_at,omitempty"` + Scopes []string `json:"scopes,omitempty"` +} + +func (g Grant) String() string { + return Stringify(g) +} + +// AuthorizationRequest represents a request to create an authorization. +type AuthorizationRequest struct { + Scopes []Scope `json:"scopes,omitempty"` + Note *string `json:"note,omitempty"` + NoteURL *string `json:"note_url,omitempty"` + ClientID *string `json:"client_id,omitempty"` + ClientSecret *string `json:"client_secret,omitempty"` + Fingerprint *string `json:"fingerprint,omitempty"` +} + +func (a AuthorizationRequest) String() string { + return Stringify(a) +} + +// AuthorizationUpdateRequest represents a request to update an authorization. +// +// Note that for any one update, you must only provide one of the "scopes" +// fields. That is, you may provide only one of "Scopes", or "AddScopes", or +// "RemoveScopes". +// +// GitHub API docs: https://developer.github.com/v3/oauth_authorizations/#update-an-existing-authorization +type AuthorizationUpdateRequest struct { + Scopes []string `json:"scopes,omitempty"` + AddScopes []string `json:"add_scopes,omitempty"` + RemoveScopes []string `json:"remove_scopes,omitempty"` + Note *string `json:"note,omitempty"` + NoteURL *string `json:"note_url,omitempty"` + Fingerprint *string `json:"fingerprint,omitempty"` +} + +func (a AuthorizationUpdateRequest) String() string { + return Stringify(a) +} + +// List the authorizations for the authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/oauth_authorizations/#list-your-authorizations +func (s *AuthorizationsService) List(ctx context.Context, opt *ListOptions) ([]*Authorization, *Response, error) { + u := "authorizations" + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var auths []*Authorization + resp, err := s.client.Do(ctx, req, &auths) + if err != nil { + return nil, resp, err + } + return auths, resp, nil +} + +// Get a single authorization. +// +// GitHub API docs: https://developer.github.com/v3/oauth_authorizations/#get-a-single-authorization +func (s *AuthorizationsService) Get(ctx context.Context, id int64) (*Authorization, *Response, error) { + u := fmt.Sprintf("authorizations/%d", id) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + a := new(Authorization) + resp, err := s.client.Do(ctx, req, a) + if err != nil { + return nil, resp, err + } + return a, resp, nil +} + +// Create a new authorization for the specified OAuth application. +// +// GitHub API docs: https://developer.github.com/v3/oauth_authorizations/#create-a-new-authorization +func (s *AuthorizationsService) Create(ctx context.Context, auth *AuthorizationRequest) (*Authorization, *Response, error) { + u := "authorizations" + + req, err := s.client.NewRequest("POST", u, auth) + if err != nil { + return nil, nil, err + } + + a := new(Authorization) + resp, err := s.client.Do(ctx, req, a) + if err != nil { + return nil, resp, err + } + return a, resp, nil +} + +// GetOrCreateForApp creates a new authorization for the specified OAuth +// application, only if an authorization for that application doesn’t already +// exist for the user. +// +// If a new token is created, the HTTP status code will be "201 Created", and +// the returned Authorization.Token field will be populated. If an existing +// token is returned, the status code will be "200 OK" and the +// Authorization.Token field will be empty. +// +// clientID is the OAuth Client ID with which to create the token. +// +// GitHub API docs: +// https://developer.github.com/v3/oauth_authorizations/#get-or-create-an-authorization-for-a-specific-app +// https://developer.github.com/v3/oauth_authorizations/#get-or-create-an-authorization-for-a-specific-app-and-fingerprint +func (s *AuthorizationsService) GetOrCreateForApp(ctx context.Context, clientID string, auth *AuthorizationRequest) (*Authorization, *Response, error) { + var u string + if auth.Fingerprint == nil || *auth.Fingerprint == "" { + u = fmt.Sprintf("authorizations/clients/%v", clientID) + } else { + u = fmt.Sprintf("authorizations/clients/%v/%v", clientID, *auth.Fingerprint) + } + + req, err := s.client.NewRequest("PUT", u, auth) + if err != nil { + return nil, nil, err + } + + a := new(Authorization) + resp, err := s.client.Do(ctx, req, a) + if err != nil { + return nil, resp, err + } + + return a, resp, nil +} + +// Edit a single authorization. +// +// GitHub API docs: https://developer.github.com/v3/oauth_authorizations/#update-an-existing-authorization +func (s *AuthorizationsService) Edit(ctx context.Context, id int64, auth *AuthorizationUpdateRequest) (*Authorization, *Response, error) { + u := fmt.Sprintf("authorizations/%d", id) + + req, err := s.client.NewRequest("PATCH", u, auth) + if err != nil { + return nil, nil, err + } + + a := new(Authorization) + resp, err := s.client.Do(ctx, req, a) + if err != nil { + return nil, resp, err + } + + return a, resp, nil +} + +// Delete a single authorization. +// +// GitHub API docs: https://developer.github.com/v3/oauth_authorizations/#delete-an-authorization +func (s *AuthorizationsService) Delete(ctx context.Context, id int64) (*Response, error) { + u := fmt.Sprintf("authorizations/%d", id) + + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +// Check if an OAuth token is valid for a specific app. +// +// Note that this operation requires the use of BasicAuth, but where the +// username is the OAuth application clientID, and the password is its +// clientSecret. Invalid tokens will return a 404 Not Found. +// +// The returned Authorization.User field will be populated. +// +// GitHub API docs: https://developer.github.com/v3/oauth_authorizations/#check-an-authorization +func (s *AuthorizationsService) Check(ctx context.Context, clientID string, token string) (*Authorization, *Response, error) { + u := fmt.Sprintf("applications/%v/tokens/%v", clientID, token) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + a := new(Authorization) + resp, err := s.client.Do(ctx, req, a) + if err != nil { + return nil, resp, err + } + + return a, resp, nil +} + +// Reset is used to reset a valid OAuth token without end user involvement. +// Applications must save the "token" property in the response, because changes +// take effect immediately. +// +// Note that this operation requires the use of BasicAuth, but where the +// username is the OAuth application clientID, and the password is its +// clientSecret. Invalid tokens will return a 404 Not Found. +// +// The returned Authorization.User field will be populated. +// +// GitHub API docs: https://developer.github.com/v3/oauth_authorizations/#reset-an-authorization +func (s *AuthorizationsService) Reset(ctx context.Context, clientID string, token string) (*Authorization, *Response, error) { + u := fmt.Sprintf("applications/%v/tokens/%v", clientID, token) + + req, err := s.client.NewRequest("POST", u, nil) + if err != nil { + return nil, nil, err + } + + a := new(Authorization) + resp, err := s.client.Do(ctx, req, a) + if err != nil { + return nil, resp, err + } + + return a, resp, nil +} + +// Revoke an authorization for an application. +// +// Note that this operation requires the use of BasicAuth, but where the +// username is the OAuth application clientID, and the password is its +// clientSecret. Invalid tokens will return a 404 Not Found. +// +// GitHub API docs: https://developer.github.com/v3/oauth_authorizations/#revoke-an-authorization-for-an-application +func (s *AuthorizationsService) Revoke(ctx context.Context, clientID string, token string) (*Response, error) { + u := fmt.Sprintf("applications/%v/tokens/%v", clientID, token) + + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +// ListGrants lists the set of OAuth applications that have been granted +// access to a user's account. This will return one entry for each application +// that has been granted access to the account, regardless of the number of +// tokens an application has generated for the user. +// +// GitHub API docs: https://developer.github.com/v3/oauth_authorizations/#list-your-grants +func (s *AuthorizationsService) ListGrants(ctx context.Context, opt *ListOptions) ([]*Grant, *Response, error) { + u, err := addOptions("applications/grants", opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + grants := []*Grant{} + resp, err := s.client.Do(ctx, req, &grants) + if err != nil { + return nil, resp, err + } + + return grants, resp, nil +} + +// GetGrant gets a single OAuth application grant. +// +// GitHub API docs: https://developer.github.com/v3/oauth_authorizations/#get-a-single-grant +func (s *AuthorizationsService) GetGrant(ctx context.Context, id int64) (*Grant, *Response, error) { + u := fmt.Sprintf("applications/grants/%d", id) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + grant := new(Grant) + resp, err := s.client.Do(ctx, req, grant) + if err != nil { + return nil, resp, err + } + + return grant, resp, nil +} + +// DeleteGrant deletes an OAuth application grant. Deleting an application's +// grant will also delete all OAuth tokens associated with the application for +// the user. +// +// GitHub API docs: https://developer.github.com/v3/oauth_authorizations/#delete-a-grant +func (s *AuthorizationsService) DeleteGrant(ctx context.Context, id int64) (*Response, error) { + u := fmt.Sprintf("applications/grants/%d", id) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +// CreateImpersonation creates an impersonation OAuth token. +// +// This requires admin permissions. With the returned Authorization.Token +// you can e.g. create or delete a user's public SSH key. NOTE: creating a +// new token automatically revokes an existing one. +// +// GitHub API docs: https://developer.github.com/enterprise/2.5/v3/users/administration/#create-an-impersonation-oauth-token +func (s *AuthorizationsService) CreateImpersonation(ctx context.Context, username string, authReq *AuthorizationRequest) (*Authorization, *Response, error) { + u := fmt.Sprintf("admin/users/%v/authorizations", username) + req, err := s.client.NewRequest("POST", u, authReq) + if err != nil { + return nil, nil, err + } + + a := new(Authorization) + resp, err := s.client.Do(ctx, req, a) + if err != nil { + return nil, resp, err + } + return a, resp, nil +} + +// DeleteImpersonation deletes an impersonation OAuth token. +// +// NOTE: there can be only one at a time. +// +// GitHub API docs: https://developer.github.com/enterprise/2.5/v3/users/administration/#delete-an-impersonation-oauth-token +func (s *AuthorizationsService) DeleteImpersonation(ctx context.Context, username string) (*Response, error) { + u := fmt.Sprintf("admin/users/%v/authorizations", username) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/doc.go b/vendor/github.com/google/go-github/github/doc.go new file mode 100644 index 00000000..96445d26 --- /dev/null +++ b/vendor/github.com/google/go-github/github/doc.go @@ -0,0 +1,187 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* +Package github provides a client for using the GitHub API. + +Usage: + + import "github.com/google/go-github/github" + +Construct a new GitHub client, then use the various services on the client to +access different parts of the GitHub API. For example: + + client := github.NewClient(nil) + + // list all organizations for user "willnorris" + orgs, _, err := client.Organizations.List(ctx, "willnorris", nil) + +Some API methods have optional parameters that can be passed. For example: + + client := github.NewClient(nil) + + // list public repositories for org "github" + opt := &github.RepositoryListByOrgOptions{Type: "public"} + repos, _, err := client.Repositories.ListByOrg(ctx, "github", opt) + +The services of a client divide the API into logical chunks and correspond to +the structure of the GitHub API documentation at +https://developer.github.com/v3/. + +NOTE: Using the https://godoc.org/context package, one can easily +pass cancelation signals and deadlines to various services of the client for +handling a request. In case there is no context available, then context.Background() +can be used as a starting point. + +For more sample code snippets, head over to the https://github.com/google/go-github/tree/master/example directory. + +Authentication + +The go-github library does not directly handle authentication. Instead, when +creating a new client, pass an http.Client that can handle authentication for +you. The easiest and recommended way to do this is using the golang.org/x/oauth2 +library, but you can always use any other library that provides an http.Client. +If you have an OAuth2 access token (for example, a personal API token), you can +use it with the oauth2 library using: + + import "golang.org/x/oauth2" + + func main() { + ctx := context.Background() + ts := oauth2.StaticTokenSource( + &oauth2.Token{AccessToken: "... your access token ..."}, + ) + tc := oauth2.NewClient(ctx, ts) + + client := github.NewClient(tc) + + // list all repositories for the authenticated user + repos, _, err := client.Repositories.List(ctx, "", nil) + } + +Note that when using an authenticated Client, all calls made by the client will +include the specified OAuth token. Therefore, authenticated clients should +almost never be shared between different users. + +See the oauth2 docs for complete instructions on using that library. + +For API methods that require HTTP Basic Authentication, use the +BasicAuthTransport. + +GitHub Apps authentication can be provided by the +https://github.com/bradleyfalzon/ghinstallation package. + + import "github.com/bradleyfalzon/ghinstallation" + + func main() { + // Wrap the shared transport for use with the integration ID 1 authenticating with installation ID 99. + itr, err := ghinstallation.NewKeyFromFile(http.DefaultTransport, 1, 99, "2016-10-19.private-key.pem") + if err != nil { + // Handle error. + } + + // Use installation transport with client + client := github.NewClient(&http.Client{Transport: itr}) + + // Use client... + } + +Rate Limiting + +GitHub imposes a rate limit on all API clients. Unauthenticated clients are +limited to 60 requests per hour, while authenticated clients can make up to +5,000 requests per hour. The Search API has a custom rate limit. Unauthenticated +clients are limited to 10 requests per minute, while authenticated clients +can make up to 30 requests per minute. To receive the higher rate limit when +making calls that are not issued on behalf of a user, +use UnauthenticatedRateLimitedTransport. + +The returned Response.Rate value contains the rate limit information +from the most recent API call. If a recent enough response isn't +available, you can use RateLimits to fetch the most up-to-date rate +limit data for the client. + +To detect an API rate limit error, you can check if its type is *github.RateLimitError: + + repos, _, err := client.Repositories.List(ctx, "", nil) + if _, ok := err.(*github.RateLimitError); ok { + log.Println("hit rate limit") + } + +Learn more about GitHub rate limiting at +https://developer.github.com/v3/#rate-limiting. + +Accepted Status + +Some endpoints may return a 202 Accepted status code, meaning that the +information required is not yet ready and was scheduled to be gathered on +the GitHub side. Methods known to behave like this are documented specifying +this behavior. + +To detect this condition of error, you can check if its type is +*github.AcceptedError: + + stats, _, err := client.Repositories.ListContributorsStats(ctx, org, repo) + if _, ok := err.(*github.AcceptedError); ok { + log.Println("scheduled on GitHub side") + } + +Conditional Requests + +The GitHub API has good support for conditional requests which will help +prevent you from burning through your rate limit, as well as help speed up your +application. go-github does not handle conditional requests directly, but is +instead designed to work with a caching http.Transport. We recommend using +https://github.com/gregjones/httpcache for that. + +Learn more about GitHub conditional requests at +https://developer.github.com/v3/#conditional-requests. + +Creating and Updating Resources + +All structs for GitHub resources use pointer values for all non-repeated fields. +This allows distinguishing between unset fields and those set to a zero-value. +Helper functions have been provided to easily create these pointers for string, +bool, and int values. For example: + + // create a new private repository named "foo" + repo := &github.Repository{ + Name: github.String("foo"), + Private: github.Bool(true), + } + client.Repositories.Create(ctx, "", repo) + +Users who have worked with protocol buffers should find this pattern familiar. + +Pagination + +All requests for resource collections (repos, pull requests, issues, etc.) +support pagination. Pagination options are described in the +github.ListOptions struct and passed to the list methods directly or as an +embedded type of a more specific list options struct (for example +github.PullRequestListOptions). Pages information is available via the +github.Response struct. + + client := github.NewClient(nil) + + opt := &github.RepositoryListByOrgOptions{ + ListOptions: github.ListOptions{PerPage: 10}, + } + // get all pages of results + var allRepos []*github.Repository + for { + repos, resp, err := client.Repositories.ListByOrg(ctx, "github", opt) + if err != nil { + return err + } + allRepos = append(allRepos, repos...) + if resp.NextPage == 0 { + break + } + opt.Page = resp.NextPage + } + +*/ +package github diff --git a/vendor/github.com/google/go-github/github/event_types.go b/vendor/github.com/google/go-github/github/event_types.go new file mode 100644 index 00000000..17c2b102 --- /dev/null +++ b/vendor/github.com/google/go-github/github/event_types.go @@ -0,0 +1,752 @@ +// Copyright 2016 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// These event types are shared between the Events API and used as Webhook payloads. + +package github + +// CommitCommentEvent is triggered when a commit comment is created. +// The Webhook event name is "commit_comment". +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#commitcommentevent +type CommitCommentEvent struct { + Comment *RepositoryComment `json:"comment,omitempty"` + + // The following fields are only populated by Webhook events. + Action *string `json:"action,omitempty"` + Repo *Repository `json:"repository,omitempty"` + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// CreateEvent represents a created repository, branch, or tag. +// The Webhook event name is "create". +// +// Note: webhooks will not receive this event for created repositories. +// Additionally, webhooks will not receive this event for tags if more +// than three tags are pushed at once. +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#createevent +type CreateEvent struct { + Ref *string `json:"ref,omitempty"` + // RefType is the object that was created. Possible values are: "repository", "branch", "tag". + RefType *string `json:"ref_type,omitempty"` + MasterBranch *string `json:"master_branch,omitempty"` + Description *string `json:"description,omitempty"` + + // The following fields are only populated by Webhook events. + PusherType *string `json:"pusher_type,omitempty"` + Repo *Repository `json:"repository,omitempty"` + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// DeleteEvent represents a deleted branch or tag. +// The Webhook event name is "delete". +// +// Note: webhooks will not receive this event for tags if more than three tags +// are deleted at once. +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#deleteevent +type DeleteEvent struct { + Ref *string `json:"ref,omitempty"` + // RefType is the object that was deleted. Possible values are: "branch", "tag". + RefType *string `json:"ref_type,omitempty"` + + // The following fields are only populated by Webhook events. + PusherType *string `json:"pusher_type,omitempty"` + Repo *Repository `json:"repository,omitempty"` + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// DeploymentEvent represents a deployment. +// The Webhook event name is "deployment". +// +// Events of this type are not visible in timelines, they are only used to trigger hooks. +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#deploymentevent +type DeploymentEvent struct { + Deployment *Deployment `json:"deployment,omitempty"` + Repo *Repository `json:"repository,omitempty"` + + // The following fields are only populated by Webhook events. + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// DeploymentStatusEvent represents a deployment status. +// The Webhook event name is "deployment_status". +// +// Events of this type are not visible in timelines, they are only used to trigger hooks. +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#deploymentstatusevent +type DeploymentStatusEvent struct { + Deployment *Deployment `json:"deployment,omitempty"` + DeploymentStatus *DeploymentStatus `json:"deployment_status,omitempty"` + Repo *Repository `json:"repository,omitempty"` + + // The following fields are only populated by Webhook events. + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// ForkEvent is triggered when a user forks a repository. +// The Webhook event name is "fork". +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#forkevent +type ForkEvent struct { + // Forkee is the created repository. + Forkee *Repository `json:"forkee,omitempty"` + + // The following fields are only populated by Webhook events. + Repo *Repository `json:"repository,omitempty"` + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// Page represents a single Wiki page. +type Page struct { + PageName *string `json:"page_name,omitempty"` + Title *string `json:"title,omitempty"` + Summary *string `json:"summary,omitempty"` + Action *string `json:"action,omitempty"` + SHA *string `json:"sha,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` +} + +// GollumEvent is triggered when a Wiki page is created or updated. +// The Webhook event name is "gollum". +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#gollumevent +type GollumEvent struct { + Pages []*Page `json:"pages,omitempty"` + + // The following fields are only populated by Webhook events. + Repo *Repository `json:"repository,omitempty"` + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// EditChange represents the changes when an issue, pull request, or comment has +// been edited. +type EditChange struct { + Title *struct { + From *string `json:"from,omitempty"` + } `json:"title,omitempty"` + Body *struct { + From *string `json:"from,omitempty"` + } `json:"body,omitempty"` +} + +// ProjectChange represents the changes when a project has been edited. +type ProjectChange struct { + Name *struct { + From *string `json:"from,omitempty"` + } `json:"name,omitempty"` + Body *struct { + From *string `json:"from,omitempty"` + } `json:"body,omitempty"` +} + +// ProjectCardChange represents the changes when a project card has been edited. +type ProjectCardChange struct { + Note *struct { + From *string `json:"from,omitempty"` + } `json:"note,omitempty"` +} + +// ProjectColumnChange represents the changes when a project column has been edited. +type ProjectColumnChange struct { + Name *struct { + From *string `json:"from,omitempty"` + } `json:"name,omitempty"` +} + +// TeamChange represents the changes when a team has been edited. +type TeamChange struct { + Description *struct { + From *string `json:"from,omitempty"` + } `json:"description,omitempty"` + Name *struct { + From *string `json:"from,omitempty"` + } `json:"name,omitempty"` + Privacy *struct { + From *string `json:"from,omitempty"` + } `json:"privacy,omitempty"` + Repository *struct { + Permissions *struct { + From *struct { + Admin *bool `json:"admin,omitempty"` + Pull *bool `json:"pull,omitempty"` + Push *bool `json:"push,omitempty"` + } `json:"from,omitempty"` + } `json:"permissions,omitempty"` + } `json:"repository,omitempty"` +} + +// InstallationEvent is triggered when a GitHub App has been installed or uninstalled. +// The Webhook event name is "installation". +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#installationevent +type InstallationEvent struct { + // The action that was performed. Can be either "created" or "deleted". + Action *string `json:"action,omitempty"` + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// InstallationRepositoriesEvent is triggered when a repository is added or +// removed from an installation. The Webhook event name is "installation_repositories". +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#installationrepositoriesevent +type InstallationRepositoriesEvent struct { + // The action that was performed. Can be either "added" or "removed". + Action *string `json:"action,omitempty"` + RepositoriesAdded []*Repository `json:"repositories_added,omitempty"` + RepositoriesRemoved []*Repository `json:"repositories_removed,omitempty"` + RepositorySelection *string `json:"repository_selection,omitempty"` + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// IssueCommentEvent is triggered when an issue comment is created on an issue +// or pull request. +// The Webhook event name is "issue_comment". +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#issuecommentevent +type IssueCommentEvent struct { + // Action is the action that was performed on the comment. + // Possible values are: "created", "edited", "deleted". + Action *string `json:"action,omitempty"` + Issue *Issue `json:"issue,omitempty"` + Comment *IssueComment `json:"comment,omitempty"` + + // The following fields are only populated by Webhook events. + Changes *EditChange `json:"changes,omitempty"` + Repo *Repository `json:"repository,omitempty"` + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// IssuesEvent is triggered when an issue is assigned, unassigned, labeled, +// unlabeled, opened, closed, or reopened. +// The Webhook event name is "issues". +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#issuesevent +type IssuesEvent struct { + // Action is the action that was performed. Possible values are: "assigned", + // "unassigned", "labeled", "unlabeled", "opened", "closed", "reopened", "edited". + Action *string `json:"action,omitempty"` + Issue *Issue `json:"issue,omitempty"` + Assignee *User `json:"assignee,omitempty"` + Label *Label `json:"label,omitempty"` + + // The following fields are only populated by Webhook events. + Changes *EditChange `json:"changes,omitempty"` + Repo *Repository `json:"repository,omitempty"` + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// LabelEvent is triggered when a repository's label is created, edited, or deleted. +// The Webhook event name is "label" +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#labelevent +type LabelEvent struct { + // Action is the action that was performed. Possible values are: + // "created", "edited", "deleted" + Action *string `json:"action,omitempty"` + Label *Label `json:"label,omitempty"` + + // The following fields are only populated by Webhook events. + Changes *EditChange `json:"changes,omitempty"` + Repo *Repository `json:"repository,omitempty"` + Org *Organization `json:"organization,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// MarketplacePurchaseEvent is triggered when a user purchases, cancels, or changes +// their GitHub Marketplace plan. +// Webhook event name "marketplace_purchase". +// +// Github API docs: https://developer.github.com/v3/activity/events/types/#marketplacepurchaseevent +type MarketplacePurchaseEvent struct { + // Action is the action that was performed. Possible values are: + // "purchased", "cancelled", "changed". + Action *string `json:"action,omitempty"` + + // The following fields are only populated by Webhook events. + EffectiveDate *Timestamp `json:"effective_date,omitempty"` + MarketplacePurchase *MarketplacePurchase `json:"marketplace_purchase,omitempty"` + PreviousMarketplacePurchase *MarketplacePurchase `json:"previous_marketplace_purchase,omitempty"` + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// MemberEvent is triggered when a user is added as a collaborator to a repository. +// The Webhook event name is "member". +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#memberevent +type MemberEvent struct { + // Action is the action that was performed. Possible value is: "added". + Action *string `json:"action,omitempty"` + Member *User `json:"member,omitempty"` + + // The following fields are only populated by Webhook events. + Repo *Repository `json:"repository,omitempty"` + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// MembershipEvent is triggered when a user is added or removed from a team. +// The Webhook event name is "membership". +// +// Events of this type are not visible in timelines, they are only used to +// trigger organization webhooks. +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#membershipevent +type MembershipEvent struct { + // Action is the action that was performed. Possible values are: "added", "removed". + Action *string `json:"action,omitempty"` + // Scope is the scope of the membership. Possible value is: "team". + Scope *string `json:"scope,omitempty"` + Member *User `json:"member,omitempty"` + Team *Team `json:"team,omitempty"` + + // The following fields are only populated by Webhook events. + Org *Organization `json:"organization,omitempty"` + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// MilestoneEvent is triggered when a milestone is created, closed, opened, edited, or deleted. +// The Webhook event name is "milestone". +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#milestoneevent +type MilestoneEvent struct { + // Action is the action that was performed. Possible values are: + // "created", "closed", "opened", "edited", "deleted" + Action *string `json:"action,omitempty"` + Milestone *Milestone `json:"milestone,omitempty"` + + // The following fields are only populated by Webhook events. + Changes *EditChange `json:"changes,omitempty"` + Repo *Repository `json:"repository,omitempty"` + Sender *User `json:"sender,omitempty"` + Org *Organization `json:"organization,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// OrganizationEvent is triggered when a user is added, removed, or invited to an organization. +// Events of this type are not visible in timelines. These events are only used to trigger organization hooks. +// Webhook event name is "organization". +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#organizationevent +type OrganizationEvent struct { + // Action is the action that was performed. + // Can be one of "member_added", "member_removed", or "member_invited". + Action *string `json:"action,omitempty"` + + // Invitaion is the invitation for the user or email if the action is "member_invited". + Invitation *Invitation `json:"invitation,omitempty"` + + // Membership is the membership between the user and the organization. + // Not present when the action is "member_invited". + Membership *Membership `json:"membership,omitempty"` + + Organization *Organization `json:"organization,omitempty"` + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// OrgBlockEvent is triggered when an organization blocks or unblocks a user. +// The Webhook event name is "org_block". +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#orgblockevent +type OrgBlockEvent struct { + // Action is the action that was performed. + // Can be "blocked" or "unblocked". + Action *string `json:"action,omitempty"` + BlockedUser *User `json:"blocked_user,omitempty"` + Organization *Organization `json:"organization,omitempty"` + Sender *User `json:"sender,omitempty"` + + // The following fields are only populated by Webhook events. + Installation *Installation `json:"installation,omitempty"` +} + +// PageBuildEvent represents an attempted build of a GitHub Pages site, whether +// successful or not. +// The Webhook event name is "page_build". +// +// This event is triggered on push to a GitHub Pages enabled branch (gh-pages +// for project pages, master for user and organization pages). +// +// Events of this type are not visible in timelines, they are only used to trigger hooks. +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#pagebuildevent +type PageBuildEvent struct { + Build *PagesBuild `json:"build,omitempty"` + + // The following fields are only populated by Webhook events. + ID *int64 `json:"id,omitempty"` + Repo *Repository `json:"repository,omitempty"` + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// PingEvent is triggered when a Webhook is added to GitHub. +// +// GitHub API docs: https://developer.github.com/webhooks/#ping-event +type PingEvent struct { + // Random string of GitHub zen. + Zen *string `json:"zen,omitempty"` + // The ID of the webhook that triggered the ping. + HookID *int64 `json:"hook_id,omitempty"` + // The webhook configuration. + Hook *Hook `json:"hook,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// ProjectEvent is triggered when project is created, modified or deleted. +// The webhook event name is "project". +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#projectevent +type ProjectEvent struct { + Action *string `json:"action,omitempty"` + Changes *ProjectChange `json:"changes,omitempty"` + Project *Project `json:"project,omitempty"` + + // The following fields are only populated by Webhook events. + Repo *Repository `json:"repository,omitempty"` + Org *Organization `json:"organization,omitempty"` + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// ProjectCardEvent is triggered when a project card is created, updated, moved, converted to an issue, or deleted. +// The webhook event name is "project_card". +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#projectcardevent +type ProjectCardEvent struct { + Action *string `json:"action,omitempty"` + Changes *ProjectCardChange `json:"changes,omitempty"` + AfterID *int64 `json:"after_id,omitempty"` + ProjectCard *ProjectCard `json:"project_card,omitempty"` + + // The following fields are only populated by Webhook events. + Repo *Repository `json:"repository,omitempty"` + Org *Organization `json:"organization,omitempty"` + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// ProjectColumnEvent is triggered when a project column is created, updated, moved, or deleted. +// The webhook event name is "project_column". +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#projectcolumnevent +type ProjectColumnEvent struct { + Action *string `json:"action,omitempty"` + Changes *ProjectColumnChange `json:"changes,omitempty"` + AfterID *int64 `json:"after_id,omitempty"` + ProjectColumn *ProjectColumn `json:"project_column,omitempty"` + + // The following fields are only populated by Webhook events. + Repo *Repository `json:"repository,omitempty"` + Org *Organization `json:"organization,omitempty"` + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// PublicEvent is triggered when a private repository is open sourced. +// According to GitHub: "Without a doubt: the best GitHub event." +// The Webhook event name is "public". +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#publicevent +type PublicEvent struct { + // The following fields are only populated by Webhook events. + Repo *Repository `json:"repository,omitempty"` + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// PullRequestEvent is triggered when a pull request is assigned, unassigned, +// labeled, unlabeled, opened, closed, reopened, or synchronized. +// The Webhook event name is "pull_request". +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#pullrequestevent +type PullRequestEvent struct { + // Action is the action that was performed. Possible values are: + // "assigned", "unassigned", "review_requested", "review_request_removed", "labeled", "unlabeled", + // "opened", "closed", "reopened", "synchronize", "edited". + // If the action is "closed" and the merged key is false, + // the pull request was closed with unmerged commits. If the action is "closed" + // and the merged key is true, the pull request was merged. + Action *string `json:"action,omitempty"` + Number *int `json:"number,omitempty"` + PullRequest *PullRequest `json:"pull_request,omitempty"` + + // The following fields are only populated by Webhook events. + Changes *EditChange `json:"changes,omitempty"` + // RequestedReviewer is populated in "review_requested", "review_request_removed" event deliveries. + // A request affecting multiple reviewers at once is split into multiple + // such event deliveries, each with a single, different RequestedReviewer. + RequestedReviewer *User `json:"requested_reviewer,omitempty"` + Repo *Repository `json:"repository,omitempty"` + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` + Label *Label `json:"label,omitempty"` // Populated in "labeled" event deliveries. +} + +// PullRequestReviewEvent is triggered when a review is submitted on a pull +// request. +// The Webhook event name is "pull_request_review". +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#pullrequestreviewevent +type PullRequestReviewEvent struct { + // Action is always "submitted". + Action *string `json:"action,omitempty"` + Review *PullRequestReview `json:"review,omitempty"` + PullRequest *PullRequest `json:"pull_request,omitempty"` + + // The following fields are only populated by Webhook events. + Repo *Repository `json:"repository,omitempty"` + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` + + // The following field is only present when the webhook is triggered on + // a repository belonging to an organization. + Organization *Organization `json:"organization,omitempty"` +} + +// PullRequestReviewCommentEvent is triggered when a comment is created on a +// portion of the unified diff of a pull request. +// The Webhook event name is "pull_request_review_comment". +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#pullrequestreviewcommentevent +type PullRequestReviewCommentEvent struct { + // Action is the action that was performed on the comment. + // Possible values are: "created", "edited", "deleted". + Action *string `json:"action,omitempty"` + PullRequest *PullRequest `json:"pull_request,omitempty"` + Comment *PullRequestComment `json:"comment,omitempty"` + + // The following fields are only populated by Webhook events. + Changes *EditChange `json:"changes,omitempty"` + Repo *Repository `json:"repository,omitempty"` + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// PushEvent represents a git push to a GitHub repository. +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#pushevent +type PushEvent struct { + PushID *int64 `json:"push_id,omitempty"` + Head *string `json:"head,omitempty"` + Ref *string `json:"ref,omitempty"` + Size *int `json:"size,omitempty"` + Commits []PushEventCommit `json:"commits,omitempty"` + Before *string `json:"before,omitempty"` + DistinctSize *int `json:"distinct_size,omitempty"` + + // The following fields are only populated by Webhook events. + After *string `json:"after,omitempty"` + Created *bool `json:"created,omitempty"` + Deleted *bool `json:"deleted,omitempty"` + Forced *bool `json:"forced,omitempty"` + BaseRef *string `json:"base_ref,omitempty"` + Compare *string `json:"compare,omitempty"` + Repo *PushEventRepository `json:"repository,omitempty"` + HeadCommit *PushEventCommit `json:"head_commit,omitempty"` + Pusher *User `json:"pusher,omitempty"` + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +func (p PushEvent) String() string { + return Stringify(p) +} + +// PushEventCommit represents a git commit in a GitHub PushEvent. +type PushEventCommit struct { + Message *string `json:"message,omitempty"` + Author *CommitAuthor `json:"author,omitempty"` + URL *string `json:"url,omitempty"` + Distinct *bool `json:"distinct,omitempty"` + + // The following fields are only populated by Events API. + SHA *string `json:"sha,omitempty"` + + // The following fields are only populated by Webhook events. + ID *string `json:"id,omitempty"` + TreeID *string `json:"tree_id,omitempty"` + Timestamp *Timestamp `json:"timestamp,omitempty"` + Committer *CommitAuthor `json:"committer,omitempty"` + Added []string `json:"added,omitempty"` + Removed []string `json:"removed,omitempty"` + Modified []string `json:"modified,omitempty"` +} + +func (p PushEventCommit) String() string { + return Stringify(p) +} + +// PushEventRepository represents the repo object in a PushEvent payload. +type PushEventRepository struct { + ID *int64 `json:"id,omitempty"` + Name *string `json:"name,omitempty"` + FullName *string `json:"full_name,omitempty"` + Owner *PushEventRepoOwner `json:"owner,omitempty"` + Private *bool `json:"private,omitempty"` + Description *string `json:"description,omitempty"` + Fork *bool `json:"fork,omitempty"` + CreatedAt *Timestamp `json:"created_at,omitempty"` + PushedAt *Timestamp `json:"pushed_at,omitempty"` + UpdatedAt *Timestamp `json:"updated_at,omitempty"` + Homepage *string `json:"homepage,omitempty"` + Size *int `json:"size,omitempty"` + StargazersCount *int `json:"stargazers_count,omitempty"` + WatchersCount *int `json:"watchers_count,omitempty"` + Language *string `json:"language,omitempty"` + HasIssues *bool `json:"has_issues,omitempty"` + HasDownloads *bool `json:"has_downloads,omitempty"` + HasWiki *bool `json:"has_wiki,omitempty"` + HasPages *bool `json:"has_pages,omitempty"` + ForksCount *int `json:"forks_count,omitempty"` + OpenIssuesCount *int `json:"open_issues_count,omitempty"` + DefaultBranch *string `json:"default_branch,omitempty"` + MasterBranch *string `json:"master_branch,omitempty"` + Organization *string `json:"organization,omitempty"` + URL *string `json:"url,omitempty"` + ArchiveURL *string `json:"archive_url,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` + StatusesURL *string `json:"statuses_url,omitempty"` + GitURL *string `json:"git_url,omitempty"` + SSHURL *string `json:"ssh_url,omitempty"` + CloneURL *string `json:"clone_url,omitempty"` + SVNURL *string `json:"svn_url,omitempty"` +} + +// PushEventRepoOwner is a basic representation of user/org in a PushEvent payload. +type PushEventRepoOwner struct { + Name *string `json:"name,omitempty"` + Email *string `json:"email,omitempty"` +} + +// ReleaseEvent is triggered when a release is published. +// The Webhook event name is "release". +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#releaseevent +type ReleaseEvent struct { + // Action is the action that was performed. Possible value is: "published". + Action *string `json:"action,omitempty"` + Release *RepositoryRelease `json:"release,omitempty"` + + // The following fields are only populated by Webhook events. + Repo *Repository `json:"repository,omitempty"` + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// RepositoryEvent is triggered when a repository is created. +// The Webhook event name is "repository". +// +// Events of this type are not visible in timelines, they are only used to +// trigger organization webhooks. +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#repositoryevent +type RepositoryEvent struct { + // Action is the action that was performed. Possible values are: "created", "deleted", + // "publicized", "privatized". + Action *string `json:"action,omitempty"` + Repo *Repository `json:"repository,omitempty"` + + // The following fields are only populated by Webhook events. + Org *Organization `json:"organization,omitempty"` + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// StatusEvent is triggered when the status of a Git commit changes. +// The Webhook event name is "status". +// +// Events of this type are not visible in timelines, they are only used to +// trigger hooks. +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#statusevent +type StatusEvent struct { + SHA *string `json:"sha,omitempty"` + // State is the new state. Possible values are: "pending", "success", "failure", "error". + State *string `json:"state,omitempty"` + Description *string `json:"description,omitempty"` + TargetURL *string `json:"target_url,omitempty"` + Branches []*Branch `json:"branches,omitempty"` + + // The following fields are only populated by Webhook events. + ID *int64 `json:"id,omitempty"` + Name *string `json:"name,omitempty"` + Context *string `json:"context,omitempty"` + Commit *RepositoryCommit `json:"commit,omitempty"` + CreatedAt *Timestamp `json:"created_at,omitempty"` + UpdatedAt *Timestamp `json:"updated_at,omitempty"` + Repo *Repository `json:"repository,omitempty"` + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// TeamEvent is triggered when an organization's team is created, modified or deleted. +// The Webhook event name is "team". +// +// Events of this type are not visible in timelines. These events are only used +// to trigger hooks. +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#teamevent +type TeamEvent struct { + Action *string `json:"action,omitempty"` + Team *Team `json:"team,omitempty"` + Changes *TeamChange `json:"changes,omitempty"` + Repo *Repository `json:"repository,omitempty"` + + // The following fields are only populated by Webhook events. + Org *Organization `json:"organization,omitempty"` + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// TeamAddEvent is triggered when a repository is added to a team. +// The Webhook event name is "team_add". +// +// Events of this type are not visible in timelines. These events are only used +// to trigger hooks. +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#teamaddevent +type TeamAddEvent struct { + Team *Team `json:"team,omitempty"` + Repo *Repository `json:"repository,omitempty"` + + // The following fields are only populated by Webhook events. + Org *Organization `json:"organization,omitempty"` + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} + +// WatchEvent is related to starring a repository, not watching. See this API +// blog post for an explanation: https://developer.github.com/changes/2012-09-05-watcher-api/ +// +// The event’s actor is the user who starred a repository, and the event’s +// repository is the repository that was starred. +// +// GitHub API docs: https://developer.github.com/v3/activity/events/types/#watchevent +type WatchEvent struct { + // Action is the action that was performed. Possible value is: "started". + Action *string `json:"action,omitempty"` + + // The following fields are only populated by Webhook events. + Repo *Repository `json:"repository,omitempty"` + Sender *User `json:"sender,omitempty"` + Installation *Installation `json:"installation,omitempty"` +} diff --git a/vendor/github.com/google/go-github/github/gen-accessors.go b/vendor/github.com/google/go-github/github/gen-accessors.go new file mode 100644 index 00000000..fe92206f --- /dev/null +++ b/vendor/github.com/google/go-github/github/gen-accessors.go @@ -0,0 +1,332 @@ +// Copyright 2017 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// gen-accessors generates accessor methods for structs with pointer fields. +// +// It is meant to be used by the go-github authors in conjunction with the +// go generate tool before sending a commit to GitHub. +package main + +import ( + "bytes" + "flag" + "fmt" + "go/ast" + "go/format" + "go/parser" + "go/token" + "io/ioutil" + "log" + "os" + "sort" + "strings" + "text/template" +) + +const ( + fileSuffix = "-accessors.go" +) + +var ( + verbose = flag.Bool("v", false, "Print verbose log messages") + + sourceTmpl = template.Must(template.New("source").Parse(source)) + + // blacklistStructMethod lists "struct.method" combos to skip. + blacklistStructMethod = map[string]bool{ + "RepositoryContent.GetContent": true, + "Client.GetBaseURL": true, + "Client.GetUploadURL": true, + "ErrorResponse.GetResponse": true, + "RateLimitError.GetResponse": true, + "AbuseRateLimitError.GetResponse": true, + } + // blacklistStruct lists structs to skip. + blacklistStruct = map[string]bool{ + "Client": true, + } +) + +func logf(fmt string, args ...interface{}) { + if *verbose { + log.Printf(fmt, args...) + } +} + +func main() { + flag.Parse() + fset := token.NewFileSet() + + pkgs, err := parser.ParseDir(fset, ".", sourceFilter, 0) + if err != nil { + log.Fatal(err) + return + } + + for pkgName, pkg := range pkgs { + t := &templateData{ + filename: pkgName + fileSuffix, + Year: 2017, + Package: pkgName, + Imports: map[string]string{}, + } + for filename, f := range pkg.Files { + logf("Processing %v...", filename) + if err := t.processAST(f); err != nil { + log.Fatal(err) + } + } + if err := t.dump(); err != nil { + log.Fatal(err) + } + } + logf("Done.") +} + +func (t *templateData) processAST(f *ast.File) error { + for _, decl := range f.Decls { + gd, ok := decl.(*ast.GenDecl) + if !ok { + continue + } + for _, spec := range gd.Specs { + ts, ok := spec.(*ast.TypeSpec) + if !ok { + continue + } + // Skip unexported identifiers. + if !ts.Name.IsExported() { + logf("Struct %v is unexported; skipping.", ts.Name) + continue + } + // Check if the struct is blacklisted. + if blacklistStruct[ts.Name.Name] { + logf("Struct %v is blacklisted; skipping.", ts.Name) + continue + } + st, ok := ts.Type.(*ast.StructType) + if !ok { + continue + } + for _, field := range st.Fields.List { + se, ok := field.Type.(*ast.StarExpr) + if len(field.Names) == 0 || !ok { + continue + } + + fieldName := field.Names[0] + // Skip unexported identifiers. + if !fieldName.IsExported() { + logf("Field %v is unexported; skipping.", fieldName) + continue + } + // Check if "struct.method" is blacklisted. + if key := fmt.Sprintf("%v.Get%v", ts.Name, fieldName); blacklistStructMethod[key] { + logf("Method %v is blacklisted; skipping.", key) + continue + } + + switch x := se.X.(type) { + case *ast.ArrayType: + t.addArrayType(x, ts.Name.String(), fieldName.String()) + case *ast.Ident: + t.addIdent(x, ts.Name.String(), fieldName.String()) + case *ast.MapType: + t.addMapType(x, ts.Name.String(), fieldName.String()) + case *ast.SelectorExpr: + t.addSelectorExpr(x, ts.Name.String(), fieldName.String()) + default: + logf("processAST: type %q, field %q, unknown %T: %+v", ts.Name, fieldName, x, x) + } + } + } + } + return nil +} + +func sourceFilter(fi os.FileInfo) bool { + return !strings.HasSuffix(fi.Name(), "_test.go") && !strings.HasSuffix(fi.Name(), fileSuffix) +} + +func (t *templateData) dump() error { + if len(t.Getters) == 0 { + logf("No getters for %v; skipping.", t.filename) + return nil + } + + // Sort getters by ReceiverType.FieldName. + sort.Sort(byName(t.Getters)) + + var buf bytes.Buffer + if err := sourceTmpl.Execute(&buf, t); err != nil { + return err + } + clean, err := format.Source(buf.Bytes()) + if err != nil { + return err + } + + logf("Writing %v...", t.filename) + return ioutil.WriteFile(t.filename, clean, 0644) +} + +func newGetter(receiverType, fieldName, fieldType, zeroValue string, namedStruct bool) *getter { + return &getter{ + sortVal: strings.ToLower(receiverType) + "." + strings.ToLower(fieldName), + ReceiverVar: strings.ToLower(receiverType[:1]), + ReceiverType: receiverType, + FieldName: fieldName, + FieldType: fieldType, + ZeroValue: zeroValue, + NamedStruct: namedStruct, + } +} + +func (t *templateData) addArrayType(x *ast.ArrayType, receiverType, fieldName string) { + var eltType string + switch elt := x.Elt.(type) { + case *ast.Ident: + eltType = elt.String() + default: + logf("addArrayType: type %q, field %q: unknown elt type: %T %+v; skipping.", receiverType, fieldName, elt, elt) + return + } + + t.Getters = append(t.Getters, newGetter(receiverType, fieldName, "[]"+eltType, "nil", false)) +} + +func (t *templateData) addIdent(x *ast.Ident, receiverType, fieldName string) { + var zeroValue string + var namedStruct = false + switch x.String() { + case "int", "int64": + zeroValue = "0" + case "string": + zeroValue = `""` + case "bool": + zeroValue = "false" + case "Timestamp": + zeroValue = "Timestamp{}" + default: + zeroValue = "nil" + namedStruct = true + } + + t.Getters = append(t.Getters, newGetter(receiverType, fieldName, x.String(), zeroValue, namedStruct)) +} + +func (t *templateData) addMapType(x *ast.MapType, receiverType, fieldName string) { + var keyType string + switch key := x.Key.(type) { + case *ast.Ident: + keyType = key.String() + default: + logf("addMapType: type %q, field %q: unknown key type: %T %+v; skipping.", receiverType, fieldName, key, key) + return + } + + var valueType string + switch value := x.Value.(type) { + case *ast.Ident: + valueType = value.String() + default: + logf("addMapType: type %q, field %q: unknown value type: %T %+v; skipping.", receiverType, fieldName, value, value) + return + } + + fieldType := fmt.Sprintf("map[%v]%v", keyType, valueType) + zeroValue := fmt.Sprintf("map[%v]%v{}", keyType, valueType) + t.Getters = append(t.Getters, newGetter(receiverType, fieldName, fieldType, zeroValue, false)) +} + +func (t *templateData) addSelectorExpr(x *ast.SelectorExpr, receiverType, fieldName string) { + if strings.ToLower(fieldName[:1]) == fieldName[:1] { // Non-exported field. + return + } + + var xX string + if xx, ok := x.X.(*ast.Ident); ok { + xX = xx.String() + } + + switch xX { + case "time", "json": + if xX == "json" { + t.Imports["encoding/json"] = "encoding/json" + } else { + t.Imports[xX] = xX + } + fieldType := fmt.Sprintf("%v.%v", xX, x.Sel.Name) + zeroValue := fmt.Sprintf("%v.%v{}", xX, x.Sel.Name) + if xX == "time" && x.Sel.Name == "Duration" { + zeroValue = "0" + } + t.Getters = append(t.Getters, newGetter(receiverType, fieldName, fieldType, zeroValue, false)) + default: + logf("addSelectorExpr: xX %q, type %q, field %q: unknown x=%+v; skipping.", xX, receiverType, fieldName, x) + } +} + +type templateData struct { + filename string + Year int + Package string + Imports map[string]string + Getters []*getter +} + +type getter struct { + sortVal string // Lower-case version of "ReceiverType.FieldName". + ReceiverVar string // The one-letter variable name to match the ReceiverType. + ReceiverType string + FieldName string + FieldType string + ZeroValue string + NamedStruct bool // Getter for named struct. +} + +type byName []*getter + +func (b byName) Len() int { return len(b) } +func (b byName) Less(i, j int) bool { return b[i].sortVal < b[j].sortVal } +func (b byName) Swap(i, j int) { b[i], b[j] = b[j], b[i] } + +const source = `// Copyright {{.Year}} The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by gen-accessors; DO NOT EDIT. + +package {{.Package}} +{{with .Imports}} +import ( + {{- range . -}} + "{{.}}" + {{end -}} +) +{{end}} +{{range .Getters}} +{{if .NamedStruct}} +// Get{{.FieldName}} returns the {{.FieldName}} field. +func ({{.ReceiverVar}} *{{.ReceiverType}}) Get{{.FieldName}}() *{{.FieldType}} { + if {{.ReceiverVar}} == nil { + return {{.ZeroValue}} + } + return {{.ReceiverVar}}.{{.FieldName}} +} +{{else}} +// Get{{.FieldName}} returns the {{.FieldName}} field if it's non-nil, zero value otherwise. +func ({{.ReceiverVar}} *{{.ReceiverType}}) Get{{.FieldName}}() {{.FieldType}} { + if {{.ReceiverVar}} == nil || {{.ReceiverVar}}.{{.FieldName}} == nil { + return {{.ZeroValue}} + } + return *{{.ReceiverVar}}.{{.FieldName}} +} +{{end}} +{{end}} +` diff --git a/vendor/github.com/google/go-github/github/gists.go b/vendor/github.com/google/go-github/github/gists.go new file mode 100644 index 00000000..9108b642 --- /dev/null +++ b/vendor/github.com/google/go-github/github/gists.go @@ -0,0 +1,388 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" + "time" +) + +// GistsService handles communication with the Gist related +// methods of the GitHub API. +// +// GitHub API docs: https://developer.github.com/v3/gists/ +type GistsService service + +// Gist represents a GitHub's gist. +type Gist struct { + ID *string `json:"id,omitempty"` + Description *string `json:"description,omitempty"` + Public *bool `json:"public,omitempty"` + Owner *User `json:"owner,omitempty"` + Files map[GistFilename]GistFile `json:"files,omitempty"` + Comments *int `json:"comments,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` + GitPullURL *string `json:"git_pull_url,omitempty"` + GitPushURL *string `json:"git_push_url,omitempty"` + CreatedAt *time.Time `json:"created_at,omitempty"` + UpdatedAt *time.Time `json:"updated_at,omitempty"` + NodeID *string `json:"node_id,omitempty"` +} + +func (g Gist) String() string { + return Stringify(g) +} + +// GistFilename represents filename on a gist. +type GistFilename string + +// GistFile represents a file on a gist. +type GistFile struct { + Size *int `json:"size,omitempty"` + Filename *string `json:"filename,omitempty"` + Language *string `json:"language,omitempty"` + Type *string `json:"type,omitempty"` + RawURL *string `json:"raw_url,omitempty"` + Content *string `json:"content,omitempty"` +} + +func (g GistFile) String() string { + return Stringify(g) +} + +// GistCommit represents a commit on a gist. +type GistCommit struct { + URL *string `json:"url,omitempty"` + Version *string `json:"version,omitempty"` + User *User `json:"user,omitempty"` + ChangeStatus *CommitStats `json:"change_status,omitempty"` + CommittedAt *Timestamp `json:"committed_at,omitempty"` + NodeID *string `json:"node_id,omitempty"` +} + +func (gc GistCommit) String() string { + return Stringify(gc) +} + +// GistFork represents a fork of a gist. +type GistFork struct { + URL *string `json:"url,omitempty"` + User *User `json:"user,omitempty"` + ID *string `json:"id,omitempty"` + CreatedAt *Timestamp `json:"created_at,omitempty"` + UpdatedAt *Timestamp `json:"updated_at,omitempty"` + NodeID *string `json:"node_id,omitempty"` +} + +func (gf GistFork) String() string { + return Stringify(gf) +} + +// GistListOptions specifies the optional parameters to the +// GistsService.List, GistsService.ListAll, and GistsService.ListStarred methods. +type GistListOptions struct { + // Since filters Gists by time. + Since time.Time `url:"since,omitempty"` + + ListOptions +} + +// List gists for a user. Passing the empty string will list +// all public gists if called anonymously. However, if the call +// is authenticated, it will returns all gists for the authenticated +// user. +// +// GitHub API docs: https://developer.github.com/v3/gists/#list-gists +func (s *GistsService) List(ctx context.Context, user string, opt *GistListOptions) ([]*Gist, *Response, error) { + var u string + if user != "" { + u = fmt.Sprintf("users/%v/gists", user) + } else { + u = "gists" + } + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + var gists []*Gist + resp, err := s.client.Do(ctx, req, &gists) + if err != nil { + return nil, resp, err + } + + return gists, resp, nil +} + +// ListAll lists all public gists. +// +// GitHub API docs: https://developer.github.com/v3/gists/#list-gists +func (s *GistsService) ListAll(ctx context.Context, opt *GistListOptions) ([]*Gist, *Response, error) { + u, err := addOptions("gists/public", opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + var gists []*Gist + resp, err := s.client.Do(ctx, req, &gists) + if err != nil { + return nil, resp, err + } + + return gists, resp, nil +} + +// ListStarred lists starred gists of authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/gists/#list-gists +func (s *GistsService) ListStarred(ctx context.Context, opt *GistListOptions) ([]*Gist, *Response, error) { + u, err := addOptions("gists/starred", opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + var gists []*Gist + resp, err := s.client.Do(ctx, req, &gists) + if err != nil { + return nil, resp, err + } + + return gists, resp, nil +} + +// Get a single gist. +// +// GitHub API docs: https://developer.github.com/v3/gists/#get-a-single-gist +func (s *GistsService) Get(ctx context.Context, id string) (*Gist, *Response, error) { + u := fmt.Sprintf("gists/%v", id) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + gist := new(Gist) + resp, err := s.client.Do(ctx, req, gist) + if err != nil { + return nil, resp, err + } + + return gist, resp, nil +} + +// GetRevision gets a specific revision of a gist. +// +// GitHub API docs: https://developer.github.com/v3/gists/#get-a-specific-revision-of-a-gist +func (s *GistsService) GetRevision(ctx context.Context, id, sha string) (*Gist, *Response, error) { + u := fmt.Sprintf("gists/%v/%v", id, sha) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + gist := new(Gist) + resp, err := s.client.Do(ctx, req, gist) + if err != nil { + return nil, resp, err + } + + return gist, resp, nil +} + +// Create a gist for authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/gists/#create-a-gist +func (s *GistsService) Create(ctx context.Context, gist *Gist) (*Gist, *Response, error) { + u := "gists" + req, err := s.client.NewRequest("POST", u, gist) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + g := new(Gist) + resp, err := s.client.Do(ctx, req, g) + if err != nil { + return nil, resp, err + } + + return g, resp, nil +} + +// Edit a gist. +// +// GitHub API docs: https://developer.github.com/v3/gists/#edit-a-gist +func (s *GistsService) Edit(ctx context.Context, id string, gist *Gist) (*Gist, *Response, error) { + u := fmt.Sprintf("gists/%v", id) + req, err := s.client.NewRequest("PATCH", u, gist) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + g := new(Gist) + resp, err := s.client.Do(ctx, req, g) + if err != nil { + return nil, resp, err + } + + return g, resp, nil +} + +// ListCommits lists commits of a gist. +// +// GitHub API docs: https://developer.github.com/v3/gists/#list-gist-commits +func (s *GistsService) ListCommits(ctx context.Context, id string, opt *ListOptions) ([]*GistCommit, *Response, error) { + u := fmt.Sprintf("gists/%v/commits", id) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + var gistCommits []*GistCommit + resp, err := s.client.Do(ctx, req, &gistCommits) + if err != nil { + return nil, resp, err + } + + return gistCommits, resp, nil +} + +// Delete a gist. +// +// GitHub API docs: https://developer.github.com/v3/gists/#delete-a-gist +func (s *GistsService) Delete(ctx context.Context, id string) (*Response, error) { + u := fmt.Sprintf("gists/%v", id) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + return s.client.Do(ctx, req, nil) +} + +// Star a gist on behalf of authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/gists/#star-a-gist +func (s *GistsService) Star(ctx context.Context, id string) (*Response, error) { + u := fmt.Sprintf("gists/%v/star", id) + req, err := s.client.NewRequest("PUT", u, nil) + if err != nil { + return nil, err + } + return s.client.Do(ctx, req, nil) +} + +// Unstar a gist on a behalf of authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/gists/#unstar-a-gist +func (s *GistsService) Unstar(ctx context.Context, id string) (*Response, error) { + u := fmt.Sprintf("gists/%v/star", id) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + return s.client.Do(ctx, req, nil) +} + +// IsStarred checks if a gist is starred by authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/gists/#check-if-a-gist-is-starred +func (s *GistsService) IsStarred(ctx context.Context, id string) (bool, *Response, error) { + u := fmt.Sprintf("gists/%v/star", id) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return false, nil, err + } + resp, err := s.client.Do(ctx, req, nil) + starred, err := parseBoolResponse(err) + return starred, resp, err +} + +// Fork a gist. +// +// GitHub API docs: https://developer.github.com/v3/gists/#fork-a-gist +func (s *GistsService) Fork(ctx context.Context, id string) (*Gist, *Response, error) { + u := fmt.Sprintf("gists/%v/forks", id) + req, err := s.client.NewRequest("POST", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + g := new(Gist) + resp, err := s.client.Do(ctx, req, g) + if err != nil { + return nil, resp, err + } + + return g, resp, nil +} + +// ListForks lists forks of a gist. +// +// GitHub API docs: https://developer.github.com/v3/gists/#list-gist-forks +func (s *GistsService) ListForks(ctx context.Context, id string) ([]*GistFork, *Response, error) { + u := fmt.Sprintf("gists/%v/forks", id) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + var gistForks []*GistFork + resp, err := s.client.Do(ctx, req, &gistForks) + if err != nil { + return nil, resp, err + } + + return gistForks, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/gists_comments.go b/vendor/github.com/google/go-github/github/gists_comments.go new file mode 100644 index 00000000..d5322e3d --- /dev/null +++ b/vendor/github.com/google/go-github/github/gists_comments.go @@ -0,0 +1,119 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" + "time" +) + +// GistComment represents a Gist comment. +type GistComment struct { + ID *int64 `json:"id,omitempty"` + URL *string `json:"url,omitempty"` + Body *string `json:"body,omitempty"` + User *User `json:"user,omitempty"` + CreatedAt *time.Time `json:"created_at,omitempty"` +} + +func (g GistComment) String() string { + return Stringify(g) +} + +// ListComments lists all comments for a gist. +// +// GitHub API docs: https://developer.github.com/v3/gists/comments/#list-comments-on-a-gist +func (s *GistsService) ListComments(ctx context.Context, gistID string, opt *ListOptions) ([]*GistComment, *Response, error) { + u := fmt.Sprintf("gists/%v/comments", gistID) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var comments []*GistComment + resp, err := s.client.Do(ctx, req, &comments) + if err != nil { + return nil, resp, err + } + + return comments, resp, nil +} + +// GetComment retrieves a single comment from a gist. +// +// GitHub API docs: https://developer.github.com/v3/gists/comments/#get-a-single-comment +func (s *GistsService) GetComment(ctx context.Context, gistID string, commentID int64) (*GistComment, *Response, error) { + u := fmt.Sprintf("gists/%v/comments/%v", gistID, commentID) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + c := new(GistComment) + resp, err := s.client.Do(ctx, req, c) + if err != nil { + return nil, resp, err + } + + return c, resp, nil +} + +// CreateComment creates a comment for a gist. +// +// GitHub API docs: https://developer.github.com/v3/gists/comments/#create-a-comment +func (s *GistsService) CreateComment(ctx context.Context, gistID string, comment *GistComment) (*GistComment, *Response, error) { + u := fmt.Sprintf("gists/%v/comments", gistID) + req, err := s.client.NewRequest("POST", u, comment) + if err != nil { + return nil, nil, err + } + + c := new(GistComment) + resp, err := s.client.Do(ctx, req, c) + if err != nil { + return nil, resp, err + } + + return c, resp, nil +} + +// EditComment edits an existing gist comment. +// +// GitHub API docs: https://developer.github.com/v3/gists/comments/#edit-a-comment +func (s *GistsService) EditComment(ctx context.Context, gistID string, commentID int64, comment *GistComment) (*GistComment, *Response, error) { + u := fmt.Sprintf("gists/%v/comments/%v", gistID, commentID) + req, err := s.client.NewRequest("PATCH", u, comment) + if err != nil { + return nil, nil, err + } + + c := new(GistComment) + resp, err := s.client.Do(ctx, req, c) + if err != nil { + return nil, resp, err + } + + return c, resp, nil +} + +// DeleteComment deletes a gist comment. +// +// GitHub API docs: https://developer.github.com/v3/gists/comments/#delete-a-comment +func (s *GistsService) DeleteComment(ctx context.Context, gistID string, commentID int64) (*Response, error) { + u := fmt.Sprintf("gists/%v/comments/%v", gistID, commentID) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/git.go b/vendor/github.com/google/go-github/github/git.go new file mode 100644 index 00000000..1ce47437 --- /dev/null +++ b/vendor/github.com/google/go-github/github/git.go @@ -0,0 +1,12 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +// GitService handles communication with the git data related +// methods of the GitHub API. +// +// GitHub API docs: https://developer.github.com/v3/git/ +type GitService service diff --git a/vendor/github.com/google/go-github/github/git_blobs.go b/vendor/github.com/google/go-github/github/git_blobs.go new file mode 100644 index 00000000..5290c553 --- /dev/null +++ b/vendor/github.com/google/go-github/github/git_blobs.go @@ -0,0 +1,75 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "bytes" + "context" + "fmt" +) + +// Blob represents a blob object. +type Blob struct { + Content *string `json:"content,omitempty"` + Encoding *string `json:"encoding,omitempty"` + SHA *string `json:"sha,omitempty"` + Size *int `json:"size,omitempty"` + URL *string `json:"url,omitempty"` + NodeID *string `json:"node_id,omitempty"` +} + +// GetBlob fetches a blob from a repo given a SHA. +// +// GitHub API docs: https://developer.github.com/v3/git/blobs/#get-a-blob +func (s *GitService) GetBlob(ctx context.Context, owner string, repo string, sha string) (*Blob, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/git/blobs/%v", owner, repo, sha) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + blob := new(Blob) + resp, err := s.client.Do(ctx, req, blob) + return blob, resp, err +} + +// GetBlobRaw fetches a blob's contents from a repo. +// Unlike GetBlob, it returns the raw bytes rather than the base64-encoded data. +// +// GitHub API docs: https://developer.github.com/v3/git/blobs/#get-a-blob +func (s *GitService) GetBlobRaw(ctx context.Context, owner, repo, sha string) ([]byte, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/git/blobs/%v", owner, repo, sha) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + req.Header.Set("Accept", "application/vnd.github.v3.raw") + + var buf bytes.Buffer + resp, err := s.client.Do(ctx, req, &buf) + return buf.Bytes(), resp, err +} + +// CreateBlob creates a blob object. +// +// GitHub API docs: https://developer.github.com/v3/git/blobs/#create-a-blob +func (s *GitService) CreateBlob(ctx context.Context, owner string, repo string, blob *Blob) (*Blob, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/git/blobs", owner, repo) + req, err := s.client.NewRequest("POST", u, blob) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + t := new(Blob) + resp, err := s.client.Do(ctx, req, t) + return t, resp, err +} diff --git a/vendor/github.com/google/go-github/github/git_commits.go b/vendor/github.com/google/go-github/github/git_commits.go new file mode 100644 index 00000000..29882569 --- /dev/null +++ b/vendor/github.com/google/go-github/github/git_commits.go @@ -0,0 +1,139 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" + "strings" + "time" +) + +// SignatureVerification represents GPG signature verification. +type SignatureVerification struct { + Verified *bool `json:"verified,omitempty"` + Reason *string `json:"reason,omitempty"` + Signature *string `json:"signature,omitempty"` + Payload *string `json:"payload,omitempty"` +} + +// Commit represents a GitHub commit. +type Commit struct { + SHA *string `json:"sha,omitempty"` + Author *CommitAuthor `json:"author,omitempty"` + Committer *CommitAuthor `json:"committer,omitempty"` + Message *string `json:"message,omitempty"` + Tree *Tree `json:"tree,omitempty"` + Parents []Commit `json:"parents,omitempty"` + Stats *CommitStats `json:"stats,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` + URL *string `json:"url,omitempty"` + Verification *SignatureVerification `json:"verification,omitempty"` + NodeID *string `json:"node_id,omitempty"` + + // CommentCount is the number of GitHub comments on the commit. This + // is only populated for requests that fetch GitHub data like + // Pulls.ListCommits, Repositories.ListCommits, etc. + CommentCount *int `json:"comment_count,omitempty"` +} + +func (c Commit) String() string { + return Stringify(c) +} + +// CommitAuthor represents the author or committer of a commit. The commit +// author may not correspond to a GitHub User. +type CommitAuthor struct { + Date *time.Time `json:"date,omitempty"` + Name *string `json:"name,omitempty"` + Email *string `json:"email,omitempty"` + + // The following fields are only populated by Webhook events. + Login *string `json:"username,omitempty"` // Renamed for go-github consistency. +} + +func (c CommitAuthor) String() string { + return Stringify(c) +} + +// GetCommit fetchs the Commit object for a given SHA. +// +// GitHub API docs: https://developer.github.com/v3/git/commits/#get-a-commit +func (s *GitService) GetCommit(ctx context.Context, owner string, repo string, sha string) (*Commit, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/git/commits/%v", owner, repo, sha) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeGitSigningPreview, mediaTypeGraphQLNodeIDPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + c := new(Commit) + resp, err := s.client.Do(ctx, req, c) + if err != nil { + return nil, resp, err + } + + return c, resp, nil +} + +// createCommit represents the body of a CreateCommit request. +type createCommit struct { + Author *CommitAuthor `json:"author,omitempty"` + Committer *CommitAuthor `json:"committer,omitempty"` + Message *string `json:"message,omitempty"` + Tree *string `json:"tree,omitempty"` + Parents []string `json:"parents,omitempty"` +} + +// CreateCommit creates a new commit in a repository. +// commit must not be nil. +// +// The commit.Committer is optional and will be filled with the commit.Author +// data if omitted. If the commit.Author is omitted, it will be filled in with +// the authenticated user’s information and the current date. +// +// GitHub API docs: https://developer.github.com/v3/git/commits/#create-a-commit +func (s *GitService) CreateCommit(ctx context.Context, owner string, repo string, commit *Commit) (*Commit, *Response, error) { + if commit == nil { + return nil, nil, fmt.Errorf("commit must be provided") + } + + u := fmt.Sprintf("repos/%v/%v/git/commits", owner, repo) + + parents := make([]string, len(commit.Parents)) + for i, parent := range commit.Parents { + parents[i] = *parent.SHA + } + + body := &createCommit{ + Author: commit.Author, + Committer: commit.Committer, + Message: commit.Message, + Parents: parents, + } + if commit.Tree != nil { + body.Tree = commit.Tree.SHA + } + + req, err := s.client.NewRequest("POST", u, body) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + c := new(Commit) + resp, err := s.client.Do(ctx, req, c) + if err != nil { + return nil, resp, err + } + + return c, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/git_refs.go b/vendor/github.com/google/go-github/github/git_refs.go new file mode 100644 index 00000000..0947d866 --- /dev/null +++ b/vendor/github.com/google/go-github/github/git_refs.go @@ -0,0 +1,233 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "strings" +) + +// Reference represents a GitHub reference. +type Reference struct { + Ref *string `json:"ref"` + URL *string `json:"url"` + Object *GitObject `json:"object"` + NodeID *string `json:"node_id,omitempty"` +} + +func (r Reference) String() string { + return Stringify(r) +} + +// GitObject represents a Git object. +type GitObject struct { + Type *string `json:"type"` + SHA *string `json:"sha"` + URL *string `json:"url"` +} + +func (o GitObject) String() string { + return Stringify(o) +} + +// createRefRequest represents the payload for creating a reference. +type createRefRequest struct { + Ref *string `json:"ref"` + SHA *string `json:"sha"` +} + +// updateRefRequest represents the payload for updating a reference. +type updateRefRequest struct { + SHA *string `json:"sha"` + Force *bool `json:"force"` +} + +// GetRef fetches a single Reference object for a given Git ref. +// If there is no exact match, GetRef will return an error. +// +// Note: The GitHub API can return multiple matches. +// If you wish to use this functionality please use the GetRefs() method. +// +// GitHub API docs: https://developer.github.com/v3/git/refs/#get-a-reference +func (s *GitService) GetRef(ctx context.Context, owner string, repo string, ref string) (*Reference, *Response, error) { + ref = strings.TrimPrefix(ref, "refs/") + u := fmt.Sprintf("repos/%v/%v/git/refs/%v", owner, repo, ref) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + r := new(Reference) + resp, err := s.client.Do(ctx, req, r) + if _, ok := err.(*json.UnmarshalTypeError); ok { + // Multiple refs, means there wasn't an exact match. + return nil, resp, errors.New("no exact match found for this ref") + } else if err != nil { + return nil, resp, err + } + + return r, resp, nil +} + +// GetRefs fetches a slice of Reference objects for a given Git ref. +// If there is an exact match, only that ref is returned. +// If there is no exact match, GitHub returns all refs that start with ref. +// If returned error is nil, there will be at least 1 ref returned. +// For example: +// +// "heads/featureA" -> ["refs/heads/featureA"] // Exact match, single ref is returned. +// "heads/feature" -> ["refs/heads/featureA", "refs/heads/featureB"] // All refs that start with ref. +// "heads/notexist" -> [] // Returns an error. +// +// GitHub API docs: https://developer.github.com/v3/git/refs/#get-a-reference +func (s *GitService) GetRefs(ctx context.Context, owner string, repo string, ref string) ([]*Reference, *Response, error) { + ref = strings.TrimPrefix(ref, "refs/") + u := fmt.Sprintf("repos/%v/%v/git/refs/%v", owner, repo, ref) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + var rawJSON json.RawMessage + resp, err := s.client.Do(ctx, req, &rawJSON) + if err != nil { + return nil, resp, err + } + + // Prioritize the most common case: a single returned ref. + r := new(Reference) + singleUnmarshalError := json.Unmarshal(rawJSON, r) + if singleUnmarshalError == nil { + return []*Reference{r}, resp, nil + } + + // Attempt to unmarshal multiple refs. + var rs []*Reference + multipleUnmarshalError := json.Unmarshal(rawJSON, &rs) + if multipleUnmarshalError == nil { + if len(rs) == 0 { + return nil, resp, fmt.Errorf("unexpected response from GitHub API: an array of refs with length 0") + } + return rs, resp, nil + } + + return nil, resp, fmt.Errorf("unmarshalling failed for both single and multiple refs: %s and %s", singleUnmarshalError, multipleUnmarshalError) +} + +// ReferenceListOptions specifies optional parameters to the +// GitService.ListRefs method. +type ReferenceListOptions struct { + Type string `url:"-"` + + ListOptions +} + +// ListRefs lists all refs in a repository. +// +// GitHub API docs: https://developer.github.com/v3/git/refs/#get-all-references +func (s *GitService) ListRefs(ctx context.Context, owner, repo string, opt *ReferenceListOptions) ([]*Reference, *Response, error) { + var u string + if opt != nil && opt.Type != "" { + u = fmt.Sprintf("repos/%v/%v/git/refs/%v", owner, repo, opt.Type) + } else { + u = fmt.Sprintf("repos/%v/%v/git/refs", owner, repo) + } + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + var rs []*Reference + resp, err := s.client.Do(ctx, req, &rs) + if err != nil { + return nil, resp, err + } + + return rs, resp, nil +} + +// CreateRef creates a new ref in a repository. +// +// GitHub API docs: https://developer.github.com/v3/git/refs/#create-a-reference +func (s *GitService) CreateRef(ctx context.Context, owner string, repo string, ref *Reference) (*Reference, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/git/refs", owner, repo) + req, err := s.client.NewRequest("POST", u, &createRefRequest{ + // back-compat with previous behavior that didn't require 'refs/' prefix + Ref: String("refs/" + strings.TrimPrefix(*ref.Ref, "refs/")), + SHA: ref.Object.SHA, + }) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + r := new(Reference) + resp, err := s.client.Do(ctx, req, r) + if err != nil { + return nil, resp, err + } + + return r, resp, nil +} + +// UpdateRef updates an existing ref in a repository. +// +// GitHub API docs: https://developer.github.com/v3/git/refs/#update-a-reference +func (s *GitService) UpdateRef(ctx context.Context, owner string, repo string, ref *Reference, force bool) (*Reference, *Response, error) { + refPath := strings.TrimPrefix(*ref.Ref, "refs/") + u := fmt.Sprintf("repos/%v/%v/git/refs/%v", owner, repo, refPath) + req, err := s.client.NewRequest("PATCH", u, &updateRefRequest{ + SHA: ref.Object.SHA, + Force: &force, + }) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + r := new(Reference) + resp, err := s.client.Do(ctx, req, r) + if err != nil { + return nil, resp, err + } + + return r, resp, nil +} + +// DeleteRef deletes a ref from a repository. +// +// GitHub API docs: https://developer.github.com/v3/git/refs/#delete-a-reference +func (s *GitService) DeleteRef(ctx context.Context, owner string, repo string, ref string) (*Response, error) { + ref = strings.TrimPrefix(ref, "refs/") + u := fmt.Sprintf("repos/%v/%v/git/refs/%v", owner, repo, ref) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/git_tags.go b/vendor/github.com/google/go-github/github/git_tags.go new file mode 100644 index 00000000..f3822ffa --- /dev/null +++ b/vendor/github.com/google/go-github/github/git_tags.go @@ -0,0 +1,84 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" + "strings" +) + +// Tag represents a tag object. +type Tag struct { + Tag *string `json:"tag,omitempty"` + SHA *string `json:"sha,omitempty"` + URL *string `json:"url,omitempty"` + Message *string `json:"message,omitempty"` + Tagger *CommitAuthor `json:"tagger,omitempty"` + Object *GitObject `json:"object,omitempty"` + Verification *SignatureVerification `json:"verification,omitempty"` + NodeID *string `json:"node_id,omitempty"` +} + +// createTagRequest represents the body of a CreateTag request. This is mostly +// identical to Tag with the exception that the object SHA and Type are +// top-level fields, rather than being nested inside a JSON object. +type createTagRequest struct { + Tag *string `json:"tag,omitempty"` + Message *string `json:"message,omitempty"` + Object *string `json:"object,omitempty"` + Type *string `json:"type,omitempty"` + Tagger *CommitAuthor `json:"tagger,omitempty"` +} + +// GetTag fetchs a tag from a repo given a SHA. +// +// GitHub API docs: https://developer.github.com/v3/git/tags/#get-a-tag +func (s *GitService) GetTag(ctx context.Context, owner string, repo string, sha string) (*Tag, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/git/tags/%v", owner, repo, sha) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeGitSigningPreview, mediaTypeGraphQLNodeIDPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + tag := new(Tag) + resp, err := s.client.Do(ctx, req, tag) + return tag, resp, err +} + +// CreateTag creates a tag object. +// +// GitHub API docs: https://developer.github.com/v3/git/tags/#create-a-tag-object +func (s *GitService) CreateTag(ctx context.Context, owner string, repo string, tag *Tag) (*Tag, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/git/tags", owner, repo) + + // convert Tag into a createTagRequest + tagRequest := &createTagRequest{ + Tag: tag.Tag, + Message: tag.Message, + Tagger: tag.Tagger, + } + if tag.Object != nil { + tagRequest.Object = tag.Object.SHA + tagRequest.Type = tag.Object.Type + } + + req, err := s.client.NewRequest("POST", u, tagRequest) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + t := new(Tag) + resp, err := s.client.Do(ctx, req, t) + return t, resp, err +} diff --git a/vendor/github.com/google/go-github/github/git_trees.go b/vendor/github.com/google/go-github/github/git_trees.go new file mode 100644 index 00000000..4d6809a8 --- /dev/null +++ b/vendor/github.com/google/go-github/github/git_trees.go @@ -0,0 +1,93 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// Tree represents a GitHub tree. +type Tree struct { + SHA *string `json:"sha,omitempty"` + Entries []TreeEntry `json:"tree,omitempty"` +} + +func (t Tree) String() string { + return Stringify(t) +} + +// TreeEntry represents the contents of a tree structure. TreeEntry can +// represent either a blob, a commit (in the case of a submodule), or another +// tree. +type TreeEntry struct { + SHA *string `json:"sha,omitempty"` + Path *string `json:"path,omitempty"` + Mode *string `json:"mode,omitempty"` + Type *string `json:"type,omitempty"` + Size *int `json:"size,omitempty"` + Content *string `json:"content,omitempty"` + URL *string `json:"url,omitempty"` +} + +func (t TreeEntry) String() string { + return Stringify(t) +} + +// GetTree fetches the Tree object for a given sha hash from a repository. +// +// GitHub API docs: https://developer.github.com/v3/git/trees/#get-a-tree +func (s *GitService) GetTree(ctx context.Context, owner string, repo string, sha string, recursive bool) (*Tree, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/git/trees/%v", owner, repo, sha) + if recursive { + u += "?recursive=1" + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + t := new(Tree) + resp, err := s.client.Do(ctx, req, t) + if err != nil { + return nil, resp, err + } + + return t, resp, nil +} + +// createTree represents the body of a CreateTree request. +type createTree struct { + BaseTree string `json:"base_tree,omitempty"` + Entries []TreeEntry `json:"tree"` +} + +// CreateTree creates a new tree in a repository. If both a tree and a nested +// path modifying that tree are specified, it will overwrite the contents of +// that tree with the new path contents and write a new tree out. +// +// GitHub API docs: https://developer.github.com/v3/git/trees/#create-a-tree +func (s *GitService) CreateTree(ctx context.Context, owner string, repo string, baseTree string, entries []TreeEntry) (*Tree, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/git/trees", owner, repo) + + body := &createTree{ + BaseTree: baseTree, + Entries: entries, + } + req, err := s.client.NewRequest("POST", u, body) + if err != nil { + return nil, nil, err + } + + t := new(Tree) + resp, err := s.client.Do(ctx, req, t) + if err != nil { + return nil, resp, err + } + + return t, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/github-accessors.go b/vendor/github.com/google/go-github/github/github-accessors.go new file mode 100644 index 00000000..d9939c20 --- /dev/null +++ b/vendor/github.com/google/go-github/github/github-accessors.go @@ -0,0 +1,10989 @@ +// Copyright 2017 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by gen-accessors; DO NOT EDIT. + +package github + +import ( + "encoding/json" + "time" +) + +// GetRetryAfter returns the RetryAfter field if it's non-nil, zero value otherwise. +func (a *AbuseRateLimitError) GetRetryAfter() time.Duration { + if a == nil || a.RetryAfter == nil { + return 0 + } + return *a.RetryAfter +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (a *AdminEnforcement) GetURL() string { + if a == nil || a.URL == nil { + return "" + } + return *a.URL +} + +// GetComments returns the Comments field. +func (a *AdminStats) GetComments() *CommentStats { + if a == nil { + return nil + } + return a.Comments +} + +// GetGists returns the Gists field. +func (a *AdminStats) GetGists() *GistStats { + if a == nil { + return nil + } + return a.Gists +} + +// GetHooks returns the Hooks field. +func (a *AdminStats) GetHooks() *HookStats { + if a == nil { + return nil + } + return a.Hooks +} + +// GetIssues returns the Issues field. +func (a *AdminStats) GetIssues() *IssueStats { + if a == nil { + return nil + } + return a.Issues +} + +// GetMilestones returns the Milestones field. +func (a *AdminStats) GetMilestones() *MilestoneStats { + if a == nil { + return nil + } + return a.Milestones +} + +// GetOrgs returns the Orgs field. +func (a *AdminStats) GetOrgs() *OrgStats { + if a == nil { + return nil + } + return a.Orgs +} + +// GetPages returns the Pages field. +func (a *AdminStats) GetPages() *PageStats { + if a == nil { + return nil + } + return a.Pages +} + +// GetPulls returns the Pulls field. +func (a *AdminStats) GetPulls() *PullStats { + if a == nil { + return nil + } + return a.Pulls +} + +// GetRepos returns the Repos field. +func (a *AdminStats) GetRepos() *RepoStats { + if a == nil { + return nil + } + return a.Repos +} + +// GetUsers returns the Users field. +func (a *AdminStats) GetUsers() *UserStats { + if a == nil { + return nil + } + return a.Users +} + +// GetVerifiablePasswordAuthentication returns the VerifiablePasswordAuthentication field if it's non-nil, zero value otherwise. +func (a *APIMeta) GetVerifiablePasswordAuthentication() bool { + if a == nil || a.VerifiablePasswordAuthentication == nil { + return false + } + return *a.VerifiablePasswordAuthentication +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (a *App) GetCreatedAt() time.Time { + if a == nil || a.CreatedAt == nil { + return time.Time{} + } + return *a.CreatedAt +} + +// GetDescription returns the Description field if it's non-nil, zero value otherwise. +func (a *App) GetDescription() string { + if a == nil || a.Description == nil { + return "" + } + return *a.Description +} + +// GetExternalURL returns the ExternalURL field if it's non-nil, zero value otherwise. +func (a *App) GetExternalURL() string { + if a == nil || a.ExternalURL == nil { + return "" + } + return *a.ExternalURL +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (a *App) GetHTMLURL() string { + if a == nil || a.HTMLURL == nil { + return "" + } + return *a.HTMLURL +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (a *App) GetID() int64 { + if a == nil || a.ID == nil { + return 0 + } + return *a.ID +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (a *App) GetName() string { + if a == nil || a.Name == nil { + return "" + } + return *a.Name +} + +// GetOwner returns the Owner field. +func (a *App) GetOwner() *User { + if a == nil { + return nil + } + return a.Owner +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (a *App) GetUpdatedAt() time.Time { + if a == nil || a.UpdatedAt == nil { + return time.Time{} + } + return *a.UpdatedAt +} + +// GetApp returns the App field. +func (a *Authorization) GetApp() *AuthorizationApp { + if a == nil { + return nil + } + return a.App +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (a *Authorization) GetCreatedAt() Timestamp { + if a == nil || a.CreatedAt == nil { + return Timestamp{} + } + return *a.CreatedAt +} + +// GetFingerprint returns the Fingerprint field if it's non-nil, zero value otherwise. +func (a *Authorization) GetFingerprint() string { + if a == nil || a.Fingerprint == nil { + return "" + } + return *a.Fingerprint +} + +// GetHashedToken returns the HashedToken field if it's non-nil, zero value otherwise. +func (a *Authorization) GetHashedToken() string { + if a == nil || a.HashedToken == nil { + return "" + } + return *a.HashedToken +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (a *Authorization) GetID() int64 { + if a == nil || a.ID == nil { + return 0 + } + return *a.ID +} + +// GetNote returns the Note field if it's non-nil, zero value otherwise. +func (a *Authorization) GetNote() string { + if a == nil || a.Note == nil { + return "" + } + return *a.Note +} + +// GetNoteURL returns the NoteURL field if it's non-nil, zero value otherwise. +func (a *Authorization) GetNoteURL() string { + if a == nil || a.NoteURL == nil { + return "" + } + return *a.NoteURL +} + +// GetToken returns the Token field if it's non-nil, zero value otherwise. +func (a *Authorization) GetToken() string { + if a == nil || a.Token == nil { + return "" + } + return *a.Token +} + +// GetTokenLastEight returns the TokenLastEight field if it's non-nil, zero value otherwise. +func (a *Authorization) GetTokenLastEight() string { + if a == nil || a.TokenLastEight == nil { + return "" + } + return *a.TokenLastEight +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (a *Authorization) GetUpdatedAt() Timestamp { + if a == nil || a.UpdatedAt == nil { + return Timestamp{} + } + return *a.UpdatedAt +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (a *Authorization) GetURL() string { + if a == nil || a.URL == nil { + return "" + } + return *a.URL +} + +// GetUser returns the User field. +func (a *Authorization) GetUser() *User { + if a == nil { + return nil + } + return a.User +} + +// GetClientID returns the ClientID field if it's non-nil, zero value otherwise. +func (a *AuthorizationApp) GetClientID() string { + if a == nil || a.ClientID == nil { + return "" + } + return *a.ClientID +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (a *AuthorizationApp) GetName() string { + if a == nil || a.Name == nil { + return "" + } + return *a.Name +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (a *AuthorizationApp) GetURL() string { + if a == nil || a.URL == nil { + return "" + } + return *a.URL +} + +// GetClientID returns the ClientID field if it's non-nil, zero value otherwise. +func (a *AuthorizationRequest) GetClientID() string { + if a == nil || a.ClientID == nil { + return "" + } + return *a.ClientID +} + +// GetClientSecret returns the ClientSecret field if it's non-nil, zero value otherwise. +func (a *AuthorizationRequest) GetClientSecret() string { + if a == nil || a.ClientSecret == nil { + return "" + } + return *a.ClientSecret +} + +// GetFingerprint returns the Fingerprint field if it's non-nil, zero value otherwise. +func (a *AuthorizationRequest) GetFingerprint() string { + if a == nil || a.Fingerprint == nil { + return "" + } + return *a.Fingerprint +} + +// GetNote returns the Note field if it's non-nil, zero value otherwise. +func (a *AuthorizationRequest) GetNote() string { + if a == nil || a.Note == nil { + return "" + } + return *a.Note +} + +// GetNoteURL returns the NoteURL field if it's non-nil, zero value otherwise. +func (a *AuthorizationRequest) GetNoteURL() string { + if a == nil || a.NoteURL == nil { + return "" + } + return *a.NoteURL +} + +// GetFingerprint returns the Fingerprint field if it's non-nil, zero value otherwise. +func (a *AuthorizationUpdateRequest) GetFingerprint() string { + if a == nil || a.Fingerprint == nil { + return "" + } + return *a.Fingerprint +} + +// GetNote returns the Note field if it's non-nil, zero value otherwise. +func (a *AuthorizationUpdateRequest) GetNote() string { + if a == nil || a.Note == nil { + return "" + } + return *a.Note +} + +// GetNoteURL returns the NoteURL field if it's non-nil, zero value otherwise. +func (a *AuthorizationUpdateRequest) GetNoteURL() string { + if a == nil || a.NoteURL == nil { + return "" + } + return *a.NoteURL +} + +// GetContent returns the Content field if it's non-nil, zero value otherwise. +func (b *Blob) GetContent() string { + if b == nil || b.Content == nil { + return "" + } + return *b.Content +} + +// GetEncoding returns the Encoding field if it's non-nil, zero value otherwise. +func (b *Blob) GetEncoding() string { + if b == nil || b.Encoding == nil { + return "" + } + return *b.Encoding +} + +// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. +func (b *Blob) GetNodeID() string { + if b == nil || b.NodeID == nil { + return "" + } + return *b.NodeID +} + +// GetSHA returns the SHA field if it's non-nil, zero value otherwise. +func (b *Blob) GetSHA() string { + if b == nil || b.SHA == nil { + return "" + } + return *b.SHA +} + +// GetSize returns the Size field if it's non-nil, zero value otherwise. +func (b *Blob) GetSize() int { + if b == nil || b.Size == nil { + return 0 + } + return *b.Size +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (b *Blob) GetURL() string { + if b == nil || b.URL == nil { + return "" + } + return *b.URL +} + +// GetCommit returns the Commit field. +func (b *Branch) GetCommit() *RepositoryCommit { + if b == nil { + return nil + } + return b.Commit +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (b *Branch) GetName() string { + if b == nil || b.Name == nil { + return "" + } + return *b.Name +} + +// GetProtected returns the Protected field if it's non-nil, zero value otherwise. +func (b *Branch) GetProtected() bool { + if b == nil || b.Protected == nil { + return false + } + return *b.Protected +} + +// GetBody returns the Body field if it's non-nil, zero value otherwise. +func (c *CodeOfConduct) GetBody() string { + if c == nil || c.Body == nil { + return "" + } + return *c.Body +} + +// GetKey returns the Key field if it's non-nil, zero value otherwise. +func (c *CodeOfConduct) GetKey() string { + if c == nil || c.Key == nil { + return "" + } + return *c.Key +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (c *CodeOfConduct) GetName() string { + if c == nil || c.Name == nil { + return "" + } + return *c.Name +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (c *CodeOfConduct) GetURL() string { + if c == nil || c.URL == nil { + return "" + } + return *c.URL +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (c *CodeResult) GetHTMLURL() string { + if c == nil || c.HTMLURL == nil { + return "" + } + return *c.HTMLURL +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (c *CodeResult) GetName() string { + if c == nil || c.Name == nil { + return "" + } + return *c.Name +} + +// GetPath returns the Path field if it's non-nil, zero value otherwise. +func (c *CodeResult) GetPath() string { + if c == nil || c.Path == nil { + return "" + } + return *c.Path +} + +// GetRepository returns the Repository field. +func (c *CodeResult) GetRepository() *Repository { + if c == nil { + return nil + } + return c.Repository +} + +// GetSHA returns the SHA field if it's non-nil, zero value otherwise. +func (c *CodeResult) GetSHA() string { + if c == nil || c.SHA == nil { + return "" + } + return *c.SHA +} + +// GetIncompleteResults returns the IncompleteResults field if it's non-nil, zero value otherwise. +func (c *CodeSearchResult) GetIncompleteResults() bool { + if c == nil || c.IncompleteResults == nil { + return false + } + return *c.IncompleteResults +} + +// GetTotal returns the Total field if it's non-nil, zero value otherwise. +func (c *CodeSearchResult) GetTotal() int { + if c == nil || c.Total == nil { + return 0 + } + return *c.Total +} + +// GetCommitURL returns the CommitURL field if it's non-nil, zero value otherwise. +func (c *CombinedStatus) GetCommitURL() string { + if c == nil || c.CommitURL == nil { + return "" + } + return *c.CommitURL +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (c *CombinedStatus) GetName() string { + if c == nil || c.Name == nil { + return "" + } + return *c.Name +} + +// GetRepositoryURL returns the RepositoryURL field if it's non-nil, zero value otherwise. +func (c *CombinedStatus) GetRepositoryURL() string { + if c == nil || c.RepositoryURL == nil { + return "" + } + return *c.RepositoryURL +} + +// GetSHA returns the SHA field if it's non-nil, zero value otherwise. +func (c *CombinedStatus) GetSHA() string { + if c == nil || c.SHA == nil { + return "" + } + return *c.SHA +} + +// GetState returns the State field if it's non-nil, zero value otherwise. +func (c *CombinedStatus) GetState() string { + if c == nil || c.State == nil { + return "" + } + return *c.State +} + +// GetTotalCount returns the TotalCount field if it's non-nil, zero value otherwise. +func (c *CombinedStatus) GetTotalCount() int { + if c == nil || c.TotalCount == nil { + return 0 + } + return *c.TotalCount +} + +// GetTotalCommitComments returns the TotalCommitComments field if it's non-nil, zero value otherwise. +func (c *CommentStats) GetTotalCommitComments() int { + if c == nil || c.TotalCommitComments == nil { + return 0 + } + return *c.TotalCommitComments +} + +// GetTotalGistComments returns the TotalGistComments field if it's non-nil, zero value otherwise. +func (c *CommentStats) GetTotalGistComments() int { + if c == nil || c.TotalGistComments == nil { + return 0 + } + return *c.TotalGistComments +} + +// GetTotalIssueComments returns the TotalIssueComments field if it's non-nil, zero value otherwise. +func (c *CommentStats) GetTotalIssueComments() int { + if c == nil || c.TotalIssueComments == nil { + return 0 + } + return *c.TotalIssueComments +} + +// GetTotalPullRequestComments returns the TotalPullRequestComments field if it's non-nil, zero value otherwise. +func (c *CommentStats) GetTotalPullRequestComments() int { + if c == nil || c.TotalPullRequestComments == nil { + return 0 + } + return *c.TotalPullRequestComments +} + +// GetAuthor returns the Author field. +func (c *Commit) GetAuthor() *CommitAuthor { + if c == nil { + return nil + } + return c.Author +} + +// GetCommentCount returns the CommentCount field if it's non-nil, zero value otherwise. +func (c *Commit) GetCommentCount() int { + if c == nil || c.CommentCount == nil { + return 0 + } + return *c.CommentCount +} + +// GetCommitter returns the Committer field. +func (c *Commit) GetCommitter() *CommitAuthor { + if c == nil { + return nil + } + return c.Committer +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (c *Commit) GetHTMLURL() string { + if c == nil || c.HTMLURL == nil { + return "" + } + return *c.HTMLURL +} + +// GetMessage returns the Message field if it's non-nil, zero value otherwise. +func (c *Commit) GetMessage() string { + if c == nil || c.Message == nil { + return "" + } + return *c.Message +} + +// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. +func (c *Commit) GetNodeID() string { + if c == nil || c.NodeID == nil { + return "" + } + return *c.NodeID +} + +// GetSHA returns the SHA field if it's non-nil, zero value otherwise. +func (c *Commit) GetSHA() string { + if c == nil || c.SHA == nil { + return "" + } + return *c.SHA +} + +// GetStats returns the Stats field. +func (c *Commit) GetStats() *CommitStats { + if c == nil { + return nil + } + return c.Stats +} + +// GetTree returns the Tree field. +func (c *Commit) GetTree() *Tree { + if c == nil { + return nil + } + return c.Tree +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (c *Commit) GetURL() string { + if c == nil || c.URL == nil { + return "" + } + return *c.URL +} + +// GetVerification returns the Verification field. +func (c *Commit) GetVerification() *SignatureVerification { + if c == nil { + return nil + } + return c.Verification +} + +// GetDate returns the Date field if it's non-nil, zero value otherwise. +func (c *CommitAuthor) GetDate() time.Time { + if c == nil || c.Date == nil { + return time.Time{} + } + return *c.Date +} + +// GetEmail returns the Email field if it's non-nil, zero value otherwise. +func (c *CommitAuthor) GetEmail() string { + if c == nil || c.Email == nil { + return "" + } + return *c.Email +} + +// GetLogin returns the Login field if it's non-nil, zero value otherwise. +func (c *CommitAuthor) GetLogin() string { + if c == nil || c.Login == nil { + return "" + } + return *c.Login +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (c *CommitAuthor) GetName() string { + if c == nil || c.Name == nil { + return "" + } + return *c.Name +} + +// GetAction returns the Action field if it's non-nil, zero value otherwise. +func (c *CommitCommentEvent) GetAction() string { + if c == nil || c.Action == nil { + return "" + } + return *c.Action +} + +// GetComment returns the Comment field. +func (c *CommitCommentEvent) GetComment() *RepositoryComment { + if c == nil { + return nil + } + return c.Comment +} + +// GetInstallation returns the Installation field. +func (c *CommitCommentEvent) GetInstallation() *Installation { + if c == nil { + return nil + } + return c.Installation +} + +// GetRepo returns the Repo field. +func (c *CommitCommentEvent) GetRepo() *Repository { + if c == nil { + return nil + } + return c.Repo +} + +// GetSender returns the Sender field. +func (c *CommitCommentEvent) GetSender() *User { + if c == nil { + return nil + } + return c.Sender +} + +// GetAdditions returns the Additions field if it's non-nil, zero value otherwise. +func (c *CommitFile) GetAdditions() int { + if c == nil || c.Additions == nil { + return 0 + } + return *c.Additions +} + +// GetBlobURL returns the BlobURL field if it's non-nil, zero value otherwise. +func (c *CommitFile) GetBlobURL() string { + if c == nil || c.BlobURL == nil { + return "" + } + return *c.BlobURL +} + +// GetChanges returns the Changes field if it's non-nil, zero value otherwise. +func (c *CommitFile) GetChanges() int { + if c == nil || c.Changes == nil { + return 0 + } + return *c.Changes +} + +// GetContentsURL returns the ContentsURL field if it's non-nil, zero value otherwise. +func (c *CommitFile) GetContentsURL() string { + if c == nil || c.ContentsURL == nil { + return "" + } + return *c.ContentsURL +} + +// GetDeletions returns the Deletions field if it's non-nil, zero value otherwise. +func (c *CommitFile) GetDeletions() int { + if c == nil || c.Deletions == nil { + return 0 + } + return *c.Deletions +} + +// GetFilename returns the Filename field if it's non-nil, zero value otherwise. +func (c *CommitFile) GetFilename() string { + if c == nil || c.Filename == nil { + return "" + } + return *c.Filename +} + +// GetPatch returns the Patch field if it's non-nil, zero value otherwise. +func (c *CommitFile) GetPatch() string { + if c == nil || c.Patch == nil { + return "" + } + return *c.Patch +} + +// GetRawURL returns the RawURL field if it's non-nil, zero value otherwise. +func (c *CommitFile) GetRawURL() string { + if c == nil || c.RawURL == nil { + return "" + } + return *c.RawURL +} + +// GetSHA returns the SHA field if it's non-nil, zero value otherwise. +func (c *CommitFile) GetSHA() string { + if c == nil || c.SHA == nil { + return "" + } + return *c.SHA +} + +// GetStatus returns the Status field if it's non-nil, zero value otherwise. +func (c *CommitFile) GetStatus() string { + if c == nil || c.Status == nil { + return "" + } + return *c.Status +} + +// GetAuthor returns the Author field. +func (c *CommitResult) GetAuthor() *User { + if c == nil { + return nil + } + return c.Author +} + +// GetCommentsURL returns the CommentsURL field if it's non-nil, zero value otherwise. +func (c *CommitResult) GetCommentsURL() string { + if c == nil || c.CommentsURL == nil { + return "" + } + return *c.CommentsURL +} + +// GetCommit returns the Commit field. +func (c *CommitResult) GetCommit() *Commit { + if c == nil { + return nil + } + return c.Commit +} + +// GetCommitter returns the Committer field. +func (c *CommitResult) GetCommitter() *User { + if c == nil { + return nil + } + return c.Committer +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (c *CommitResult) GetHTMLURL() string { + if c == nil || c.HTMLURL == nil { + return "" + } + return *c.HTMLURL +} + +// GetRepository returns the Repository field. +func (c *CommitResult) GetRepository() *Repository { + if c == nil { + return nil + } + return c.Repository +} + +// GetScore returns the Score field. +func (c *CommitResult) GetScore() *float64 { + if c == nil { + return nil + } + return c.Score +} + +// GetSHA returns the SHA field if it's non-nil, zero value otherwise. +func (c *CommitResult) GetSHA() string { + if c == nil || c.SHA == nil { + return "" + } + return *c.SHA +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (c *CommitResult) GetURL() string { + if c == nil || c.URL == nil { + return "" + } + return *c.URL +} + +// GetAheadBy returns the AheadBy field if it's non-nil, zero value otherwise. +func (c *CommitsComparison) GetAheadBy() int { + if c == nil || c.AheadBy == nil { + return 0 + } + return *c.AheadBy +} + +// GetBaseCommit returns the BaseCommit field. +func (c *CommitsComparison) GetBaseCommit() *RepositoryCommit { + if c == nil { + return nil + } + return c.BaseCommit +} + +// GetBehindBy returns the BehindBy field if it's non-nil, zero value otherwise. +func (c *CommitsComparison) GetBehindBy() int { + if c == nil || c.BehindBy == nil { + return 0 + } + return *c.BehindBy +} + +// GetDiffURL returns the DiffURL field if it's non-nil, zero value otherwise. +func (c *CommitsComparison) GetDiffURL() string { + if c == nil || c.DiffURL == nil { + return "" + } + return *c.DiffURL +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (c *CommitsComparison) GetHTMLURL() string { + if c == nil || c.HTMLURL == nil { + return "" + } + return *c.HTMLURL +} + +// GetMergeBaseCommit returns the MergeBaseCommit field. +func (c *CommitsComparison) GetMergeBaseCommit() *RepositoryCommit { + if c == nil { + return nil + } + return c.MergeBaseCommit +} + +// GetPatchURL returns the PatchURL field if it's non-nil, zero value otherwise. +func (c *CommitsComparison) GetPatchURL() string { + if c == nil || c.PatchURL == nil { + return "" + } + return *c.PatchURL +} + +// GetPermalinkURL returns the PermalinkURL field if it's non-nil, zero value otherwise. +func (c *CommitsComparison) GetPermalinkURL() string { + if c == nil || c.PermalinkURL == nil { + return "" + } + return *c.PermalinkURL +} + +// GetStatus returns the Status field if it's non-nil, zero value otherwise. +func (c *CommitsComparison) GetStatus() string { + if c == nil || c.Status == nil { + return "" + } + return *c.Status +} + +// GetTotalCommits returns the TotalCommits field if it's non-nil, zero value otherwise. +func (c *CommitsComparison) GetTotalCommits() int { + if c == nil || c.TotalCommits == nil { + return 0 + } + return *c.TotalCommits +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (c *CommitsComparison) GetURL() string { + if c == nil || c.URL == nil { + return "" + } + return *c.URL +} + +// GetIncompleteResults returns the IncompleteResults field if it's non-nil, zero value otherwise. +func (c *CommitsSearchResult) GetIncompleteResults() bool { + if c == nil || c.IncompleteResults == nil { + return false + } + return *c.IncompleteResults +} + +// GetTotal returns the Total field if it's non-nil, zero value otherwise. +func (c *CommitsSearchResult) GetTotal() int { + if c == nil || c.Total == nil { + return 0 + } + return *c.Total +} + +// GetAdditions returns the Additions field if it's non-nil, zero value otherwise. +func (c *CommitStats) GetAdditions() int { + if c == nil || c.Additions == nil { + return 0 + } + return *c.Additions +} + +// GetDeletions returns the Deletions field if it's non-nil, zero value otherwise. +func (c *CommitStats) GetDeletions() int { + if c == nil || c.Deletions == nil { + return 0 + } + return *c.Deletions +} + +// GetTotal returns the Total field if it's non-nil, zero value otherwise. +func (c *CommitStats) GetTotal() int { + if c == nil || c.Total == nil { + return 0 + } + return *c.Total +} + +// GetCodeOfConduct returns the CodeOfConduct field. +func (c *CommunityHealthFiles) GetCodeOfConduct() *Metric { + if c == nil { + return nil + } + return c.CodeOfConduct +} + +// GetContributing returns the Contributing field. +func (c *CommunityHealthFiles) GetContributing() *Metric { + if c == nil { + return nil + } + return c.Contributing +} + +// GetLicense returns the License field. +func (c *CommunityHealthFiles) GetLicense() *Metric { + if c == nil { + return nil + } + return c.License +} + +// GetReadme returns the Readme field. +func (c *CommunityHealthFiles) GetReadme() *Metric { + if c == nil { + return nil + } + return c.Readme +} + +// GetFiles returns the Files field. +func (c *CommunityHealthMetrics) GetFiles() *CommunityHealthFiles { + if c == nil { + return nil + } + return c.Files +} + +// GetHealthPercentage returns the HealthPercentage field if it's non-nil, zero value otherwise. +func (c *CommunityHealthMetrics) GetHealthPercentage() int { + if c == nil || c.HealthPercentage == nil { + return 0 + } + return *c.HealthPercentage +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (c *CommunityHealthMetrics) GetUpdatedAt() time.Time { + if c == nil || c.UpdatedAt == nil { + return time.Time{} + } + return *c.UpdatedAt +} + +// GetAvatarURL returns the AvatarURL field if it's non-nil, zero value otherwise. +func (c *Contributor) GetAvatarURL() string { + if c == nil || c.AvatarURL == nil { + return "" + } + return *c.AvatarURL +} + +// GetContributions returns the Contributions field if it's non-nil, zero value otherwise. +func (c *Contributor) GetContributions() int { + if c == nil || c.Contributions == nil { + return 0 + } + return *c.Contributions +} + +// GetEventsURL returns the EventsURL field if it's non-nil, zero value otherwise. +func (c *Contributor) GetEventsURL() string { + if c == nil || c.EventsURL == nil { + return "" + } + return *c.EventsURL +} + +// GetFollowersURL returns the FollowersURL field if it's non-nil, zero value otherwise. +func (c *Contributor) GetFollowersURL() string { + if c == nil || c.FollowersURL == nil { + return "" + } + return *c.FollowersURL +} + +// GetFollowingURL returns the FollowingURL field if it's non-nil, zero value otherwise. +func (c *Contributor) GetFollowingURL() string { + if c == nil || c.FollowingURL == nil { + return "" + } + return *c.FollowingURL +} + +// GetGistsURL returns the GistsURL field if it's non-nil, zero value otherwise. +func (c *Contributor) GetGistsURL() string { + if c == nil || c.GistsURL == nil { + return "" + } + return *c.GistsURL +} + +// GetGravatarID returns the GravatarID field if it's non-nil, zero value otherwise. +func (c *Contributor) GetGravatarID() string { + if c == nil || c.GravatarID == nil { + return "" + } + return *c.GravatarID +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (c *Contributor) GetHTMLURL() string { + if c == nil || c.HTMLURL == nil { + return "" + } + return *c.HTMLURL +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (c *Contributor) GetID() int64 { + if c == nil || c.ID == nil { + return 0 + } + return *c.ID +} + +// GetLogin returns the Login field if it's non-nil, zero value otherwise. +func (c *Contributor) GetLogin() string { + if c == nil || c.Login == nil { + return "" + } + return *c.Login +} + +// GetOrganizationsURL returns the OrganizationsURL field if it's non-nil, zero value otherwise. +func (c *Contributor) GetOrganizationsURL() string { + if c == nil || c.OrganizationsURL == nil { + return "" + } + return *c.OrganizationsURL +} + +// GetReceivedEventsURL returns the ReceivedEventsURL field if it's non-nil, zero value otherwise. +func (c *Contributor) GetReceivedEventsURL() string { + if c == nil || c.ReceivedEventsURL == nil { + return "" + } + return *c.ReceivedEventsURL +} + +// GetReposURL returns the ReposURL field if it's non-nil, zero value otherwise. +func (c *Contributor) GetReposURL() string { + if c == nil || c.ReposURL == nil { + return "" + } + return *c.ReposURL +} + +// GetSiteAdmin returns the SiteAdmin field if it's non-nil, zero value otherwise. +func (c *Contributor) GetSiteAdmin() bool { + if c == nil || c.SiteAdmin == nil { + return false + } + return *c.SiteAdmin +} + +// GetStarredURL returns the StarredURL field if it's non-nil, zero value otherwise. +func (c *Contributor) GetStarredURL() string { + if c == nil || c.StarredURL == nil { + return "" + } + return *c.StarredURL +} + +// GetSubscriptionsURL returns the SubscriptionsURL field if it's non-nil, zero value otherwise. +func (c *Contributor) GetSubscriptionsURL() string { + if c == nil || c.SubscriptionsURL == nil { + return "" + } + return *c.SubscriptionsURL +} + +// GetType returns the Type field if it's non-nil, zero value otherwise. +func (c *Contributor) GetType() string { + if c == nil || c.Type == nil { + return "" + } + return *c.Type +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (c *Contributor) GetURL() string { + if c == nil || c.URL == nil { + return "" + } + return *c.URL +} + +// GetAuthor returns the Author field. +func (c *ContributorStats) GetAuthor() *Contributor { + if c == nil { + return nil + } + return c.Author +} + +// GetTotal returns the Total field if it's non-nil, zero value otherwise. +func (c *ContributorStats) GetTotal() int { + if c == nil || c.Total == nil { + return 0 + } + return *c.Total +} + +// GetDescription returns the Description field if it's non-nil, zero value otherwise. +func (c *CreateEvent) GetDescription() string { + if c == nil || c.Description == nil { + return "" + } + return *c.Description +} + +// GetInstallation returns the Installation field. +func (c *CreateEvent) GetInstallation() *Installation { + if c == nil { + return nil + } + return c.Installation +} + +// GetMasterBranch returns the MasterBranch field if it's non-nil, zero value otherwise. +func (c *CreateEvent) GetMasterBranch() string { + if c == nil || c.MasterBranch == nil { + return "" + } + return *c.MasterBranch +} + +// GetPusherType returns the PusherType field if it's non-nil, zero value otherwise. +func (c *CreateEvent) GetPusherType() string { + if c == nil || c.PusherType == nil { + return "" + } + return *c.PusherType +} + +// GetRef returns the Ref field if it's non-nil, zero value otherwise. +func (c *CreateEvent) GetRef() string { + if c == nil || c.Ref == nil { + return "" + } + return *c.Ref +} + +// GetRefType returns the RefType field if it's non-nil, zero value otherwise. +func (c *CreateEvent) GetRefType() string { + if c == nil || c.RefType == nil { + return "" + } + return *c.RefType +} + +// GetRepo returns the Repo field. +func (c *CreateEvent) GetRepo() *Repository { + if c == nil { + return nil + } + return c.Repo +} + +// GetSender returns the Sender field. +func (c *CreateEvent) GetSender() *User { + if c == nil { + return nil + } + return c.Sender +} + +// GetEmail returns the Email field if it's non-nil, zero value otherwise. +func (c *CreateOrgInvitationOptions) GetEmail() string { + if c == nil || c.Email == nil { + return "" + } + return *c.Email +} + +// GetInviteeID returns the InviteeID field if it's non-nil, zero value otherwise. +func (c *CreateOrgInvitationOptions) GetInviteeID() int64 { + if c == nil || c.InviteeID == nil { + return 0 + } + return *c.InviteeID +} + +// GetRole returns the Role field if it's non-nil, zero value otherwise. +func (c *CreateOrgInvitationOptions) GetRole() string { + if c == nil || c.Role == nil { + return "" + } + return *c.Role +} + +// GetInstallation returns the Installation field. +func (d *DeleteEvent) GetInstallation() *Installation { + if d == nil { + return nil + } + return d.Installation +} + +// GetPusherType returns the PusherType field if it's non-nil, zero value otherwise. +func (d *DeleteEvent) GetPusherType() string { + if d == nil || d.PusherType == nil { + return "" + } + return *d.PusherType +} + +// GetRef returns the Ref field if it's non-nil, zero value otherwise. +func (d *DeleteEvent) GetRef() string { + if d == nil || d.Ref == nil { + return "" + } + return *d.Ref +} + +// GetRefType returns the RefType field if it's non-nil, zero value otherwise. +func (d *DeleteEvent) GetRefType() string { + if d == nil || d.RefType == nil { + return "" + } + return *d.RefType +} + +// GetRepo returns the Repo field. +func (d *DeleteEvent) GetRepo() *Repository { + if d == nil { + return nil + } + return d.Repo +} + +// GetSender returns the Sender field. +func (d *DeleteEvent) GetSender() *User { + if d == nil { + return nil + } + return d.Sender +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (d *Deployment) GetCreatedAt() Timestamp { + if d == nil || d.CreatedAt == nil { + return Timestamp{} + } + return *d.CreatedAt +} + +// GetCreator returns the Creator field. +func (d *Deployment) GetCreator() *User { + if d == nil { + return nil + } + return d.Creator +} + +// GetDescription returns the Description field if it's non-nil, zero value otherwise. +func (d *Deployment) GetDescription() string { + if d == nil || d.Description == nil { + return "" + } + return *d.Description +} + +// GetEnvironment returns the Environment field if it's non-nil, zero value otherwise. +func (d *Deployment) GetEnvironment() string { + if d == nil || d.Environment == nil { + return "" + } + return *d.Environment +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (d *Deployment) GetID() int64 { + if d == nil || d.ID == nil { + return 0 + } + return *d.ID +} + +// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. +func (d *Deployment) GetNodeID() string { + if d == nil || d.NodeID == nil { + return "" + } + return *d.NodeID +} + +// GetRef returns the Ref field if it's non-nil, zero value otherwise. +func (d *Deployment) GetRef() string { + if d == nil || d.Ref == nil { + return "" + } + return *d.Ref +} + +// GetRepositoryURL returns the RepositoryURL field if it's non-nil, zero value otherwise. +func (d *Deployment) GetRepositoryURL() string { + if d == nil || d.RepositoryURL == nil { + return "" + } + return *d.RepositoryURL +} + +// GetSHA returns the SHA field if it's non-nil, zero value otherwise. +func (d *Deployment) GetSHA() string { + if d == nil || d.SHA == nil { + return "" + } + return *d.SHA +} + +// GetStatusesURL returns the StatusesURL field if it's non-nil, zero value otherwise. +func (d *Deployment) GetStatusesURL() string { + if d == nil || d.StatusesURL == nil { + return "" + } + return *d.StatusesURL +} + +// GetTask returns the Task field if it's non-nil, zero value otherwise. +func (d *Deployment) GetTask() string { + if d == nil || d.Task == nil { + return "" + } + return *d.Task +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (d *Deployment) GetUpdatedAt() Timestamp { + if d == nil || d.UpdatedAt == nil { + return Timestamp{} + } + return *d.UpdatedAt +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (d *Deployment) GetURL() string { + if d == nil || d.URL == nil { + return "" + } + return *d.URL +} + +// GetDeployment returns the Deployment field. +func (d *DeploymentEvent) GetDeployment() *Deployment { + if d == nil { + return nil + } + return d.Deployment +} + +// GetInstallation returns the Installation field. +func (d *DeploymentEvent) GetInstallation() *Installation { + if d == nil { + return nil + } + return d.Installation +} + +// GetRepo returns the Repo field. +func (d *DeploymentEvent) GetRepo() *Repository { + if d == nil { + return nil + } + return d.Repo +} + +// GetSender returns the Sender field. +func (d *DeploymentEvent) GetSender() *User { + if d == nil { + return nil + } + return d.Sender +} + +// GetAutoMerge returns the AutoMerge field if it's non-nil, zero value otherwise. +func (d *DeploymentRequest) GetAutoMerge() bool { + if d == nil || d.AutoMerge == nil { + return false + } + return *d.AutoMerge +} + +// GetDescription returns the Description field if it's non-nil, zero value otherwise. +func (d *DeploymentRequest) GetDescription() string { + if d == nil || d.Description == nil { + return "" + } + return *d.Description +} + +// GetEnvironment returns the Environment field if it's non-nil, zero value otherwise. +func (d *DeploymentRequest) GetEnvironment() string { + if d == nil || d.Environment == nil { + return "" + } + return *d.Environment +} + +// GetPayload returns the Payload field if it's non-nil, zero value otherwise. +func (d *DeploymentRequest) GetPayload() string { + if d == nil || d.Payload == nil { + return "" + } + return *d.Payload +} + +// GetProductionEnvironment returns the ProductionEnvironment field if it's non-nil, zero value otherwise. +func (d *DeploymentRequest) GetProductionEnvironment() bool { + if d == nil || d.ProductionEnvironment == nil { + return false + } + return *d.ProductionEnvironment +} + +// GetRef returns the Ref field if it's non-nil, zero value otherwise. +func (d *DeploymentRequest) GetRef() string { + if d == nil || d.Ref == nil { + return "" + } + return *d.Ref +} + +// GetRequiredContexts returns the RequiredContexts field if it's non-nil, zero value otherwise. +func (d *DeploymentRequest) GetRequiredContexts() []string { + if d == nil || d.RequiredContexts == nil { + return nil + } + return *d.RequiredContexts +} + +// GetTask returns the Task field if it's non-nil, zero value otherwise. +func (d *DeploymentRequest) GetTask() string { + if d == nil || d.Task == nil { + return "" + } + return *d.Task +} + +// GetTransientEnvironment returns the TransientEnvironment field if it's non-nil, zero value otherwise. +func (d *DeploymentRequest) GetTransientEnvironment() bool { + if d == nil || d.TransientEnvironment == nil { + return false + } + return *d.TransientEnvironment +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (d *DeploymentStatus) GetCreatedAt() Timestamp { + if d == nil || d.CreatedAt == nil { + return Timestamp{} + } + return *d.CreatedAt +} + +// GetCreator returns the Creator field. +func (d *DeploymentStatus) GetCreator() *User { + if d == nil { + return nil + } + return d.Creator +} + +// GetDeploymentURL returns the DeploymentURL field if it's non-nil, zero value otherwise. +func (d *DeploymentStatus) GetDeploymentURL() string { + if d == nil || d.DeploymentURL == nil { + return "" + } + return *d.DeploymentURL +} + +// GetDescription returns the Description field if it's non-nil, zero value otherwise. +func (d *DeploymentStatus) GetDescription() string { + if d == nil || d.Description == nil { + return "" + } + return *d.Description +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (d *DeploymentStatus) GetID() int64 { + if d == nil || d.ID == nil { + return 0 + } + return *d.ID +} + +// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. +func (d *DeploymentStatus) GetNodeID() string { + if d == nil || d.NodeID == nil { + return "" + } + return *d.NodeID +} + +// GetRepositoryURL returns the RepositoryURL field if it's non-nil, zero value otherwise. +func (d *DeploymentStatus) GetRepositoryURL() string { + if d == nil || d.RepositoryURL == nil { + return "" + } + return *d.RepositoryURL +} + +// GetState returns the State field if it's non-nil, zero value otherwise. +func (d *DeploymentStatus) GetState() string { + if d == nil || d.State == nil { + return "" + } + return *d.State +} + +// GetTargetURL returns the TargetURL field if it's non-nil, zero value otherwise. +func (d *DeploymentStatus) GetTargetURL() string { + if d == nil || d.TargetURL == nil { + return "" + } + return *d.TargetURL +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (d *DeploymentStatus) GetUpdatedAt() Timestamp { + if d == nil || d.UpdatedAt == nil { + return Timestamp{} + } + return *d.UpdatedAt +} + +// GetDeployment returns the Deployment field. +func (d *DeploymentStatusEvent) GetDeployment() *Deployment { + if d == nil { + return nil + } + return d.Deployment +} + +// GetDeploymentStatus returns the DeploymentStatus field. +func (d *DeploymentStatusEvent) GetDeploymentStatus() *DeploymentStatus { + if d == nil { + return nil + } + return d.DeploymentStatus +} + +// GetInstallation returns the Installation field. +func (d *DeploymentStatusEvent) GetInstallation() *Installation { + if d == nil { + return nil + } + return d.Installation +} + +// GetRepo returns the Repo field. +func (d *DeploymentStatusEvent) GetRepo() *Repository { + if d == nil { + return nil + } + return d.Repo +} + +// GetSender returns the Sender field. +func (d *DeploymentStatusEvent) GetSender() *User { + if d == nil { + return nil + } + return d.Sender +} + +// GetAutoInactive returns the AutoInactive field if it's non-nil, zero value otherwise. +func (d *DeploymentStatusRequest) GetAutoInactive() bool { + if d == nil || d.AutoInactive == nil { + return false + } + return *d.AutoInactive +} + +// GetDescription returns the Description field if it's non-nil, zero value otherwise. +func (d *DeploymentStatusRequest) GetDescription() string { + if d == nil || d.Description == nil { + return "" + } + return *d.Description +} + +// GetEnvironmentURL returns the EnvironmentURL field if it's non-nil, zero value otherwise. +func (d *DeploymentStatusRequest) GetEnvironmentURL() string { + if d == nil || d.EnvironmentURL == nil { + return "" + } + return *d.EnvironmentURL +} + +// GetLogURL returns the LogURL field if it's non-nil, zero value otherwise. +func (d *DeploymentStatusRequest) GetLogURL() string { + if d == nil || d.LogURL == nil { + return "" + } + return *d.LogURL +} + +// GetState returns the State field if it's non-nil, zero value otherwise. +func (d *DeploymentStatusRequest) GetState() string { + if d == nil || d.State == nil { + return "" + } + return *d.State +} + +// GetAuthor returns the Author field. +func (d *DiscussionComment) GetAuthor() *User { + if d == nil { + return nil + } + return d.Author +} + +// GetBody returns the Body field if it's non-nil, zero value otherwise. +func (d *DiscussionComment) GetBody() string { + if d == nil || d.Body == nil { + return "" + } + return *d.Body +} + +// GetBodyHTML returns the BodyHTML field if it's non-nil, zero value otherwise. +func (d *DiscussionComment) GetBodyHTML() string { + if d == nil || d.BodyHTML == nil { + return "" + } + return *d.BodyHTML +} + +// GetBodyVersion returns the BodyVersion field if it's non-nil, zero value otherwise. +func (d *DiscussionComment) GetBodyVersion() string { + if d == nil || d.BodyVersion == nil { + return "" + } + return *d.BodyVersion +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (d *DiscussionComment) GetCreatedAt() Timestamp { + if d == nil || d.CreatedAt == nil { + return Timestamp{} + } + return *d.CreatedAt +} + +// GetDiscussionURL returns the DiscussionURL field if it's non-nil, zero value otherwise. +func (d *DiscussionComment) GetDiscussionURL() string { + if d == nil || d.DiscussionURL == nil { + return "" + } + return *d.DiscussionURL +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (d *DiscussionComment) GetHTMLURL() string { + if d == nil || d.HTMLURL == nil { + return "" + } + return *d.HTMLURL +} + +// GetLastEditedAt returns the LastEditedAt field if it's non-nil, zero value otherwise. +func (d *DiscussionComment) GetLastEditedAt() Timestamp { + if d == nil || d.LastEditedAt == nil { + return Timestamp{} + } + return *d.LastEditedAt +} + +// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. +func (d *DiscussionComment) GetNodeID() string { + if d == nil || d.NodeID == nil { + return "" + } + return *d.NodeID +} + +// GetNumber returns the Number field if it's non-nil, zero value otherwise. +func (d *DiscussionComment) GetNumber() int64 { + if d == nil || d.Number == nil { + return 0 + } + return *d.Number +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (d *DiscussionComment) GetUpdatedAt() Timestamp { + if d == nil || d.UpdatedAt == nil { + return Timestamp{} + } + return *d.UpdatedAt +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (d *DiscussionComment) GetURL() string { + if d == nil || d.URL == nil { + return "" + } + return *d.URL +} + +// GetTeams returns the Teams field if it's non-nil, zero value otherwise. +func (d *DismissalRestrictionsRequest) GetTeams() []string { + if d == nil || d.Teams == nil { + return nil + } + return *d.Teams +} + +// GetUsers returns the Users field if it's non-nil, zero value otherwise. +func (d *DismissalRestrictionsRequest) GetUsers() []string { + if d == nil || d.Users == nil { + return nil + } + return *d.Users +} + +// GetBody returns the Body field if it's non-nil, zero value otherwise. +func (d *DraftReviewComment) GetBody() string { + if d == nil || d.Body == nil { + return "" + } + return *d.Body +} + +// GetPath returns the Path field if it's non-nil, zero value otherwise. +func (d *DraftReviewComment) GetPath() string { + if d == nil || d.Path == nil { + return "" + } + return *d.Path +} + +// GetPosition returns the Position field if it's non-nil, zero value otherwise. +func (d *DraftReviewComment) GetPosition() int { + if d == nil || d.Position == nil { + return 0 + } + return *d.Position +} + +// GetActor returns the Actor field. +func (e *Event) GetActor() *User { + if e == nil { + return nil + } + return e.Actor +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (e *Event) GetCreatedAt() time.Time { + if e == nil || e.CreatedAt == nil { + return time.Time{} + } + return *e.CreatedAt +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (e *Event) GetID() string { + if e == nil || e.ID == nil { + return "" + } + return *e.ID +} + +// GetOrg returns the Org field. +func (e *Event) GetOrg() *Organization { + if e == nil { + return nil + } + return e.Org +} + +// GetPublic returns the Public field if it's non-nil, zero value otherwise. +func (e *Event) GetPublic() bool { + if e == nil || e.Public == nil { + return false + } + return *e.Public +} + +// GetRawPayload returns the RawPayload field if it's non-nil, zero value otherwise. +func (e *Event) GetRawPayload() json.RawMessage { + if e == nil || e.RawPayload == nil { + return json.RawMessage{} + } + return *e.RawPayload +} + +// GetRepo returns the Repo field. +func (e *Event) GetRepo() *Repository { + if e == nil { + return nil + } + return e.Repo +} + +// GetType returns the Type field if it's non-nil, zero value otherwise. +func (e *Event) GetType() string { + if e == nil || e.Type == nil { + return "" + } + return *e.Type +} + +// GetHRef returns the HRef field if it's non-nil, zero value otherwise. +func (f *FeedLink) GetHRef() string { + if f == nil || f.HRef == nil { + return "" + } + return *f.HRef +} + +// GetType returns the Type field if it's non-nil, zero value otherwise. +func (f *FeedLink) GetType() string { + if f == nil || f.Type == nil { + return "" + } + return *f.Type +} + +// GetCurrentUserActorURL returns the CurrentUserActorURL field if it's non-nil, zero value otherwise. +func (f *Feeds) GetCurrentUserActorURL() string { + if f == nil || f.CurrentUserActorURL == nil { + return "" + } + return *f.CurrentUserActorURL +} + +// GetCurrentUserOrganizationURL returns the CurrentUserOrganizationURL field if it's non-nil, zero value otherwise. +func (f *Feeds) GetCurrentUserOrganizationURL() string { + if f == nil || f.CurrentUserOrganizationURL == nil { + return "" + } + return *f.CurrentUserOrganizationURL +} + +// GetCurrentUserPublicURL returns the CurrentUserPublicURL field if it's non-nil, zero value otherwise. +func (f *Feeds) GetCurrentUserPublicURL() string { + if f == nil || f.CurrentUserPublicURL == nil { + return "" + } + return *f.CurrentUserPublicURL +} + +// GetCurrentUserURL returns the CurrentUserURL field if it's non-nil, zero value otherwise. +func (f *Feeds) GetCurrentUserURL() string { + if f == nil || f.CurrentUserURL == nil { + return "" + } + return *f.CurrentUserURL +} + +// GetTimelineURL returns the TimelineURL field if it's non-nil, zero value otherwise. +func (f *Feeds) GetTimelineURL() string { + if f == nil || f.TimelineURL == nil { + return "" + } + return *f.TimelineURL +} + +// GetUserURL returns the UserURL field if it's non-nil, zero value otherwise. +func (f *Feeds) GetUserURL() string { + if f == nil || f.UserURL == nil { + return "" + } + return *f.UserURL +} + +// GetForkee returns the Forkee field. +func (f *ForkEvent) GetForkee() *Repository { + if f == nil { + return nil + } + return f.Forkee +} + +// GetInstallation returns the Installation field. +func (f *ForkEvent) GetInstallation() *Installation { + if f == nil { + return nil + } + return f.Installation +} + +// GetRepo returns the Repo field. +func (f *ForkEvent) GetRepo() *Repository { + if f == nil { + return nil + } + return f.Repo +} + +// GetSender returns the Sender field. +func (f *ForkEvent) GetSender() *User { + if f == nil { + return nil + } + return f.Sender +} + +// GetComments returns the Comments field if it's non-nil, zero value otherwise. +func (g *Gist) GetComments() int { + if g == nil || g.Comments == nil { + return 0 + } + return *g.Comments +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (g *Gist) GetCreatedAt() time.Time { + if g == nil || g.CreatedAt == nil { + return time.Time{} + } + return *g.CreatedAt +} + +// GetDescription returns the Description field if it's non-nil, zero value otherwise. +func (g *Gist) GetDescription() string { + if g == nil || g.Description == nil { + return "" + } + return *g.Description +} + +// GetGitPullURL returns the GitPullURL field if it's non-nil, zero value otherwise. +func (g *Gist) GetGitPullURL() string { + if g == nil || g.GitPullURL == nil { + return "" + } + return *g.GitPullURL +} + +// GetGitPushURL returns the GitPushURL field if it's non-nil, zero value otherwise. +func (g *Gist) GetGitPushURL() string { + if g == nil || g.GitPushURL == nil { + return "" + } + return *g.GitPushURL +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (g *Gist) GetHTMLURL() string { + if g == nil || g.HTMLURL == nil { + return "" + } + return *g.HTMLURL +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (g *Gist) GetID() string { + if g == nil || g.ID == nil { + return "" + } + return *g.ID +} + +// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. +func (g *Gist) GetNodeID() string { + if g == nil || g.NodeID == nil { + return "" + } + return *g.NodeID +} + +// GetOwner returns the Owner field. +func (g *Gist) GetOwner() *User { + if g == nil { + return nil + } + return g.Owner +} + +// GetPublic returns the Public field if it's non-nil, zero value otherwise. +func (g *Gist) GetPublic() bool { + if g == nil || g.Public == nil { + return false + } + return *g.Public +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (g *Gist) GetUpdatedAt() time.Time { + if g == nil || g.UpdatedAt == nil { + return time.Time{} + } + return *g.UpdatedAt +} + +// GetBody returns the Body field if it's non-nil, zero value otherwise. +func (g *GistComment) GetBody() string { + if g == nil || g.Body == nil { + return "" + } + return *g.Body +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (g *GistComment) GetCreatedAt() time.Time { + if g == nil || g.CreatedAt == nil { + return time.Time{} + } + return *g.CreatedAt +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (g *GistComment) GetID() int64 { + if g == nil || g.ID == nil { + return 0 + } + return *g.ID +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (g *GistComment) GetURL() string { + if g == nil || g.URL == nil { + return "" + } + return *g.URL +} + +// GetUser returns the User field. +func (g *GistComment) GetUser() *User { + if g == nil { + return nil + } + return g.User +} + +// GetChangeStatus returns the ChangeStatus field. +func (g *GistCommit) GetChangeStatus() *CommitStats { + if g == nil { + return nil + } + return g.ChangeStatus +} + +// GetCommittedAt returns the CommittedAt field if it's non-nil, zero value otherwise. +func (g *GistCommit) GetCommittedAt() Timestamp { + if g == nil || g.CommittedAt == nil { + return Timestamp{} + } + return *g.CommittedAt +} + +// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. +func (g *GistCommit) GetNodeID() string { + if g == nil || g.NodeID == nil { + return "" + } + return *g.NodeID +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (g *GistCommit) GetURL() string { + if g == nil || g.URL == nil { + return "" + } + return *g.URL +} + +// GetUser returns the User field. +func (g *GistCommit) GetUser() *User { + if g == nil { + return nil + } + return g.User +} + +// GetVersion returns the Version field if it's non-nil, zero value otherwise. +func (g *GistCommit) GetVersion() string { + if g == nil || g.Version == nil { + return "" + } + return *g.Version +} + +// GetContent returns the Content field if it's non-nil, zero value otherwise. +func (g *GistFile) GetContent() string { + if g == nil || g.Content == nil { + return "" + } + return *g.Content +} + +// GetFilename returns the Filename field if it's non-nil, zero value otherwise. +func (g *GistFile) GetFilename() string { + if g == nil || g.Filename == nil { + return "" + } + return *g.Filename +} + +// GetLanguage returns the Language field if it's non-nil, zero value otherwise. +func (g *GistFile) GetLanguage() string { + if g == nil || g.Language == nil { + return "" + } + return *g.Language +} + +// GetRawURL returns the RawURL field if it's non-nil, zero value otherwise. +func (g *GistFile) GetRawURL() string { + if g == nil || g.RawURL == nil { + return "" + } + return *g.RawURL +} + +// GetSize returns the Size field if it's non-nil, zero value otherwise. +func (g *GistFile) GetSize() int { + if g == nil || g.Size == nil { + return 0 + } + return *g.Size +} + +// GetType returns the Type field if it's non-nil, zero value otherwise. +func (g *GistFile) GetType() string { + if g == nil || g.Type == nil { + return "" + } + return *g.Type +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (g *GistFork) GetCreatedAt() Timestamp { + if g == nil || g.CreatedAt == nil { + return Timestamp{} + } + return *g.CreatedAt +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (g *GistFork) GetID() string { + if g == nil || g.ID == nil { + return "" + } + return *g.ID +} + +// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. +func (g *GistFork) GetNodeID() string { + if g == nil || g.NodeID == nil { + return "" + } + return *g.NodeID +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (g *GistFork) GetUpdatedAt() Timestamp { + if g == nil || g.UpdatedAt == nil { + return Timestamp{} + } + return *g.UpdatedAt +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (g *GistFork) GetURL() string { + if g == nil || g.URL == nil { + return "" + } + return *g.URL +} + +// GetUser returns the User field. +func (g *GistFork) GetUser() *User { + if g == nil { + return nil + } + return g.User +} + +// GetPrivateGists returns the PrivateGists field if it's non-nil, zero value otherwise. +func (g *GistStats) GetPrivateGists() int { + if g == nil || g.PrivateGists == nil { + return 0 + } + return *g.PrivateGists +} + +// GetPublicGists returns the PublicGists field if it's non-nil, zero value otherwise. +func (g *GistStats) GetPublicGists() int { + if g == nil || g.PublicGists == nil { + return 0 + } + return *g.PublicGists +} + +// GetTotalGists returns the TotalGists field if it's non-nil, zero value otherwise. +func (g *GistStats) GetTotalGists() int { + if g == nil || g.TotalGists == nil { + return 0 + } + return *g.TotalGists +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (g *Gitignore) GetName() string { + if g == nil || g.Name == nil { + return "" + } + return *g.Name +} + +// GetSource returns the Source field if it's non-nil, zero value otherwise. +func (g *Gitignore) GetSource() string { + if g == nil || g.Source == nil { + return "" + } + return *g.Source +} + +// GetSHA returns the SHA field if it's non-nil, zero value otherwise. +func (g *GitObject) GetSHA() string { + if g == nil || g.SHA == nil { + return "" + } + return *g.SHA +} + +// GetType returns the Type field if it's non-nil, zero value otherwise. +func (g *GitObject) GetType() string { + if g == nil || g.Type == nil { + return "" + } + return *g.Type +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (g *GitObject) GetURL() string { + if g == nil || g.URL == nil { + return "" + } + return *g.URL +} + +// GetInstallation returns the Installation field. +func (g *GollumEvent) GetInstallation() *Installation { + if g == nil { + return nil + } + return g.Installation +} + +// GetRepo returns the Repo field. +func (g *GollumEvent) GetRepo() *Repository { + if g == nil { + return nil + } + return g.Repo +} + +// GetSender returns the Sender field. +func (g *GollumEvent) GetSender() *User { + if g == nil { + return nil + } + return g.Sender +} + +// GetEmail returns the Email field if it's non-nil, zero value otherwise. +func (g *GPGEmail) GetEmail() string { + if g == nil || g.Email == nil { + return "" + } + return *g.Email +} + +// GetVerified returns the Verified field if it's non-nil, zero value otherwise. +func (g *GPGEmail) GetVerified() bool { + if g == nil || g.Verified == nil { + return false + } + return *g.Verified +} + +// GetCanCertify returns the CanCertify field if it's non-nil, zero value otherwise. +func (g *GPGKey) GetCanCertify() bool { + if g == nil || g.CanCertify == nil { + return false + } + return *g.CanCertify +} + +// GetCanEncryptComms returns the CanEncryptComms field if it's non-nil, zero value otherwise. +func (g *GPGKey) GetCanEncryptComms() bool { + if g == nil || g.CanEncryptComms == nil { + return false + } + return *g.CanEncryptComms +} + +// GetCanEncryptStorage returns the CanEncryptStorage field if it's non-nil, zero value otherwise. +func (g *GPGKey) GetCanEncryptStorage() bool { + if g == nil || g.CanEncryptStorage == nil { + return false + } + return *g.CanEncryptStorage +} + +// GetCanSign returns the CanSign field if it's non-nil, zero value otherwise. +func (g *GPGKey) GetCanSign() bool { + if g == nil || g.CanSign == nil { + return false + } + return *g.CanSign +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (g *GPGKey) GetCreatedAt() time.Time { + if g == nil || g.CreatedAt == nil { + return time.Time{} + } + return *g.CreatedAt +} + +// GetExpiresAt returns the ExpiresAt field if it's non-nil, zero value otherwise. +func (g *GPGKey) GetExpiresAt() time.Time { + if g == nil || g.ExpiresAt == nil { + return time.Time{} + } + return *g.ExpiresAt +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (g *GPGKey) GetID() int64 { + if g == nil || g.ID == nil { + return 0 + } + return *g.ID +} + +// GetKeyID returns the KeyID field if it's non-nil, zero value otherwise. +func (g *GPGKey) GetKeyID() string { + if g == nil || g.KeyID == nil { + return "" + } + return *g.KeyID +} + +// GetPrimaryKeyID returns the PrimaryKeyID field if it's non-nil, zero value otherwise. +func (g *GPGKey) GetPrimaryKeyID() int64 { + if g == nil || g.PrimaryKeyID == nil { + return 0 + } + return *g.PrimaryKeyID +} + +// GetPublicKey returns the PublicKey field if it's non-nil, zero value otherwise. +func (g *GPGKey) GetPublicKey() string { + if g == nil || g.PublicKey == nil { + return "" + } + return *g.PublicKey +} + +// GetApp returns the App field. +func (g *Grant) GetApp() *AuthorizationApp { + if g == nil { + return nil + } + return g.App +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (g *Grant) GetCreatedAt() Timestamp { + if g == nil || g.CreatedAt == nil { + return Timestamp{} + } + return *g.CreatedAt +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (g *Grant) GetID() int64 { + if g == nil || g.ID == nil { + return 0 + } + return *g.ID +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (g *Grant) GetUpdatedAt() Timestamp { + if g == nil || g.UpdatedAt == nil { + return Timestamp{} + } + return *g.UpdatedAt +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (g *Grant) GetURL() string { + if g == nil || g.URL == nil { + return "" + } + return *g.URL +} + +// GetActive returns the Active field if it's non-nil, zero value otherwise. +func (h *Hook) GetActive() bool { + if h == nil || h.Active == nil { + return false + } + return *h.Active +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (h *Hook) GetCreatedAt() time.Time { + if h == nil || h.CreatedAt == nil { + return time.Time{} + } + return *h.CreatedAt +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (h *Hook) GetID() int64 { + if h == nil || h.ID == nil { + return 0 + } + return *h.ID +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (h *Hook) GetName() string { + if h == nil || h.Name == nil { + return "" + } + return *h.Name +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (h *Hook) GetUpdatedAt() time.Time { + if h == nil || h.UpdatedAt == nil { + return time.Time{} + } + return *h.UpdatedAt +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (h *Hook) GetURL() string { + if h == nil || h.URL == nil { + return "" + } + return *h.URL +} + +// GetActiveHooks returns the ActiveHooks field if it's non-nil, zero value otherwise. +func (h *HookStats) GetActiveHooks() int { + if h == nil || h.ActiveHooks == nil { + return 0 + } + return *h.ActiveHooks +} + +// GetInactiveHooks returns the InactiveHooks field if it's non-nil, zero value otherwise. +func (h *HookStats) GetInactiveHooks() int { + if h == nil || h.InactiveHooks == nil { + return 0 + } + return *h.InactiveHooks +} + +// GetTotalHooks returns the TotalHooks field if it's non-nil, zero value otherwise. +func (h *HookStats) GetTotalHooks() int { + if h == nil || h.TotalHooks == nil { + return 0 + } + return *h.TotalHooks +} + +// GetAuthorsCount returns the AuthorsCount field if it's non-nil, zero value otherwise. +func (i *Import) GetAuthorsCount() int { + if i == nil || i.AuthorsCount == nil { + return 0 + } + return *i.AuthorsCount +} + +// GetAuthorsURL returns the AuthorsURL field if it's non-nil, zero value otherwise. +func (i *Import) GetAuthorsURL() string { + if i == nil || i.AuthorsURL == nil { + return "" + } + return *i.AuthorsURL +} + +// GetCommitCount returns the CommitCount field if it's non-nil, zero value otherwise. +func (i *Import) GetCommitCount() int { + if i == nil || i.CommitCount == nil { + return 0 + } + return *i.CommitCount +} + +// GetFailedStep returns the FailedStep field if it's non-nil, zero value otherwise. +func (i *Import) GetFailedStep() string { + if i == nil || i.FailedStep == nil { + return "" + } + return *i.FailedStep +} + +// GetHasLargeFiles returns the HasLargeFiles field if it's non-nil, zero value otherwise. +func (i *Import) GetHasLargeFiles() bool { + if i == nil || i.HasLargeFiles == nil { + return false + } + return *i.HasLargeFiles +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (i *Import) GetHTMLURL() string { + if i == nil || i.HTMLURL == nil { + return "" + } + return *i.HTMLURL +} + +// GetHumanName returns the HumanName field if it's non-nil, zero value otherwise. +func (i *Import) GetHumanName() string { + if i == nil || i.HumanName == nil { + return "" + } + return *i.HumanName +} + +// GetLargeFilesCount returns the LargeFilesCount field if it's non-nil, zero value otherwise. +func (i *Import) GetLargeFilesCount() int { + if i == nil || i.LargeFilesCount == nil { + return 0 + } + return *i.LargeFilesCount +} + +// GetLargeFilesSize returns the LargeFilesSize field if it's non-nil, zero value otherwise. +func (i *Import) GetLargeFilesSize() int { + if i == nil || i.LargeFilesSize == nil { + return 0 + } + return *i.LargeFilesSize +} + +// GetMessage returns the Message field if it's non-nil, zero value otherwise. +func (i *Import) GetMessage() string { + if i == nil || i.Message == nil { + return "" + } + return *i.Message +} + +// GetPercent returns the Percent field if it's non-nil, zero value otherwise. +func (i *Import) GetPercent() int { + if i == nil || i.Percent == nil { + return 0 + } + return *i.Percent +} + +// GetPushPercent returns the PushPercent field if it's non-nil, zero value otherwise. +func (i *Import) GetPushPercent() int { + if i == nil || i.PushPercent == nil { + return 0 + } + return *i.PushPercent +} + +// GetRepositoryURL returns the RepositoryURL field if it's non-nil, zero value otherwise. +func (i *Import) GetRepositoryURL() string { + if i == nil || i.RepositoryURL == nil { + return "" + } + return *i.RepositoryURL +} + +// GetStatus returns the Status field if it's non-nil, zero value otherwise. +func (i *Import) GetStatus() string { + if i == nil || i.Status == nil { + return "" + } + return *i.Status +} + +// GetStatusText returns the StatusText field if it's non-nil, zero value otherwise. +func (i *Import) GetStatusText() string { + if i == nil || i.StatusText == nil { + return "" + } + return *i.StatusText +} + +// GetTFVCProject returns the TFVCProject field if it's non-nil, zero value otherwise. +func (i *Import) GetTFVCProject() string { + if i == nil || i.TFVCProject == nil { + return "" + } + return *i.TFVCProject +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (i *Import) GetURL() string { + if i == nil || i.URL == nil { + return "" + } + return *i.URL +} + +// GetUseLFS returns the UseLFS field if it's non-nil, zero value otherwise. +func (i *Import) GetUseLFS() string { + if i == nil || i.UseLFS == nil { + return "" + } + return *i.UseLFS +} + +// GetVCS returns the VCS field if it's non-nil, zero value otherwise. +func (i *Import) GetVCS() string { + if i == nil || i.VCS == nil { + return "" + } + return *i.VCS +} + +// GetVCSPassword returns the VCSPassword field if it's non-nil, zero value otherwise. +func (i *Import) GetVCSPassword() string { + if i == nil || i.VCSPassword == nil { + return "" + } + return *i.VCSPassword +} + +// GetVCSURL returns the VCSURL field if it's non-nil, zero value otherwise. +func (i *Import) GetVCSURL() string { + if i == nil || i.VCSURL == nil { + return "" + } + return *i.VCSURL +} + +// GetVCSUsername returns the VCSUsername field if it's non-nil, zero value otherwise. +func (i *Import) GetVCSUsername() string { + if i == nil || i.VCSUsername == nil { + return "" + } + return *i.VCSUsername +} + +// GetAccessTokensURL returns the AccessTokensURL field if it's non-nil, zero value otherwise. +func (i *Installation) GetAccessTokensURL() string { + if i == nil || i.AccessTokensURL == nil { + return "" + } + return *i.AccessTokensURL +} + +// GetAccount returns the Account field. +func (i *Installation) GetAccount() *User { + if i == nil { + return nil + } + return i.Account +} + +// GetAppID returns the AppID field if it's non-nil, zero value otherwise. +func (i *Installation) GetAppID() int64 { + if i == nil || i.AppID == nil { + return 0 + } + return *i.AppID +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (i *Installation) GetHTMLURL() string { + if i == nil || i.HTMLURL == nil { + return "" + } + return *i.HTMLURL +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (i *Installation) GetID() int64 { + if i == nil || i.ID == nil { + return 0 + } + return *i.ID +} + +// GetPermissions returns the Permissions field. +func (i *Installation) GetPermissions() *InstallationPermissions { + if i == nil { + return nil + } + return i.Permissions +} + +// GetRepositoriesURL returns the RepositoriesURL field if it's non-nil, zero value otherwise. +func (i *Installation) GetRepositoriesURL() string { + if i == nil || i.RepositoriesURL == nil { + return "" + } + return *i.RepositoriesURL +} + +// GetRepositorySelection returns the RepositorySelection field if it's non-nil, zero value otherwise. +func (i *Installation) GetRepositorySelection() string { + if i == nil || i.RepositorySelection == nil { + return "" + } + return *i.RepositorySelection +} + +// GetSingleFileName returns the SingleFileName field if it's non-nil, zero value otherwise. +func (i *Installation) GetSingleFileName() string { + if i == nil || i.SingleFileName == nil { + return "" + } + return *i.SingleFileName +} + +// GetTargetID returns the TargetID field if it's non-nil, zero value otherwise. +func (i *Installation) GetTargetID() int64 { + if i == nil || i.TargetID == nil { + return 0 + } + return *i.TargetID +} + +// GetTargetType returns the TargetType field if it's non-nil, zero value otherwise. +func (i *Installation) GetTargetType() string { + if i == nil || i.TargetType == nil { + return "" + } + return *i.TargetType +} + +// GetAction returns the Action field if it's non-nil, zero value otherwise. +func (i *InstallationEvent) GetAction() string { + if i == nil || i.Action == nil { + return "" + } + return *i.Action +} + +// GetInstallation returns the Installation field. +func (i *InstallationEvent) GetInstallation() *Installation { + if i == nil { + return nil + } + return i.Installation +} + +// GetSender returns the Sender field. +func (i *InstallationEvent) GetSender() *User { + if i == nil { + return nil + } + return i.Sender +} + +// GetContents returns the Contents field if it's non-nil, zero value otherwise. +func (i *InstallationPermissions) GetContents() string { + if i == nil || i.Contents == nil { + return "" + } + return *i.Contents +} + +// GetIssues returns the Issues field if it's non-nil, zero value otherwise. +func (i *InstallationPermissions) GetIssues() string { + if i == nil || i.Issues == nil { + return "" + } + return *i.Issues +} + +// GetMetadata returns the Metadata field if it's non-nil, zero value otherwise. +func (i *InstallationPermissions) GetMetadata() string { + if i == nil || i.Metadata == nil { + return "" + } + return *i.Metadata +} + +// GetSingleFile returns the SingleFile field if it's non-nil, zero value otherwise. +func (i *InstallationPermissions) GetSingleFile() string { + if i == nil || i.SingleFile == nil { + return "" + } + return *i.SingleFile +} + +// GetAction returns the Action field if it's non-nil, zero value otherwise. +func (i *InstallationRepositoriesEvent) GetAction() string { + if i == nil || i.Action == nil { + return "" + } + return *i.Action +} + +// GetInstallation returns the Installation field. +func (i *InstallationRepositoriesEvent) GetInstallation() *Installation { + if i == nil { + return nil + } + return i.Installation +} + +// GetRepositorySelection returns the RepositorySelection field if it's non-nil, zero value otherwise. +func (i *InstallationRepositoriesEvent) GetRepositorySelection() string { + if i == nil || i.RepositorySelection == nil { + return "" + } + return *i.RepositorySelection +} + +// GetSender returns the Sender field. +func (i *InstallationRepositoriesEvent) GetSender() *User { + if i == nil { + return nil + } + return i.Sender +} + +// GetExpiresAt returns the ExpiresAt field if it's non-nil, zero value otherwise. +func (i *InstallationToken) GetExpiresAt() time.Time { + if i == nil || i.ExpiresAt == nil { + return time.Time{} + } + return *i.ExpiresAt +} + +// GetToken returns the Token field if it's non-nil, zero value otherwise. +func (i *InstallationToken) GetToken() string { + if i == nil || i.Token == nil { + return "" + } + return *i.Token +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (i *Invitation) GetCreatedAt() time.Time { + if i == nil || i.CreatedAt == nil { + return time.Time{} + } + return *i.CreatedAt +} + +// GetEmail returns the Email field if it's non-nil, zero value otherwise. +func (i *Invitation) GetEmail() string { + if i == nil || i.Email == nil { + return "" + } + return *i.Email +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (i *Invitation) GetID() int64 { + if i == nil || i.ID == nil { + return 0 + } + return *i.ID +} + +// GetInvitationTeamURL returns the InvitationTeamURL field if it's non-nil, zero value otherwise. +func (i *Invitation) GetInvitationTeamURL() string { + if i == nil || i.InvitationTeamURL == nil { + return "" + } + return *i.InvitationTeamURL +} + +// GetInviter returns the Inviter field. +func (i *Invitation) GetInviter() *User { + if i == nil { + return nil + } + return i.Inviter +} + +// GetLogin returns the Login field if it's non-nil, zero value otherwise. +func (i *Invitation) GetLogin() string { + if i == nil || i.Login == nil { + return "" + } + return *i.Login +} + +// GetRole returns the Role field if it's non-nil, zero value otherwise. +func (i *Invitation) GetRole() string { + if i == nil || i.Role == nil { + return "" + } + return *i.Role +} + +// GetTeamCount returns the TeamCount field if it's non-nil, zero value otherwise. +func (i *Invitation) GetTeamCount() int { + if i == nil || i.TeamCount == nil { + return 0 + } + return *i.TeamCount +} + +// GetAssignee returns the Assignee field. +func (i *Issue) GetAssignee() *User { + if i == nil { + return nil + } + return i.Assignee +} + +// GetBody returns the Body field if it's non-nil, zero value otherwise. +func (i *Issue) GetBody() string { + if i == nil || i.Body == nil { + return "" + } + return *i.Body +} + +// GetClosedAt returns the ClosedAt field if it's non-nil, zero value otherwise. +func (i *Issue) GetClosedAt() time.Time { + if i == nil || i.ClosedAt == nil { + return time.Time{} + } + return *i.ClosedAt +} + +// GetClosedBy returns the ClosedBy field. +func (i *Issue) GetClosedBy() *User { + if i == nil { + return nil + } + return i.ClosedBy +} + +// GetComments returns the Comments field if it's non-nil, zero value otherwise. +func (i *Issue) GetComments() int { + if i == nil || i.Comments == nil { + return 0 + } + return *i.Comments +} + +// GetCommentsURL returns the CommentsURL field if it's non-nil, zero value otherwise. +func (i *Issue) GetCommentsURL() string { + if i == nil || i.CommentsURL == nil { + return "" + } + return *i.CommentsURL +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (i *Issue) GetCreatedAt() time.Time { + if i == nil || i.CreatedAt == nil { + return time.Time{} + } + return *i.CreatedAt +} + +// GetEventsURL returns the EventsURL field if it's non-nil, zero value otherwise. +func (i *Issue) GetEventsURL() string { + if i == nil || i.EventsURL == nil { + return "" + } + return *i.EventsURL +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (i *Issue) GetHTMLURL() string { + if i == nil || i.HTMLURL == nil { + return "" + } + return *i.HTMLURL +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (i *Issue) GetID() int64 { + if i == nil || i.ID == nil { + return 0 + } + return *i.ID +} + +// GetLabelsURL returns the LabelsURL field if it's non-nil, zero value otherwise. +func (i *Issue) GetLabelsURL() string { + if i == nil || i.LabelsURL == nil { + return "" + } + return *i.LabelsURL +} + +// GetLocked returns the Locked field if it's non-nil, zero value otherwise. +func (i *Issue) GetLocked() bool { + if i == nil || i.Locked == nil { + return false + } + return *i.Locked +} + +// GetMilestone returns the Milestone field. +func (i *Issue) GetMilestone() *Milestone { + if i == nil { + return nil + } + return i.Milestone +} + +// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. +func (i *Issue) GetNodeID() string { + if i == nil || i.NodeID == nil { + return "" + } + return *i.NodeID +} + +// GetNumber returns the Number field if it's non-nil, zero value otherwise. +func (i *Issue) GetNumber() int { + if i == nil || i.Number == nil { + return 0 + } + return *i.Number +} + +// GetPullRequestLinks returns the PullRequestLinks field. +func (i *Issue) GetPullRequestLinks() *PullRequestLinks { + if i == nil { + return nil + } + return i.PullRequestLinks +} + +// GetReactions returns the Reactions field. +func (i *Issue) GetReactions() *Reactions { + if i == nil { + return nil + } + return i.Reactions +} + +// GetRepository returns the Repository field. +func (i *Issue) GetRepository() *Repository { + if i == nil { + return nil + } + return i.Repository +} + +// GetRepositoryURL returns the RepositoryURL field if it's non-nil, zero value otherwise. +func (i *Issue) GetRepositoryURL() string { + if i == nil || i.RepositoryURL == nil { + return "" + } + return *i.RepositoryURL +} + +// GetState returns the State field if it's non-nil, zero value otherwise. +func (i *Issue) GetState() string { + if i == nil || i.State == nil { + return "" + } + return *i.State +} + +// GetTitle returns the Title field if it's non-nil, zero value otherwise. +func (i *Issue) GetTitle() string { + if i == nil || i.Title == nil { + return "" + } + return *i.Title +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (i *Issue) GetUpdatedAt() time.Time { + if i == nil || i.UpdatedAt == nil { + return time.Time{} + } + return *i.UpdatedAt +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (i *Issue) GetURL() string { + if i == nil || i.URL == nil { + return "" + } + return *i.URL +} + +// GetUser returns the User field. +func (i *Issue) GetUser() *User { + if i == nil { + return nil + } + return i.User +} + +// GetAuthorAssociation returns the AuthorAssociation field if it's non-nil, zero value otherwise. +func (i *IssueComment) GetAuthorAssociation() string { + if i == nil || i.AuthorAssociation == nil { + return "" + } + return *i.AuthorAssociation +} + +// GetBody returns the Body field if it's non-nil, zero value otherwise. +func (i *IssueComment) GetBody() string { + if i == nil || i.Body == nil { + return "" + } + return *i.Body +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (i *IssueComment) GetCreatedAt() time.Time { + if i == nil || i.CreatedAt == nil { + return time.Time{} + } + return *i.CreatedAt +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (i *IssueComment) GetHTMLURL() string { + if i == nil || i.HTMLURL == nil { + return "" + } + return *i.HTMLURL +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (i *IssueComment) GetID() int64 { + if i == nil || i.ID == nil { + return 0 + } + return *i.ID +} + +// GetIssueURL returns the IssueURL field if it's non-nil, zero value otherwise. +func (i *IssueComment) GetIssueURL() string { + if i == nil || i.IssueURL == nil { + return "" + } + return *i.IssueURL +} + +// GetReactions returns the Reactions field. +func (i *IssueComment) GetReactions() *Reactions { + if i == nil { + return nil + } + return i.Reactions +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (i *IssueComment) GetUpdatedAt() time.Time { + if i == nil || i.UpdatedAt == nil { + return time.Time{} + } + return *i.UpdatedAt +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (i *IssueComment) GetURL() string { + if i == nil || i.URL == nil { + return "" + } + return *i.URL +} + +// GetUser returns the User field. +func (i *IssueComment) GetUser() *User { + if i == nil { + return nil + } + return i.User +} + +// GetAction returns the Action field if it's non-nil, zero value otherwise. +func (i *IssueCommentEvent) GetAction() string { + if i == nil || i.Action == nil { + return "" + } + return *i.Action +} + +// GetChanges returns the Changes field. +func (i *IssueCommentEvent) GetChanges() *EditChange { + if i == nil { + return nil + } + return i.Changes +} + +// GetComment returns the Comment field. +func (i *IssueCommentEvent) GetComment() *IssueComment { + if i == nil { + return nil + } + return i.Comment +} + +// GetInstallation returns the Installation field. +func (i *IssueCommentEvent) GetInstallation() *Installation { + if i == nil { + return nil + } + return i.Installation +} + +// GetIssue returns the Issue field. +func (i *IssueCommentEvent) GetIssue() *Issue { + if i == nil { + return nil + } + return i.Issue +} + +// GetRepo returns the Repo field. +func (i *IssueCommentEvent) GetRepo() *Repository { + if i == nil { + return nil + } + return i.Repo +} + +// GetSender returns the Sender field. +func (i *IssueCommentEvent) GetSender() *User { + if i == nil { + return nil + } + return i.Sender +} + +// GetActor returns the Actor field. +func (i *IssueEvent) GetActor() *User { + if i == nil { + return nil + } + return i.Actor +} + +// GetAssignee returns the Assignee field. +func (i *IssueEvent) GetAssignee() *User { + if i == nil { + return nil + } + return i.Assignee +} + +// GetAssigner returns the Assigner field. +func (i *IssueEvent) GetAssigner() *User { + if i == nil { + return nil + } + return i.Assigner +} + +// GetCommitID returns the CommitID field if it's non-nil, zero value otherwise. +func (i *IssueEvent) GetCommitID() string { + if i == nil || i.CommitID == nil { + return "" + } + return *i.CommitID +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (i *IssueEvent) GetCreatedAt() time.Time { + if i == nil || i.CreatedAt == nil { + return time.Time{} + } + return *i.CreatedAt +} + +// GetEvent returns the Event field if it's non-nil, zero value otherwise. +func (i *IssueEvent) GetEvent() string { + if i == nil || i.Event == nil { + return "" + } + return *i.Event +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (i *IssueEvent) GetID() int64 { + if i == nil || i.ID == nil { + return 0 + } + return *i.ID +} + +// GetIssue returns the Issue field. +func (i *IssueEvent) GetIssue() *Issue { + if i == nil { + return nil + } + return i.Issue +} + +// GetLabel returns the Label field. +func (i *IssueEvent) GetLabel() *Label { + if i == nil { + return nil + } + return i.Label +} + +// GetMilestone returns the Milestone field. +func (i *IssueEvent) GetMilestone() *Milestone { + if i == nil { + return nil + } + return i.Milestone +} + +// GetRename returns the Rename field. +func (i *IssueEvent) GetRename() *Rename { + if i == nil { + return nil + } + return i.Rename +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (i *IssueEvent) GetURL() string { + if i == nil || i.URL == nil { + return "" + } + return *i.URL +} + +// GetAssignee returns the Assignee field if it's non-nil, zero value otherwise. +func (i *IssueRequest) GetAssignee() string { + if i == nil || i.Assignee == nil { + return "" + } + return *i.Assignee +} + +// GetAssignees returns the Assignees field if it's non-nil, zero value otherwise. +func (i *IssueRequest) GetAssignees() []string { + if i == nil || i.Assignees == nil { + return nil + } + return *i.Assignees +} + +// GetBody returns the Body field if it's non-nil, zero value otherwise. +func (i *IssueRequest) GetBody() string { + if i == nil || i.Body == nil { + return "" + } + return *i.Body +} + +// GetLabels returns the Labels field if it's non-nil, zero value otherwise. +func (i *IssueRequest) GetLabels() []string { + if i == nil || i.Labels == nil { + return nil + } + return *i.Labels +} + +// GetMilestone returns the Milestone field if it's non-nil, zero value otherwise. +func (i *IssueRequest) GetMilestone() int { + if i == nil || i.Milestone == nil { + return 0 + } + return *i.Milestone +} + +// GetState returns the State field if it's non-nil, zero value otherwise. +func (i *IssueRequest) GetState() string { + if i == nil || i.State == nil { + return "" + } + return *i.State +} + +// GetTitle returns the Title field if it's non-nil, zero value otherwise. +func (i *IssueRequest) GetTitle() string { + if i == nil || i.Title == nil { + return "" + } + return *i.Title +} + +// GetAction returns the Action field if it's non-nil, zero value otherwise. +func (i *IssuesEvent) GetAction() string { + if i == nil || i.Action == nil { + return "" + } + return *i.Action +} + +// GetAssignee returns the Assignee field. +func (i *IssuesEvent) GetAssignee() *User { + if i == nil { + return nil + } + return i.Assignee +} + +// GetChanges returns the Changes field. +func (i *IssuesEvent) GetChanges() *EditChange { + if i == nil { + return nil + } + return i.Changes +} + +// GetInstallation returns the Installation field. +func (i *IssuesEvent) GetInstallation() *Installation { + if i == nil { + return nil + } + return i.Installation +} + +// GetIssue returns the Issue field. +func (i *IssuesEvent) GetIssue() *Issue { + if i == nil { + return nil + } + return i.Issue +} + +// GetLabel returns the Label field. +func (i *IssuesEvent) GetLabel() *Label { + if i == nil { + return nil + } + return i.Label +} + +// GetRepo returns the Repo field. +func (i *IssuesEvent) GetRepo() *Repository { + if i == nil { + return nil + } + return i.Repo +} + +// GetSender returns the Sender field. +func (i *IssuesEvent) GetSender() *User { + if i == nil { + return nil + } + return i.Sender +} + +// GetIncompleteResults returns the IncompleteResults field if it's non-nil, zero value otherwise. +func (i *IssuesSearchResult) GetIncompleteResults() bool { + if i == nil || i.IncompleteResults == nil { + return false + } + return *i.IncompleteResults +} + +// GetTotal returns the Total field if it's non-nil, zero value otherwise. +func (i *IssuesSearchResult) GetTotal() int { + if i == nil || i.Total == nil { + return 0 + } + return *i.Total +} + +// GetClosedIssues returns the ClosedIssues field if it's non-nil, zero value otherwise. +func (i *IssueStats) GetClosedIssues() int { + if i == nil || i.ClosedIssues == nil { + return 0 + } + return *i.ClosedIssues +} + +// GetOpenIssues returns the OpenIssues field if it's non-nil, zero value otherwise. +func (i *IssueStats) GetOpenIssues() int { + if i == nil || i.OpenIssues == nil { + return 0 + } + return *i.OpenIssues +} + +// GetTotalIssues returns the TotalIssues field if it's non-nil, zero value otherwise. +func (i *IssueStats) GetTotalIssues() int { + if i == nil || i.TotalIssues == nil { + return 0 + } + return *i.TotalIssues +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (k *Key) GetID() int64 { + if k == nil || k.ID == nil { + return 0 + } + return *k.ID +} + +// GetKey returns the Key field if it's non-nil, zero value otherwise. +func (k *Key) GetKey() string { + if k == nil || k.Key == nil { + return "" + } + return *k.Key +} + +// GetReadOnly returns the ReadOnly field if it's non-nil, zero value otherwise. +func (k *Key) GetReadOnly() bool { + if k == nil || k.ReadOnly == nil { + return false + } + return *k.ReadOnly +} + +// GetTitle returns the Title field if it's non-nil, zero value otherwise. +func (k *Key) GetTitle() string { + if k == nil || k.Title == nil { + return "" + } + return *k.Title +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (k *Key) GetURL() string { + if k == nil || k.URL == nil { + return "" + } + return *k.URL +} + +// GetColor returns the Color field if it's non-nil, zero value otherwise. +func (l *Label) GetColor() string { + if l == nil || l.Color == nil { + return "" + } + return *l.Color +} + +// GetDefault returns the Default field if it's non-nil, zero value otherwise. +func (l *Label) GetDefault() bool { + if l == nil || l.Default == nil { + return false + } + return *l.Default +} + +// GetDescription returns the Description field if it's non-nil, zero value otherwise. +func (l *Label) GetDescription() string { + if l == nil || l.Description == nil { + return "" + } + return *l.Description +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (l *Label) GetID() int64 { + if l == nil || l.ID == nil { + return 0 + } + return *l.ID +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (l *Label) GetName() string { + if l == nil || l.Name == nil { + return "" + } + return *l.Name +} + +// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. +func (l *Label) GetNodeID() string { + if l == nil || l.NodeID == nil { + return "" + } + return *l.NodeID +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (l *Label) GetURL() string { + if l == nil || l.URL == nil { + return "" + } + return *l.URL +} + +// GetAction returns the Action field if it's non-nil, zero value otherwise. +func (l *LabelEvent) GetAction() string { + if l == nil || l.Action == nil { + return "" + } + return *l.Action +} + +// GetChanges returns the Changes field. +func (l *LabelEvent) GetChanges() *EditChange { + if l == nil { + return nil + } + return l.Changes +} + +// GetInstallation returns the Installation field. +func (l *LabelEvent) GetInstallation() *Installation { + if l == nil { + return nil + } + return l.Installation +} + +// GetLabel returns the Label field. +func (l *LabelEvent) GetLabel() *Label { + if l == nil { + return nil + } + return l.Label +} + +// GetOrg returns the Org field. +func (l *LabelEvent) GetOrg() *Organization { + if l == nil { + return nil + } + return l.Org +} + +// GetRepo returns the Repo field. +func (l *LabelEvent) GetRepo() *Repository { + if l == nil { + return nil + } + return l.Repo +} + +// GetColor returns the Color field if it's non-nil, zero value otherwise. +func (l *LabelResult) GetColor() string { + if l == nil || l.Color == nil { + return "" + } + return *l.Color +} + +// GetDefault returns the Default field if it's non-nil, zero value otherwise. +func (l *LabelResult) GetDefault() bool { + if l == nil || l.Default == nil { + return false + } + return *l.Default +} + +// GetDescription returns the Description field if it's non-nil, zero value otherwise. +func (l *LabelResult) GetDescription() string { + if l == nil || l.Description == nil { + return "" + } + return *l.Description +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (l *LabelResult) GetID() int64 { + if l == nil || l.ID == nil { + return 0 + } + return *l.ID +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (l *LabelResult) GetName() string { + if l == nil || l.Name == nil { + return "" + } + return *l.Name +} + +// GetScore returns the Score field. +func (l *LabelResult) GetScore() *float64 { + if l == nil { + return nil + } + return l.Score +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (l *LabelResult) GetURL() string { + if l == nil || l.URL == nil { + return "" + } + return *l.URL +} + +// GetIncompleteResults returns the IncompleteResults field if it's non-nil, zero value otherwise. +func (l *LabelsSearchResult) GetIncompleteResults() bool { + if l == nil || l.IncompleteResults == nil { + return false + } + return *l.IncompleteResults +} + +// GetTotal returns the Total field if it's non-nil, zero value otherwise. +func (l *LabelsSearchResult) GetTotal() int { + if l == nil || l.Total == nil { + return 0 + } + return *l.Total +} + +// GetOID returns the OID field if it's non-nil, zero value otherwise. +func (l *LargeFile) GetOID() string { + if l == nil || l.OID == nil { + return "" + } + return *l.OID +} + +// GetPath returns the Path field if it's non-nil, zero value otherwise. +func (l *LargeFile) GetPath() string { + if l == nil || l.Path == nil { + return "" + } + return *l.Path +} + +// GetRefName returns the RefName field if it's non-nil, zero value otherwise. +func (l *LargeFile) GetRefName() string { + if l == nil || l.RefName == nil { + return "" + } + return *l.RefName +} + +// GetSize returns the Size field if it's non-nil, zero value otherwise. +func (l *LargeFile) GetSize() int { + if l == nil || l.Size == nil { + return 0 + } + return *l.Size +} + +// GetBody returns the Body field if it's non-nil, zero value otherwise. +func (l *License) GetBody() string { + if l == nil || l.Body == nil { + return "" + } + return *l.Body +} + +// GetConditions returns the Conditions field if it's non-nil, zero value otherwise. +func (l *License) GetConditions() []string { + if l == nil || l.Conditions == nil { + return nil + } + return *l.Conditions +} + +// GetDescription returns the Description field if it's non-nil, zero value otherwise. +func (l *License) GetDescription() string { + if l == nil || l.Description == nil { + return "" + } + return *l.Description +} + +// GetFeatured returns the Featured field if it's non-nil, zero value otherwise. +func (l *License) GetFeatured() bool { + if l == nil || l.Featured == nil { + return false + } + return *l.Featured +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (l *License) GetHTMLURL() string { + if l == nil || l.HTMLURL == nil { + return "" + } + return *l.HTMLURL +} + +// GetImplementation returns the Implementation field if it's non-nil, zero value otherwise. +func (l *License) GetImplementation() string { + if l == nil || l.Implementation == nil { + return "" + } + return *l.Implementation +} + +// GetKey returns the Key field if it's non-nil, zero value otherwise. +func (l *License) GetKey() string { + if l == nil || l.Key == nil { + return "" + } + return *l.Key +} + +// GetLimitations returns the Limitations field if it's non-nil, zero value otherwise. +func (l *License) GetLimitations() []string { + if l == nil || l.Limitations == nil { + return nil + } + return *l.Limitations +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (l *License) GetName() string { + if l == nil || l.Name == nil { + return "" + } + return *l.Name +} + +// GetPermissions returns the Permissions field if it's non-nil, zero value otherwise. +func (l *License) GetPermissions() []string { + if l == nil || l.Permissions == nil { + return nil + } + return *l.Permissions +} + +// GetSPDXID returns the SPDXID field if it's non-nil, zero value otherwise. +func (l *License) GetSPDXID() string { + if l == nil || l.SPDXID == nil { + return "" + } + return *l.SPDXID +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (l *License) GetURL() string { + if l == nil || l.URL == nil { + return "" + } + return *l.URL +} + +// GetAccountsURL returns the AccountsURL field if it's non-nil, zero value otherwise. +func (m *MarketplacePlan) GetAccountsURL() string { + if m == nil || m.AccountsURL == nil { + return "" + } + return *m.AccountsURL +} + +// GetBullets returns the Bullets field if it's non-nil, zero value otherwise. +func (m *MarketplacePlan) GetBullets() []string { + if m == nil || m.Bullets == nil { + return nil + } + return *m.Bullets +} + +// GetDescription returns the Description field if it's non-nil, zero value otherwise. +func (m *MarketplacePlan) GetDescription() string { + if m == nil || m.Description == nil { + return "" + } + return *m.Description +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (m *MarketplacePlan) GetID() int64 { + if m == nil || m.ID == nil { + return 0 + } + return *m.ID +} + +// GetMonthlyPriceInCents returns the MonthlyPriceInCents field if it's non-nil, zero value otherwise. +func (m *MarketplacePlan) GetMonthlyPriceInCents() int { + if m == nil || m.MonthlyPriceInCents == nil { + return 0 + } + return *m.MonthlyPriceInCents +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (m *MarketplacePlan) GetName() string { + if m == nil || m.Name == nil { + return "" + } + return *m.Name +} + +// GetPriceModel returns the PriceModel field if it's non-nil, zero value otherwise. +func (m *MarketplacePlan) GetPriceModel() string { + if m == nil || m.PriceModel == nil { + return "" + } + return *m.PriceModel +} + +// GetUnitName returns the UnitName field if it's non-nil, zero value otherwise. +func (m *MarketplacePlan) GetUnitName() string { + if m == nil || m.UnitName == nil { + return "" + } + return *m.UnitName +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (m *MarketplacePlan) GetURL() string { + if m == nil || m.URL == nil { + return "" + } + return *m.URL +} + +// GetYearlyPriceInCents returns the YearlyPriceInCents field if it's non-nil, zero value otherwise. +func (m *MarketplacePlan) GetYearlyPriceInCents() int { + if m == nil || m.YearlyPriceInCents == nil { + return 0 + } + return *m.YearlyPriceInCents +} + +// GetEmail returns the Email field if it's non-nil, zero value otherwise. +func (m *MarketplacePlanAccount) GetEmail() string { + if m == nil || m.Email == nil { + return "" + } + return *m.Email +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (m *MarketplacePlanAccount) GetID() int64 { + if m == nil || m.ID == nil { + return 0 + } + return *m.ID +} + +// GetLogin returns the Login field if it's non-nil, zero value otherwise. +func (m *MarketplacePlanAccount) GetLogin() string { + if m == nil || m.Login == nil { + return "" + } + return *m.Login +} + +// GetMarketplacePurchase returns the MarketplacePurchase field. +func (m *MarketplacePlanAccount) GetMarketplacePurchase() *MarketplacePurchase { + if m == nil { + return nil + } + return m.MarketplacePurchase +} + +// GetOrganizationBillingEmail returns the OrganizationBillingEmail field if it's non-nil, zero value otherwise. +func (m *MarketplacePlanAccount) GetOrganizationBillingEmail() string { + if m == nil || m.OrganizationBillingEmail == nil { + return "" + } + return *m.OrganizationBillingEmail +} + +// GetType returns the Type field if it's non-nil, zero value otherwise. +func (m *MarketplacePlanAccount) GetType() string { + if m == nil || m.Type == nil { + return "" + } + return *m.Type +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (m *MarketplacePlanAccount) GetURL() string { + if m == nil || m.URL == nil { + return "" + } + return *m.URL +} + +// GetAccount returns the Account field. +func (m *MarketplacePurchase) GetAccount() *MarketplacePlanAccount { + if m == nil { + return nil + } + return m.Account +} + +// GetBillingCycle returns the BillingCycle field if it's non-nil, zero value otherwise. +func (m *MarketplacePurchase) GetBillingCycle() string { + if m == nil || m.BillingCycle == nil { + return "" + } + return *m.BillingCycle +} + +// GetNextBillingDate returns the NextBillingDate field if it's non-nil, zero value otherwise. +func (m *MarketplacePurchase) GetNextBillingDate() string { + if m == nil || m.NextBillingDate == nil { + return "" + } + return *m.NextBillingDate +} + +// GetPlan returns the Plan field. +func (m *MarketplacePurchase) GetPlan() *MarketplacePlan { + if m == nil { + return nil + } + return m.Plan +} + +// GetUnitCount returns the UnitCount field if it's non-nil, zero value otherwise. +func (m *MarketplacePurchase) GetUnitCount() int { + if m == nil || m.UnitCount == nil { + return 0 + } + return *m.UnitCount +} + +// GetAction returns the Action field if it's non-nil, zero value otherwise. +func (m *MarketplacePurchaseEvent) GetAction() string { + if m == nil || m.Action == nil { + return "" + } + return *m.Action +} + +// GetEffectiveDate returns the EffectiveDate field if it's non-nil, zero value otherwise. +func (m *MarketplacePurchaseEvent) GetEffectiveDate() Timestamp { + if m == nil || m.EffectiveDate == nil { + return Timestamp{} + } + return *m.EffectiveDate +} + +// GetInstallation returns the Installation field. +func (m *MarketplacePurchaseEvent) GetInstallation() *Installation { + if m == nil { + return nil + } + return m.Installation +} + +// GetMarketplacePurchase returns the MarketplacePurchase field. +func (m *MarketplacePurchaseEvent) GetMarketplacePurchase() *MarketplacePurchase { + if m == nil { + return nil + } + return m.MarketplacePurchase +} + +// GetPreviousMarketplacePurchase returns the PreviousMarketplacePurchase field. +func (m *MarketplacePurchaseEvent) GetPreviousMarketplacePurchase() *MarketplacePurchase { + if m == nil { + return nil + } + return m.PreviousMarketplacePurchase +} + +// GetSender returns the Sender field. +func (m *MarketplacePurchaseEvent) GetSender() *User { + if m == nil { + return nil + } + return m.Sender +} + +// GetText returns the Text field if it's non-nil, zero value otherwise. +func (m *Match) GetText() string { + if m == nil || m.Text == nil { + return "" + } + return *m.Text +} + +// GetAction returns the Action field if it's non-nil, zero value otherwise. +func (m *MemberEvent) GetAction() string { + if m == nil || m.Action == nil { + return "" + } + return *m.Action +} + +// GetInstallation returns the Installation field. +func (m *MemberEvent) GetInstallation() *Installation { + if m == nil { + return nil + } + return m.Installation +} + +// GetMember returns the Member field. +func (m *MemberEvent) GetMember() *User { + if m == nil { + return nil + } + return m.Member +} + +// GetRepo returns the Repo field. +func (m *MemberEvent) GetRepo() *Repository { + if m == nil { + return nil + } + return m.Repo +} + +// GetSender returns the Sender field. +func (m *MemberEvent) GetSender() *User { + if m == nil { + return nil + } + return m.Sender +} + +// GetOrganization returns the Organization field. +func (m *Membership) GetOrganization() *Organization { + if m == nil { + return nil + } + return m.Organization +} + +// GetOrganizationURL returns the OrganizationURL field if it's non-nil, zero value otherwise. +func (m *Membership) GetOrganizationURL() string { + if m == nil || m.OrganizationURL == nil { + return "" + } + return *m.OrganizationURL +} + +// GetRole returns the Role field if it's non-nil, zero value otherwise. +func (m *Membership) GetRole() string { + if m == nil || m.Role == nil { + return "" + } + return *m.Role +} + +// GetState returns the State field if it's non-nil, zero value otherwise. +func (m *Membership) GetState() string { + if m == nil || m.State == nil { + return "" + } + return *m.State +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (m *Membership) GetURL() string { + if m == nil || m.URL == nil { + return "" + } + return *m.URL +} + +// GetUser returns the User field. +func (m *Membership) GetUser() *User { + if m == nil { + return nil + } + return m.User +} + +// GetAction returns the Action field if it's non-nil, zero value otherwise. +func (m *MembershipEvent) GetAction() string { + if m == nil || m.Action == nil { + return "" + } + return *m.Action +} + +// GetInstallation returns the Installation field. +func (m *MembershipEvent) GetInstallation() *Installation { + if m == nil { + return nil + } + return m.Installation +} + +// GetMember returns the Member field. +func (m *MembershipEvent) GetMember() *User { + if m == nil { + return nil + } + return m.Member +} + +// GetOrg returns the Org field. +func (m *MembershipEvent) GetOrg() *Organization { + if m == nil { + return nil + } + return m.Org +} + +// GetScope returns the Scope field if it's non-nil, zero value otherwise. +func (m *MembershipEvent) GetScope() string { + if m == nil || m.Scope == nil { + return "" + } + return *m.Scope +} + +// GetSender returns the Sender field. +func (m *MembershipEvent) GetSender() *User { + if m == nil { + return nil + } + return m.Sender +} + +// GetTeam returns the Team field. +func (m *MembershipEvent) GetTeam() *Team { + if m == nil { + return nil + } + return m.Team +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (m *Metric) GetHTMLURL() string { + if m == nil || m.HTMLURL == nil { + return "" + } + return *m.HTMLURL +} + +// GetKey returns the Key field if it's non-nil, zero value otherwise. +func (m *Metric) GetKey() string { + if m == nil || m.Key == nil { + return "" + } + return *m.Key +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (m *Metric) GetName() string { + if m == nil || m.Name == nil { + return "" + } + return *m.Name +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (m *Metric) GetURL() string { + if m == nil || m.URL == nil { + return "" + } + return *m.URL +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (m *Migration) GetCreatedAt() string { + if m == nil || m.CreatedAt == nil { + return "" + } + return *m.CreatedAt +} + +// GetExcludeAttachments returns the ExcludeAttachments field if it's non-nil, zero value otherwise. +func (m *Migration) GetExcludeAttachments() bool { + if m == nil || m.ExcludeAttachments == nil { + return false + } + return *m.ExcludeAttachments +} + +// GetGUID returns the GUID field if it's non-nil, zero value otherwise. +func (m *Migration) GetGUID() string { + if m == nil || m.GUID == nil { + return "" + } + return *m.GUID +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (m *Migration) GetID() int64 { + if m == nil || m.ID == nil { + return 0 + } + return *m.ID +} + +// GetLockRepositories returns the LockRepositories field if it's non-nil, zero value otherwise. +func (m *Migration) GetLockRepositories() bool { + if m == nil || m.LockRepositories == nil { + return false + } + return *m.LockRepositories +} + +// GetState returns the State field if it's non-nil, zero value otherwise. +func (m *Migration) GetState() string { + if m == nil || m.State == nil { + return "" + } + return *m.State +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (m *Migration) GetUpdatedAt() string { + if m == nil || m.UpdatedAt == nil { + return "" + } + return *m.UpdatedAt +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (m *Migration) GetURL() string { + if m == nil || m.URL == nil { + return "" + } + return *m.URL +} + +// GetClosedAt returns the ClosedAt field if it's non-nil, zero value otherwise. +func (m *Milestone) GetClosedAt() time.Time { + if m == nil || m.ClosedAt == nil { + return time.Time{} + } + return *m.ClosedAt +} + +// GetClosedIssues returns the ClosedIssues field if it's non-nil, zero value otherwise. +func (m *Milestone) GetClosedIssues() int { + if m == nil || m.ClosedIssues == nil { + return 0 + } + return *m.ClosedIssues +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (m *Milestone) GetCreatedAt() time.Time { + if m == nil || m.CreatedAt == nil { + return time.Time{} + } + return *m.CreatedAt +} + +// GetCreator returns the Creator field. +func (m *Milestone) GetCreator() *User { + if m == nil { + return nil + } + return m.Creator +} + +// GetDescription returns the Description field if it's non-nil, zero value otherwise. +func (m *Milestone) GetDescription() string { + if m == nil || m.Description == nil { + return "" + } + return *m.Description +} + +// GetDueOn returns the DueOn field if it's non-nil, zero value otherwise. +func (m *Milestone) GetDueOn() time.Time { + if m == nil || m.DueOn == nil { + return time.Time{} + } + return *m.DueOn +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (m *Milestone) GetHTMLURL() string { + if m == nil || m.HTMLURL == nil { + return "" + } + return *m.HTMLURL +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (m *Milestone) GetID() int64 { + if m == nil || m.ID == nil { + return 0 + } + return *m.ID +} + +// GetLabelsURL returns the LabelsURL field if it's non-nil, zero value otherwise. +func (m *Milestone) GetLabelsURL() string { + if m == nil || m.LabelsURL == nil { + return "" + } + return *m.LabelsURL +} + +// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. +func (m *Milestone) GetNodeID() string { + if m == nil || m.NodeID == nil { + return "" + } + return *m.NodeID +} + +// GetNumber returns the Number field if it's non-nil, zero value otherwise. +func (m *Milestone) GetNumber() int { + if m == nil || m.Number == nil { + return 0 + } + return *m.Number +} + +// GetOpenIssues returns the OpenIssues field if it's non-nil, zero value otherwise. +func (m *Milestone) GetOpenIssues() int { + if m == nil || m.OpenIssues == nil { + return 0 + } + return *m.OpenIssues +} + +// GetState returns the State field if it's non-nil, zero value otherwise. +func (m *Milestone) GetState() string { + if m == nil || m.State == nil { + return "" + } + return *m.State +} + +// GetTitle returns the Title field if it's non-nil, zero value otherwise. +func (m *Milestone) GetTitle() string { + if m == nil || m.Title == nil { + return "" + } + return *m.Title +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (m *Milestone) GetUpdatedAt() time.Time { + if m == nil || m.UpdatedAt == nil { + return time.Time{} + } + return *m.UpdatedAt +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (m *Milestone) GetURL() string { + if m == nil || m.URL == nil { + return "" + } + return *m.URL +} + +// GetAction returns the Action field if it's non-nil, zero value otherwise. +func (m *MilestoneEvent) GetAction() string { + if m == nil || m.Action == nil { + return "" + } + return *m.Action +} + +// GetChanges returns the Changes field. +func (m *MilestoneEvent) GetChanges() *EditChange { + if m == nil { + return nil + } + return m.Changes +} + +// GetInstallation returns the Installation field. +func (m *MilestoneEvent) GetInstallation() *Installation { + if m == nil { + return nil + } + return m.Installation +} + +// GetMilestone returns the Milestone field. +func (m *MilestoneEvent) GetMilestone() *Milestone { + if m == nil { + return nil + } + return m.Milestone +} + +// GetOrg returns the Org field. +func (m *MilestoneEvent) GetOrg() *Organization { + if m == nil { + return nil + } + return m.Org +} + +// GetRepo returns the Repo field. +func (m *MilestoneEvent) GetRepo() *Repository { + if m == nil { + return nil + } + return m.Repo +} + +// GetSender returns the Sender field. +func (m *MilestoneEvent) GetSender() *User { + if m == nil { + return nil + } + return m.Sender +} + +// GetClosedMilestones returns the ClosedMilestones field if it's non-nil, zero value otherwise. +func (m *MilestoneStats) GetClosedMilestones() int { + if m == nil || m.ClosedMilestones == nil { + return 0 + } + return *m.ClosedMilestones +} + +// GetOpenMilestones returns the OpenMilestones field if it's non-nil, zero value otherwise. +func (m *MilestoneStats) GetOpenMilestones() int { + if m == nil || m.OpenMilestones == nil { + return 0 + } + return *m.OpenMilestones +} + +// GetTotalMilestones returns the TotalMilestones field if it's non-nil, zero value otherwise. +func (m *MilestoneStats) GetTotalMilestones() int { + if m == nil || m.TotalMilestones == nil { + return 0 + } + return *m.TotalMilestones +} + +// GetBase returns the Base field if it's non-nil, zero value otherwise. +func (n *NewPullRequest) GetBase() string { + if n == nil || n.Base == nil { + return "" + } + return *n.Base +} + +// GetBody returns the Body field if it's non-nil, zero value otherwise. +func (n *NewPullRequest) GetBody() string { + if n == nil || n.Body == nil { + return "" + } + return *n.Body +} + +// GetHead returns the Head field if it's non-nil, zero value otherwise. +func (n *NewPullRequest) GetHead() string { + if n == nil || n.Head == nil { + return "" + } + return *n.Head +} + +// GetIssue returns the Issue field if it's non-nil, zero value otherwise. +func (n *NewPullRequest) GetIssue() int { + if n == nil || n.Issue == nil { + return 0 + } + return *n.Issue +} + +// GetMaintainerCanModify returns the MaintainerCanModify field if it's non-nil, zero value otherwise. +func (n *NewPullRequest) GetMaintainerCanModify() bool { + if n == nil || n.MaintainerCanModify == nil { + return false + } + return *n.MaintainerCanModify +} + +// GetTitle returns the Title field if it's non-nil, zero value otherwise. +func (n *NewPullRequest) GetTitle() string { + if n == nil || n.Title == nil { + return "" + } + return *n.Title +} + +// GetDescription returns the Description field if it's non-nil, zero value otherwise. +func (n *NewTeam) GetDescription() string { + if n == nil || n.Description == nil { + return "" + } + return *n.Description +} + +// GetLDAPDN returns the LDAPDN field if it's non-nil, zero value otherwise. +func (n *NewTeam) GetLDAPDN() string { + if n == nil || n.LDAPDN == nil { + return "" + } + return *n.LDAPDN +} + +// GetParentTeamID returns the ParentTeamID field if it's non-nil, zero value otherwise. +func (n *NewTeam) GetParentTeamID() int64 { + if n == nil || n.ParentTeamID == nil { + return 0 + } + return *n.ParentTeamID +} + +// GetPermission returns the Permission field if it's non-nil, zero value otherwise. +func (n *NewTeam) GetPermission() string { + if n == nil || n.Permission == nil { + return "" + } + return *n.Permission +} + +// GetPrivacy returns the Privacy field if it's non-nil, zero value otherwise. +func (n *NewTeam) GetPrivacy() string { + if n == nil || n.Privacy == nil { + return "" + } + return *n.Privacy +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (n *Notification) GetID() string { + if n == nil || n.ID == nil { + return "" + } + return *n.ID +} + +// GetLastReadAt returns the LastReadAt field if it's non-nil, zero value otherwise. +func (n *Notification) GetLastReadAt() time.Time { + if n == nil || n.LastReadAt == nil { + return time.Time{} + } + return *n.LastReadAt +} + +// GetReason returns the Reason field if it's non-nil, zero value otherwise. +func (n *Notification) GetReason() string { + if n == nil || n.Reason == nil { + return "" + } + return *n.Reason +} + +// GetRepository returns the Repository field. +func (n *Notification) GetRepository() *Repository { + if n == nil { + return nil + } + return n.Repository +} + +// GetSubject returns the Subject field. +func (n *Notification) GetSubject() *NotificationSubject { + if n == nil { + return nil + } + return n.Subject +} + +// GetUnread returns the Unread field if it's non-nil, zero value otherwise. +func (n *Notification) GetUnread() bool { + if n == nil || n.Unread == nil { + return false + } + return *n.Unread +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (n *Notification) GetUpdatedAt() time.Time { + if n == nil || n.UpdatedAt == nil { + return time.Time{} + } + return *n.UpdatedAt +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (n *Notification) GetURL() string { + if n == nil || n.URL == nil { + return "" + } + return *n.URL +} + +// GetLatestCommentURL returns the LatestCommentURL field if it's non-nil, zero value otherwise. +func (n *NotificationSubject) GetLatestCommentURL() string { + if n == nil || n.LatestCommentURL == nil { + return "" + } + return *n.LatestCommentURL +} + +// GetTitle returns the Title field if it's non-nil, zero value otherwise. +func (n *NotificationSubject) GetTitle() string { + if n == nil || n.Title == nil { + return "" + } + return *n.Title +} + +// GetType returns the Type field if it's non-nil, zero value otherwise. +func (n *NotificationSubject) GetType() string { + if n == nil || n.Type == nil { + return "" + } + return *n.Type +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (n *NotificationSubject) GetURL() string { + if n == nil || n.URL == nil { + return "" + } + return *n.URL +} + +// GetAvatarURL returns the AvatarURL field if it's non-nil, zero value otherwise. +func (o *Organization) GetAvatarURL() string { + if o == nil || o.AvatarURL == nil { + return "" + } + return *o.AvatarURL +} + +// GetBillingEmail returns the BillingEmail field if it's non-nil, zero value otherwise. +func (o *Organization) GetBillingEmail() string { + if o == nil || o.BillingEmail == nil { + return "" + } + return *o.BillingEmail +} + +// GetBlog returns the Blog field if it's non-nil, zero value otherwise. +func (o *Organization) GetBlog() string { + if o == nil || o.Blog == nil { + return "" + } + return *o.Blog +} + +// GetCollaborators returns the Collaborators field if it's non-nil, zero value otherwise. +func (o *Organization) GetCollaborators() int { + if o == nil || o.Collaborators == nil { + return 0 + } + return *o.Collaborators +} + +// GetCompany returns the Company field if it's non-nil, zero value otherwise. +func (o *Organization) GetCompany() string { + if o == nil || o.Company == nil { + return "" + } + return *o.Company +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (o *Organization) GetCreatedAt() time.Time { + if o == nil || o.CreatedAt == nil { + return time.Time{} + } + return *o.CreatedAt +} + +// GetDescription returns the Description field if it's non-nil, zero value otherwise. +func (o *Organization) GetDescription() string { + if o == nil || o.Description == nil { + return "" + } + return *o.Description +} + +// GetDiskUsage returns the DiskUsage field if it's non-nil, zero value otherwise. +func (o *Organization) GetDiskUsage() int { + if o == nil || o.DiskUsage == nil { + return 0 + } + return *o.DiskUsage +} + +// GetEmail returns the Email field if it's non-nil, zero value otherwise. +func (o *Organization) GetEmail() string { + if o == nil || o.Email == nil { + return "" + } + return *o.Email +} + +// GetEventsURL returns the EventsURL field if it's non-nil, zero value otherwise. +func (o *Organization) GetEventsURL() string { + if o == nil || o.EventsURL == nil { + return "" + } + return *o.EventsURL +} + +// GetFollowers returns the Followers field if it's non-nil, zero value otherwise. +func (o *Organization) GetFollowers() int { + if o == nil || o.Followers == nil { + return 0 + } + return *o.Followers +} + +// GetFollowing returns the Following field if it's non-nil, zero value otherwise. +func (o *Organization) GetFollowing() int { + if o == nil || o.Following == nil { + return 0 + } + return *o.Following +} + +// GetHooksURL returns the HooksURL field if it's non-nil, zero value otherwise. +func (o *Organization) GetHooksURL() string { + if o == nil || o.HooksURL == nil { + return "" + } + return *o.HooksURL +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (o *Organization) GetHTMLURL() string { + if o == nil || o.HTMLURL == nil { + return "" + } + return *o.HTMLURL +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (o *Organization) GetID() int64 { + if o == nil || o.ID == nil { + return 0 + } + return *o.ID +} + +// GetIssuesURL returns the IssuesURL field if it's non-nil, zero value otherwise. +func (o *Organization) GetIssuesURL() string { + if o == nil || o.IssuesURL == nil { + return "" + } + return *o.IssuesURL +} + +// GetLocation returns the Location field if it's non-nil, zero value otherwise. +func (o *Organization) GetLocation() string { + if o == nil || o.Location == nil { + return "" + } + return *o.Location +} + +// GetLogin returns the Login field if it's non-nil, zero value otherwise. +func (o *Organization) GetLogin() string { + if o == nil || o.Login == nil { + return "" + } + return *o.Login +} + +// GetMembersURL returns the MembersURL field if it's non-nil, zero value otherwise. +func (o *Organization) GetMembersURL() string { + if o == nil || o.MembersURL == nil { + return "" + } + return *o.MembersURL +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (o *Organization) GetName() string { + if o == nil || o.Name == nil { + return "" + } + return *o.Name +} + +// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. +func (o *Organization) GetNodeID() string { + if o == nil || o.NodeID == nil { + return "" + } + return *o.NodeID +} + +// GetOwnedPrivateRepos returns the OwnedPrivateRepos field if it's non-nil, zero value otherwise. +func (o *Organization) GetOwnedPrivateRepos() int { + if o == nil || o.OwnedPrivateRepos == nil { + return 0 + } + return *o.OwnedPrivateRepos +} + +// GetPlan returns the Plan field. +func (o *Organization) GetPlan() *Plan { + if o == nil { + return nil + } + return o.Plan +} + +// GetPrivateGists returns the PrivateGists field if it's non-nil, zero value otherwise. +func (o *Organization) GetPrivateGists() int { + if o == nil || o.PrivateGists == nil { + return 0 + } + return *o.PrivateGists +} + +// GetPublicGists returns the PublicGists field if it's non-nil, zero value otherwise. +func (o *Organization) GetPublicGists() int { + if o == nil || o.PublicGists == nil { + return 0 + } + return *o.PublicGists +} + +// GetPublicMembersURL returns the PublicMembersURL field if it's non-nil, zero value otherwise. +func (o *Organization) GetPublicMembersURL() string { + if o == nil || o.PublicMembersURL == nil { + return "" + } + return *o.PublicMembersURL +} + +// GetPublicRepos returns the PublicRepos field if it's non-nil, zero value otherwise. +func (o *Organization) GetPublicRepos() int { + if o == nil || o.PublicRepos == nil { + return 0 + } + return *o.PublicRepos +} + +// GetReposURL returns the ReposURL field if it's non-nil, zero value otherwise. +func (o *Organization) GetReposURL() string { + if o == nil || o.ReposURL == nil { + return "" + } + return *o.ReposURL +} + +// GetTotalPrivateRepos returns the TotalPrivateRepos field if it's non-nil, zero value otherwise. +func (o *Organization) GetTotalPrivateRepos() int { + if o == nil || o.TotalPrivateRepos == nil { + return 0 + } + return *o.TotalPrivateRepos +} + +// GetType returns the Type field if it's non-nil, zero value otherwise. +func (o *Organization) GetType() string { + if o == nil || o.Type == nil { + return "" + } + return *o.Type +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (o *Organization) GetUpdatedAt() time.Time { + if o == nil || o.UpdatedAt == nil { + return time.Time{} + } + return *o.UpdatedAt +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (o *Organization) GetURL() string { + if o == nil || o.URL == nil { + return "" + } + return *o.URL +} + +// GetAction returns the Action field if it's non-nil, zero value otherwise. +func (o *OrganizationEvent) GetAction() string { + if o == nil || o.Action == nil { + return "" + } + return *o.Action +} + +// GetInstallation returns the Installation field. +func (o *OrganizationEvent) GetInstallation() *Installation { + if o == nil { + return nil + } + return o.Installation +} + +// GetInvitation returns the Invitation field. +func (o *OrganizationEvent) GetInvitation() *Invitation { + if o == nil { + return nil + } + return o.Invitation +} + +// GetMembership returns the Membership field. +func (o *OrganizationEvent) GetMembership() *Membership { + if o == nil { + return nil + } + return o.Membership +} + +// GetOrganization returns the Organization field. +func (o *OrganizationEvent) GetOrganization() *Organization { + if o == nil { + return nil + } + return o.Organization +} + +// GetSender returns the Sender field. +func (o *OrganizationEvent) GetSender() *User { + if o == nil { + return nil + } + return o.Sender +} + +// GetAction returns the Action field if it's non-nil, zero value otherwise. +func (o *OrgBlockEvent) GetAction() string { + if o == nil || o.Action == nil { + return "" + } + return *o.Action +} + +// GetBlockedUser returns the BlockedUser field. +func (o *OrgBlockEvent) GetBlockedUser() *User { + if o == nil { + return nil + } + return o.BlockedUser +} + +// GetInstallation returns the Installation field. +func (o *OrgBlockEvent) GetInstallation() *Installation { + if o == nil { + return nil + } + return o.Installation +} + +// GetOrganization returns the Organization field. +func (o *OrgBlockEvent) GetOrganization() *Organization { + if o == nil { + return nil + } + return o.Organization +} + +// GetSender returns the Sender field. +func (o *OrgBlockEvent) GetSender() *User { + if o == nil { + return nil + } + return o.Sender +} + +// GetDisabledOrgs returns the DisabledOrgs field if it's non-nil, zero value otherwise. +func (o *OrgStats) GetDisabledOrgs() int { + if o == nil || o.DisabledOrgs == nil { + return 0 + } + return *o.DisabledOrgs +} + +// GetTotalOrgs returns the TotalOrgs field if it's non-nil, zero value otherwise. +func (o *OrgStats) GetTotalOrgs() int { + if o == nil || o.TotalOrgs == nil { + return 0 + } + return *o.TotalOrgs +} + +// GetTotalTeamMembers returns the TotalTeamMembers field if it's non-nil, zero value otherwise. +func (o *OrgStats) GetTotalTeamMembers() int { + if o == nil || o.TotalTeamMembers == nil { + return 0 + } + return *o.TotalTeamMembers +} + +// GetTotalTeams returns the TotalTeams field if it's non-nil, zero value otherwise. +func (o *OrgStats) GetTotalTeams() int { + if o == nil || o.TotalTeams == nil { + return 0 + } + return *o.TotalTeams +} + +// GetAction returns the Action field if it's non-nil, zero value otherwise. +func (p *Page) GetAction() string { + if p == nil || p.Action == nil { + return "" + } + return *p.Action +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (p *Page) GetHTMLURL() string { + if p == nil || p.HTMLURL == nil { + return "" + } + return *p.HTMLURL +} + +// GetPageName returns the PageName field if it's non-nil, zero value otherwise. +func (p *Page) GetPageName() string { + if p == nil || p.PageName == nil { + return "" + } + return *p.PageName +} + +// GetSHA returns the SHA field if it's non-nil, zero value otherwise. +func (p *Page) GetSHA() string { + if p == nil || p.SHA == nil { + return "" + } + return *p.SHA +} + +// GetSummary returns the Summary field if it's non-nil, zero value otherwise. +func (p *Page) GetSummary() string { + if p == nil || p.Summary == nil { + return "" + } + return *p.Summary +} + +// GetTitle returns the Title field if it's non-nil, zero value otherwise. +func (p *Page) GetTitle() string { + if p == nil || p.Title == nil { + return "" + } + return *p.Title +} + +// GetBuild returns the Build field. +func (p *PageBuildEvent) GetBuild() *PagesBuild { + if p == nil { + return nil + } + return p.Build +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (p *PageBuildEvent) GetID() int64 { + if p == nil || p.ID == nil { + return 0 + } + return *p.ID +} + +// GetInstallation returns the Installation field. +func (p *PageBuildEvent) GetInstallation() *Installation { + if p == nil { + return nil + } + return p.Installation +} + +// GetRepo returns the Repo field. +func (p *PageBuildEvent) GetRepo() *Repository { + if p == nil { + return nil + } + return p.Repo +} + +// GetSender returns the Sender field. +func (p *PageBuildEvent) GetSender() *User { + if p == nil { + return nil + } + return p.Sender +} + +// GetCNAME returns the CNAME field if it's non-nil, zero value otherwise. +func (p *Pages) GetCNAME() string { + if p == nil || p.CNAME == nil { + return "" + } + return *p.CNAME +} + +// GetCustom404 returns the Custom404 field if it's non-nil, zero value otherwise. +func (p *Pages) GetCustom404() bool { + if p == nil || p.Custom404 == nil { + return false + } + return *p.Custom404 +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (p *Pages) GetHTMLURL() string { + if p == nil || p.HTMLURL == nil { + return "" + } + return *p.HTMLURL +} + +// GetStatus returns the Status field if it's non-nil, zero value otherwise. +func (p *Pages) GetStatus() string { + if p == nil || p.Status == nil { + return "" + } + return *p.Status +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (p *Pages) GetURL() string { + if p == nil || p.URL == nil { + return "" + } + return *p.URL +} + +// GetCommit returns the Commit field if it's non-nil, zero value otherwise. +func (p *PagesBuild) GetCommit() string { + if p == nil || p.Commit == nil { + return "" + } + return *p.Commit +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (p *PagesBuild) GetCreatedAt() Timestamp { + if p == nil || p.CreatedAt == nil { + return Timestamp{} + } + return *p.CreatedAt +} + +// GetDuration returns the Duration field if it's non-nil, zero value otherwise. +func (p *PagesBuild) GetDuration() int { + if p == nil || p.Duration == nil { + return 0 + } + return *p.Duration +} + +// GetError returns the Error field. +func (p *PagesBuild) GetError() *PagesError { + if p == nil { + return nil + } + return p.Error +} + +// GetPusher returns the Pusher field. +func (p *PagesBuild) GetPusher() *User { + if p == nil { + return nil + } + return p.Pusher +} + +// GetStatus returns the Status field if it's non-nil, zero value otherwise. +func (p *PagesBuild) GetStatus() string { + if p == nil || p.Status == nil { + return "" + } + return *p.Status +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (p *PagesBuild) GetUpdatedAt() Timestamp { + if p == nil || p.UpdatedAt == nil { + return Timestamp{} + } + return *p.UpdatedAt +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (p *PagesBuild) GetURL() string { + if p == nil || p.URL == nil { + return "" + } + return *p.URL +} + +// GetMessage returns the Message field if it's non-nil, zero value otherwise. +func (p *PagesError) GetMessage() string { + if p == nil || p.Message == nil { + return "" + } + return *p.Message +} + +// GetTotalPages returns the TotalPages field if it's non-nil, zero value otherwise. +func (p *PageStats) GetTotalPages() int { + if p == nil || p.TotalPages == nil { + return 0 + } + return *p.TotalPages +} + +// GetHook returns the Hook field. +func (p *PingEvent) GetHook() *Hook { + if p == nil { + return nil + } + return p.Hook +} + +// GetHookID returns the HookID field if it's non-nil, zero value otherwise. +func (p *PingEvent) GetHookID() int64 { + if p == nil || p.HookID == nil { + return 0 + } + return *p.HookID +} + +// GetInstallation returns the Installation field. +func (p *PingEvent) GetInstallation() *Installation { + if p == nil { + return nil + } + return p.Installation +} + +// GetZen returns the Zen field if it's non-nil, zero value otherwise. +func (p *PingEvent) GetZen() string { + if p == nil || p.Zen == nil { + return "" + } + return *p.Zen +} + +// GetCollaborators returns the Collaborators field if it's non-nil, zero value otherwise. +func (p *Plan) GetCollaborators() int { + if p == nil || p.Collaborators == nil { + return 0 + } + return *p.Collaborators +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (p *Plan) GetName() string { + if p == nil || p.Name == nil { + return "" + } + return *p.Name +} + +// GetPrivateRepos returns the PrivateRepos field if it's non-nil, zero value otherwise. +func (p *Plan) GetPrivateRepos() int { + if p == nil || p.PrivateRepos == nil { + return 0 + } + return *p.PrivateRepos +} + +// GetSpace returns the Space field if it's non-nil, zero value otherwise. +func (p *Plan) GetSpace() int { + if p == nil || p.Space == nil { + return 0 + } + return *p.Space +} + +// GetBody returns the Body field if it's non-nil, zero value otherwise. +func (p *Project) GetBody() string { + if p == nil || p.Body == nil { + return "" + } + return *p.Body +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (p *Project) GetCreatedAt() Timestamp { + if p == nil || p.CreatedAt == nil { + return Timestamp{} + } + return *p.CreatedAt +} + +// GetCreator returns the Creator field. +func (p *Project) GetCreator() *User { + if p == nil { + return nil + } + return p.Creator +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (p *Project) GetID() int64 { + if p == nil || p.ID == nil { + return 0 + } + return *p.ID +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (p *Project) GetName() string { + if p == nil || p.Name == nil { + return "" + } + return *p.Name +} + +// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. +func (p *Project) GetNodeID() string { + if p == nil || p.NodeID == nil { + return "" + } + return *p.NodeID +} + +// GetNumber returns the Number field if it's non-nil, zero value otherwise. +func (p *Project) GetNumber() int { + if p == nil || p.Number == nil { + return 0 + } + return *p.Number +} + +// GetOwnerURL returns the OwnerURL field if it's non-nil, zero value otherwise. +func (p *Project) GetOwnerURL() string { + if p == nil || p.OwnerURL == nil { + return "" + } + return *p.OwnerURL +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (p *Project) GetUpdatedAt() Timestamp { + if p == nil || p.UpdatedAt == nil { + return Timestamp{} + } + return *p.UpdatedAt +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (p *Project) GetURL() string { + if p == nil || p.URL == nil { + return "" + } + return *p.URL +} + +// GetColumnID returns the ColumnID field if it's non-nil, zero value otherwise. +func (p *ProjectCard) GetColumnID() int64 { + if p == nil || p.ColumnID == nil { + return 0 + } + return *p.ColumnID +} + +// GetColumnURL returns the ColumnURL field if it's non-nil, zero value otherwise. +func (p *ProjectCard) GetColumnURL() string { + if p == nil || p.ColumnURL == nil { + return "" + } + return *p.ColumnURL +} + +// GetContentURL returns the ContentURL field if it's non-nil, zero value otherwise. +func (p *ProjectCard) GetContentURL() string { + if p == nil || p.ContentURL == nil { + return "" + } + return *p.ContentURL +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (p *ProjectCard) GetCreatedAt() Timestamp { + if p == nil || p.CreatedAt == nil { + return Timestamp{} + } + return *p.CreatedAt +} + +// GetCreator returns the Creator field. +func (p *ProjectCard) GetCreator() *User { + if p == nil { + return nil + } + return p.Creator +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (p *ProjectCard) GetID() int64 { + if p == nil || p.ID == nil { + return 0 + } + return *p.ID +} + +// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. +func (p *ProjectCard) GetNodeID() string { + if p == nil || p.NodeID == nil { + return "" + } + return *p.NodeID +} + +// GetNote returns the Note field if it's non-nil, zero value otherwise. +func (p *ProjectCard) GetNote() string { + if p == nil || p.Note == nil { + return "" + } + return *p.Note +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (p *ProjectCard) GetUpdatedAt() Timestamp { + if p == nil || p.UpdatedAt == nil { + return Timestamp{} + } + return *p.UpdatedAt +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (p *ProjectCard) GetURL() string { + if p == nil || p.URL == nil { + return "" + } + return *p.URL +} + +// GetAction returns the Action field if it's non-nil, zero value otherwise. +func (p *ProjectCardEvent) GetAction() string { + if p == nil || p.Action == nil { + return "" + } + return *p.Action +} + +// GetAfterID returns the AfterID field if it's non-nil, zero value otherwise. +func (p *ProjectCardEvent) GetAfterID() int64 { + if p == nil || p.AfterID == nil { + return 0 + } + return *p.AfterID +} + +// GetChanges returns the Changes field. +func (p *ProjectCardEvent) GetChanges() *ProjectCardChange { + if p == nil { + return nil + } + return p.Changes +} + +// GetInstallation returns the Installation field. +func (p *ProjectCardEvent) GetInstallation() *Installation { + if p == nil { + return nil + } + return p.Installation +} + +// GetOrg returns the Org field. +func (p *ProjectCardEvent) GetOrg() *Organization { + if p == nil { + return nil + } + return p.Org +} + +// GetProjectCard returns the ProjectCard field. +func (p *ProjectCardEvent) GetProjectCard() *ProjectCard { + if p == nil { + return nil + } + return p.ProjectCard +} + +// GetRepo returns the Repo field. +func (p *ProjectCardEvent) GetRepo() *Repository { + if p == nil { + return nil + } + return p.Repo +} + +// GetSender returns the Sender field. +func (p *ProjectCardEvent) GetSender() *User { + if p == nil { + return nil + } + return p.Sender +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (p *ProjectColumn) GetCreatedAt() Timestamp { + if p == nil || p.CreatedAt == nil { + return Timestamp{} + } + return *p.CreatedAt +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (p *ProjectColumn) GetID() int64 { + if p == nil || p.ID == nil { + return 0 + } + return *p.ID +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (p *ProjectColumn) GetName() string { + if p == nil || p.Name == nil { + return "" + } + return *p.Name +} + +// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. +func (p *ProjectColumn) GetNodeID() string { + if p == nil || p.NodeID == nil { + return "" + } + return *p.NodeID +} + +// GetProjectURL returns the ProjectURL field if it's non-nil, zero value otherwise. +func (p *ProjectColumn) GetProjectURL() string { + if p == nil || p.ProjectURL == nil { + return "" + } + return *p.ProjectURL +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (p *ProjectColumn) GetUpdatedAt() Timestamp { + if p == nil || p.UpdatedAt == nil { + return Timestamp{} + } + return *p.UpdatedAt +} + +// GetAction returns the Action field if it's non-nil, zero value otherwise. +func (p *ProjectColumnEvent) GetAction() string { + if p == nil || p.Action == nil { + return "" + } + return *p.Action +} + +// GetAfterID returns the AfterID field if it's non-nil, zero value otherwise. +func (p *ProjectColumnEvent) GetAfterID() int64 { + if p == nil || p.AfterID == nil { + return 0 + } + return *p.AfterID +} + +// GetChanges returns the Changes field. +func (p *ProjectColumnEvent) GetChanges() *ProjectColumnChange { + if p == nil { + return nil + } + return p.Changes +} + +// GetInstallation returns the Installation field. +func (p *ProjectColumnEvent) GetInstallation() *Installation { + if p == nil { + return nil + } + return p.Installation +} + +// GetOrg returns the Org field. +func (p *ProjectColumnEvent) GetOrg() *Organization { + if p == nil { + return nil + } + return p.Org +} + +// GetProjectColumn returns the ProjectColumn field. +func (p *ProjectColumnEvent) GetProjectColumn() *ProjectColumn { + if p == nil { + return nil + } + return p.ProjectColumn +} + +// GetRepo returns the Repo field. +func (p *ProjectColumnEvent) GetRepo() *Repository { + if p == nil { + return nil + } + return p.Repo +} + +// GetSender returns the Sender field. +func (p *ProjectColumnEvent) GetSender() *User { + if p == nil { + return nil + } + return p.Sender +} + +// GetAction returns the Action field if it's non-nil, zero value otherwise. +func (p *ProjectEvent) GetAction() string { + if p == nil || p.Action == nil { + return "" + } + return *p.Action +} + +// GetChanges returns the Changes field. +func (p *ProjectEvent) GetChanges() *ProjectChange { + if p == nil { + return nil + } + return p.Changes +} + +// GetInstallation returns the Installation field. +func (p *ProjectEvent) GetInstallation() *Installation { + if p == nil { + return nil + } + return p.Installation +} + +// GetOrg returns the Org field. +func (p *ProjectEvent) GetOrg() *Organization { + if p == nil { + return nil + } + return p.Org +} + +// GetProject returns the Project field. +func (p *ProjectEvent) GetProject() *Project { + if p == nil { + return nil + } + return p.Project +} + +// GetRepo returns the Repo field. +func (p *ProjectEvent) GetRepo() *Repository { + if p == nil { + return nil + } + return p.Repo +} + +// GetSender returns the Sender field. +func (p *ProjectEvent) GetSender() *User { + if p == nil { + return nil + } + return p.Sender +} + +// GetEnforceAdmins returns the EnforceAdmins field. +func (p *Protection) GetEnforceAdmins() *AdminEnforcement { + if p == nil { + return nil + } + return p.EnforceAdmins +} + +// GetRequiredPullRequestReviews returns the RequiredPullRequestReviews field. +func (p *Protection) GetRequiredPullRequestReviews() *PullRequestReviewsEnforcement { + if p == nil { + return nil + } + return p.RequiredPullRequestReviews +} + +// GetRequiredStatusChecks returns the RequiredStatusChecks field. +func (p *Protection) GetRequiredStatusChecks() *RequiredStatusChecks { + if p == nil { + return nil + } + return p.RequiredStatusChecks +} + +// GetRestrictions returns the Restrictions field. +func (p *Protection) GetRestrictions() *BranchRestrictions { + if p == nil { + return nil + } + return p.Restrictions +} + +// GetRequiredPullRequestReviews returns the RequiredPullRequestReviews field. +func (p *ProtectionRequest) GetRequiredPullRequestReviews() *PullRequestReviewsEnforcementRequest { + if p == nil { + return nil + } + return p.RequiredPullRequestReviews +} + +// GetRequiredStatusChecks returns the RequiredStatusChecks field. +func (p *ProtectionRequest) GetRequiredStatusChecks() *RequiredStatusChecks { + if p == nil { + return nil + } + return p.RequiredStatusChecks +} + +// GetRestrictions returns the Restrictions field. +func (p *ProtectionRequest) GetRestrictions() *BranchRestrictionsRequest { + if p == nil { + return nil + } + return p.Restrictions +} + +// GetInstallation returns the Installation field. +func (p *PublicEvent) GetInstallation() *Installation { + if p == nil { + return nil + } + return p.Installation +} + +// GetRepo returns the Repo field. +func (p *PublicEvent) GetRepo() *Repository { + if p == nil { + return nil + } + return p.Repo +} + +// GetSender returns the Sender field. +func (p *PublicEvent) GetSender() *User { + if p == nil { + return nil + } + return p.Sender +} + +// GetAdditions returns the Additions field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetAdditions() int { + if p == nil || p.Additions == nil { + return 0 + } + return *p.Additions +} + +// GetAssignee returns the Assignee field. +func (p *PullRequest) GetAssignee() *User { + if p == nil { + return nil + } + return p.Assignee +} + +// GetAuthorAssociation returns the AuthorAssociation field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetAuthorAssociation() string { + if p == nil || p.AuthorAssociation == nil { + return "" + } + return *p.AuthorAssociation +} + +// GetBase returns the Base field. +func (p *PullRequest) GetBase() *PullRequestBranch { + if p == nil { + return nil + } + return p.Base +} + +// GetBody returns the Body field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetBody() string { + if p == nil || p.Body == nil { + return "" + } + return *p.Body +} + +// GetChangedFiles returns the ChangedFiles field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetChangedFiles() int { + if p == nil || p.ChangedFiles == nil { + return 0 + } + return *p.ChangedFiles +} + +// GetClosedAt returns the ClosedAt field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetClosedAt() time.Time { + if p == nil || p.ClosedAt == nil { + return time.Time{} + } + return *p.ClosedAt +} + +// GetComments returns the Comments field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetComments() int { + if p == nil || p.Comments == nil { + return 0 + } + return *p.Comments +} + +// GetCommentsURL returns the CommentsURL field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetCommentsURL() string { + if p == nil || p.CommentsURL == nil { + return "" + } + return *p.CommentsURL +} + +// GetCommits returns the Commits field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetCommits() int { + if p == nil || p.Commits == nil { + return 0 + } + return *p.Commits +} + +// GetCommitsURL returns the CommitsURL field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetCommitsURL() string { + if p == nil || p.CommitsURL == nil { + return "" + } + return *p.CommitsURL +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetCreatedAt() time.Time { + if p == nil || p.CreatedAt == nil { + return time.Time{} + } + return *p.CreatedAt +} + +// GetDeletions returns the Deletions field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetDeletions() int { + if p == nil || p.Deletions == nil { + return 0 + } + return *p.Deletions +} + +// GetDiffURL returns the DiffURL field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetDiffURL() string { + if p == nil || p.DiffURL == nil { + return "" + } + return *p.DiffURL +} + +// GetHead returns the Head field. +func (p *PullRequest) GetHead() *PullRequestBranch { + if p == nil { + return nil + } + return p.Head +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetHTMLURL() string { + if p == nil || p.HTMLURL == nil { + return "" + } + return *p.HTMLURL +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetID() int64 { + if p == nil || p.ID == nil { + return 0 + } + return *p.ID +} + +// GetIssueURL returns the IssueURL field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetIssueURL() string { + if p == nil || p.IssueURL == nil { + return "" + } + return *p.IssueURL +} + +// GetMaintainerCanModify returns the MaintainerCanModify field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetMaintainerCanModify() bool { + if p == nil || p.MaintainerCanModify == nil { + return false + } + return *p.MaintainerCanModify +} + +// GetMergeable returns the Mergeable field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetMergeable() bool { + if p == nil || p.Mergeable == nil { + return false + } + return *p.Mergeable +} + +// GetMergeableState returns the MergeableState field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetMergeableState() string { + if p == nil || p.MergeableState == nil { + return "" + } + return *p.MergeableState +} + +// GetMergeCommitSHA returns the MergeCommitSHA field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetMergeCommitSHA() string { + if p == nil || p.MergeCommitSHA == nil { + return "" + } + return *p.MergeCommitSHA +} + +// GetMerged returns the Merged field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetMerged() bool { + if p == nil || p.Merged == nil { + return false + } + return *p.Merged +} + +// GetMergedAt returns the MergedAt field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetMergedAt() time.Time { + if p == nil || p.MergedAt == nil { + return time.Time{} + } + return *p.MergedAt +} + +// GetMergedBy returns the MergedBy field. +func (p *PullRequest) GetMergedBy() *User { + if p == nil { + return nil + } + return p.MergedBy +} + +// GetMilestone returns the Milestone field. +func (p *PullRequest) GetMilestone() *Milestone { + if p == nil { + return nil + } + return p.Milestone +} + +// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetNodeID() string { + if p == nil || p.NodeID == nil { + return "" + } + return *p.NodeID +} + +// GetNumber returns the Number field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetNumber() int { + if p == nil || p.Number == nil { + return 0 + } + return *p.Number +} + +// GetPatchURL returns the PatchURL field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetPatchURL() string { + if p == nil || p.PatchURL == nil { + return "" + } + return *p.PatchURL +} + +// GetReviewCommentsURL returns the ReviewCommentsURL field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetReviewCommentsURL() string { + if p == nil || p.ReviewCommentsURL == nil { + return "" + } + return *p.ReviewCommentsURL +} + +// GetReviewCommentURL returns the ReviewCommentURL field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetReviewCommentURL() string { + if p == nil || p.ReviewCommentURL == nil { + return "" + } + return *p.ReviewCommentURL +} + +// GetState returns the State field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetState() string { + if p == nil || p.State == nil { + return "" + } + return *p.State +} + +// GetStatusesURL returns the StatusesURL field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetStatusesURL() string { + if p == nil || p.StatusesURL == nil { + return "" + } + return *p.StatusesURL +} + +// GetTitle returns the Title field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetTitle() string { + if p == nil || p.Title == nil { + return "" + } + return *p.Title +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetUpdatedAt() time.Time { + if p == nil || p.UpdatedAt == nil { + return time.Time{} + } + return *p.UpdatedAt +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (p *PullRequest) GetURL() string { + if p == nil || p.URL == nil { + return "" + } + return *p.URL +} + +// GetUser returns the User field. +func (p *PullRequest) GetUser() *User { + if p == nil { + return nil + } + return p.User +} + +// GetLabel returns the Label field if it's non-nil, zero value otherwise. +func (p *PullRequestBranch) GetLabel() string { + if p == nil || p.Label == nil { + return "" + } + return *p.Label +} + +// GetRef returns the Ref field if it's non-nil, zero value otherwise. +func (p *PullRequestBranch) GetRef() string { + if p == nil || p.Ref == nil { + return "" + } + return *p.Ref +} + +// GetRepo returns the Repo field. +func (p *PullRequestBranch) GetRepo() *Repository { + if p == nil { + return nil + } + return p.Repo +} + +// GetSHA returns the SHA field if it's non-nil, zero value otherwise. +func (p *PullRequestBranch) GetSHA() string { + if p == nil || p.SHA == nil { + return "" + } + return *p.SHA +} + +// GetUser returns the User field. +func (p *PullRequestBranch) GetUser() *User { + if p == nil { + return nil + } + return p.User +} + +// GetAuthorAssociation returns the AuthorAssociation field if it's non-nil, zero value otherwise. +func (p *PullRequestComment) GetAuthorAssociation() string { + if p == nil || p.AuthorAssociation == nil { + return "" + } + return *p.AuthorAssociation +} + +// GetBody returns the Body field if it's non-nil, zero value otherwise. +func (p *PullRequestComment) GetBody() string { + if p == nil || p.Body == nil { + return "" + } + return *p.Body +} + +// GetCommitID returns the CommitID field if it's non-nil, zero value otherwise. +func (p *PullRequestComment) GetCommitID() string { + if p == nil || p.CommitID == nil { + return "" + } + return *p.CommitID +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (p *PullRequestComment) GetCreatedAt() time.Time { + if p == nil || p.CreatedAt == nil { + return time.Time{} + } + return *p.CreatedAt +} + +// GetDiffHunk returns the DiffHunk field if it's non-nil, zero value otherwise. +func (p *PullRequestComment) GetDiffHunk() string { + if p == nil || p.DiffHunk == nil { + return "" + } + return *p.DiffHunk +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (p *PullRequestComment) GetHTMLURL() string { + if p == nil || p.HTMLURL == nil { + return "" + } + return *p.HTMLURL +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (p *PullRequestComment) GetID() int64 { + if p == nil || p.ID == nil { + return 0 + } + return *p.ID +} + +// GetInReplyTo returns the InReplyTo field if it's non-nil, zero value otherwise. +func (p *PullRequestComment) GetInReplyTo() int64 { + if p == nil || p.InReplyTo == nil { + return 0 + } + return *p.InReplyTo +} + +// GetOriginalCommitID returns the OriginalCommitID field if it's non-nil, zero value otherwise. +func (p *PullRequestComment) GetOriginalCommitID() string { + if p == nil || p.OriginalCommitID == nil { + return "" + } + return *p.OriginalCommitID +} + +// GetOriginalPosition returns the OriginalPosition field if it's non-nil, zero value otherwise. +func (p *PullRequestComment) GetOriginalPosition() int { + if p == nil || p.OriginalPosition == nil { + return 0 + } + return *p.OriginalPosition +} + +// GetPath returns the Path field if it's non-nil, zero value otherwise. +func (p *PullRequestComment) GetPath() string { + if p == nil || p.Path == nil { + return "" + } + return *p.Path +} + +// GetPosition returns the Position field if it's non-nil, zero value otherwise. +func (p *PullRequestComment) GetPosition() int { + if p == nil || p.Position == nil { + return 0 + } + return *p.Position +} + +// GetPullRequestReviewID returns the PullRequestReviewID field if it's non-nil, zero value otherwise. +func (p *PullRequestComment) GetPullRequestReviewID() int64 { + if p == nil || p.PullRequestReviewID == nil { + return 0 + } + return *p.PullRequestReviewID +} + +// GetPullRequestURL returns the PullRequestURL field if it's non-nil, zero value otherwise. +func (p *PullRequestComment) GetPullRequestURL() string { + if p == nil || p.PullRequestURL == nil { + return "" + } + return *p.PullRequestURL +} + +// GetReactions returns the Reactions field. +func (p *PullRequestComment) GetReactions() *Reactions { + if p == nil { + return nil + } + return p.Reactions +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (p *PullRequestComment) GetUpdatedAt() time.Time { + if p == nil || p.UpdatedAt == nil { + return time.Time{} + } + return *p.UpdatedAt +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (p *PullRequestComment) GetURL() string { + if p == nil || p.URL == nil { + return "" + } + return *p.URL +} + +// GetUser returns the User field. +func (p *PullRequestComment) GetUser() *User { + if p == nil { + return nil + } + return p.User +} + +// GetAction returns the Action field if it's non-nil, zero value otherwise. +func (p *PullRequestEvent) GetAction() string { + if p == nil || p.Action == nil { + return "" + } + return *p.Action +} + +// GetChanges returns the Changes field. +func (p *PullRequestEvent) GetChanges() *EditChange { + if p == nil { + return nil + } + return p.Changes +} + +// GetInstallation returns the Installation field. +func (p *PullRequestEvent) GetInstallation() *Installation { + if p == nil { + return nil + } + return p.Installation +} + +// GetLabel returns the Label field. +func (p *PullRequestEvent) GetLabel() *Label { + if p == nil { + return nil + } + return p.Label +} + +// GetNumber returns the Number field if it's non-nil, zero value otherwise. +func (p *PullRequestEvent) GetNumber() int { + if p == nil || p.Number == nil { + return 0 + } + return *p.Number +} + +// GetPullRequest returns the PullRequest field. +func (p *PullRequestEvent) GetPullRequest() *PullRequest { + if p == nil { + return nil + } + return p.PullRequest +} + +// GetRepo returns the Repo field. +func (p *PullRequestEvent) GetRepo() *Repository { + if p == nil { + return nil + } + return p.Repo +} + +// GetRequestedReviewer returns the RequestedReviewer field. +func (p *PullRequestEvent) GetRequestedReviewer() *User { + if p == nil { + return nil + } + return p.RequestedReviewer +} + +// GetSender returns the Sender field. +func (p *PullRequestEvent) GetSender() *User { + if p == nil { + return nil + } + return p.Sender +} + +// GetDiffURL returns the DiffURL field if it's non-nil, zero value otherwise. +func (p *PullRequestLinks) GetDiffURL() string { + if p == nil || p.DiffURL == nil { + return "" + } + return *p.DiffURL +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (p *PullRequestLinks) GetHTMLURL() string { + if p == nil || p.HTMLURL == nil { + return "" + } + return *p.HTMLURL +} + +// GetPatchURL returns the PatchURL field if it's non-nil, zero value otherwise. +func (p *PullRequestLinks) GetPatchURL() string { + if p == nil || p.PatchURL == nil { + return "" + } + return *p.PatchURL +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (p *PullRequestLinks) GetURL() string { + if p == nil || p.URL == nil { + return "" + } + return *p.URL +} + +// GetMerged returns the Merged field if it's non-nil, zero value otherwise. +func (p *PullRequestMergeResult) GetMerged() bool { + if p == nil || p.Merged == nil { + return false + } + return *p.Merged +} + +// GetMessage returns the Message field if it's non-nil, zero value otherwise. +func (p *PullRequestMergeResult) GetMessage() string { + if p == nil || p.Message == nil { + return "" + } + return *p.Message +} + +// GetSHA returns the SHA field if it's non-nil, zero value otherwise. +func (p *PullRequestMergeResult) GetSHA() string { + if p == nil || p.SHA == nil { + return "" + } + return *p.SHA +} + +// GetBody returns the Body field if it's non-nil, zero value otherwise. +func (p *PullRequestReview) GetBody() string { + if p == nil || p.Body == nil { + return "" + } + return *p.Body +} + +// GetCommitID returns the CommitID field if it's non-nil, zero value otherwise. +func (p *PullRequestReview) GetCommitID() string { + if p == nil || p.CommitID == nil { + return "" + } + return *p.CommitID +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (p *PullRequestReview) GetHTMLURL() string { + if p == nil || p.HTMLURL == nil { + return "" + } + return *p.HTMLURL +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (p *PullRequestReview) GetID() int64 { + if p == nil || p.ID == nil { + return 0 + } + return *p.ID +} + +// GetPullRequestURL returns the PullRequestURL field if it's non-nil, zero value otherwise. +func (p *PullRequestReview) GetPullRequestURL() string { + if p == nil || p.PullRequestURL == nil { + return "" + } + return *p.PullRequestURL +} + +// GetState returns the State field if it's non-nil, zero value otherwise. +func (p *PullRequestReview) GetState() string { + if p == nil || p.State == nil { + return "" + } + return *p.State +} + +// GetSubmittedAt returns the SubmittedAt field if it's non-nil, zero value otherwise. +func (p *PullRequestReview) GetSubmittedAt() time.Time { + if p == nil || p.SubmittedAt == nil { + return time.Time{} + } + return *p.SubmittedAt +} + +// GetUser returns the User field. +func (p *PullRequestReview) GetUser() *User { + if p == nil { + return nil + } + return p.User +} + +// GetAction returns the Action field if it's non-nil, zero value otherwise. +func (p *PullRequestReviewCommentEvent) GetAction() string { + if p == nil || p.Action == nil { + return "" + } + return *p.Action +} + +// GetChanges returns the Changes field. +func (p *PullRequestReviewCommentEvent) GetChanges() *EditChange { + if p == nil { + return nil + } + return p.Changes +} + +// GetComment returns the Comment field. +func (p *PullRequestReviewCommentEvent) GetComment() *PullRequestComment { + if p == nil { + return nil + } + return p.Comment +} + +// GetInstallation returns the Installation field. +func (p *PullRequestReviewCommentEvent) GetInstallation() *Installation { + if p == nil { + return nil + } + return p.Installation +} + +// GetPullRequest returns the PullRequest field. +func (p *PullRequestReviewCommentEvent) GetPullRequest() *PullRequest { + if p == nil { + return nil + } + return p.PullRequest +} + +// GetRepo returns the Repo field. +func (p *PullRequestReviewCommentEvent) GetRepo() *Repository { + if p == nil { + return nil + } + return p.Repo +} + +// GetSender returns the Sender field. +func (p *PullRequestReviewCommentEvent) GetSender() *User { + if p == nil { + return nil + } + return p.Sender +} + +// GetMessage returns the Message field if it's non-nil, zero value otherwise. +func (p *PullRequestReviewDismissalRequest) GetMessage() string { + if p == nil || p.Message == nil { + return "" + } + return *p.Message +} + +// GetAction returns the Action field if it's non-nil, zero value otherwise. +func (p *PullRequestReviewEvent) GetAction() string { + if p == nil || p.Action == nil { + return "" + } + return *p.Action +} + +// GetInstallation returns the Installation field. +func (p *PullRequestReviewEvent) GetInstallation() *Installation { + if p == nil { + return nil + } + return p.Installation +} + +// GetOrganization returns the Organization field. +func (p *PullRequestReviewEvent) GetOrganization() *Organization { + if p == nil { + return nil + } + return p.Organization +} + +// GetPullRequest returns the PullRequest field. +func (p *PullRequestReviewEvent) GetPullRequest() *PullRequest { + if p == nil { + return nil + } + return p.PullRequest +} + +// GetRepo returns the Repo field. +func (p *PullRequestReviewEvent) GetRepo() *Repository { + if p == nil { + return nil + } + return p.Repo +} + +// GetReview returns the Review field. +func (p *PullRequestReviewEvent) GetReview() *PullRequestReview { + if p == nil { + return nil + } + return p.Review +} + +// GetSender returns the Sender field. +func (p *PullRequestReviewEvent) GetSender() *User { + if p == nil { + return nil + } + return p.Sender +} + +// GetBody returns the Body field if it's non-nil, zero value otherwise. +func (p *PullRequestReviewRequest) GetBody() string { + if p == nil || p.Body == nil { + return "" + } + return *p.Body +} + +// GetCommitID returns the CommitID field if it's non-nil, zero value otherwise. +func (p *PullRequestReviewRequest) GetCommitID() string { + if p == nil || p.CommitID == nil { + return "" + } + return *p.CommitID +} + +// GetEvent returns the Event field if it's non-nil, zero value otherwise. +func (p *PullRequestReviewRequest) GetEvent() string { + if p == nil || p.Event == nil { + return "" + } + return *p.Event +} + +// GetDismissalRestrictionsRequest returns the DismissalRestrictionsRequest field. +func (p *PullRequestReviewsEnforcementRequest) GetDismissalRestrictionsRequest() *DismissalRestrictionsRequest { + if p == nil { + return nil + } + return p.DismissalRestrictionsRequest +} + +// GetDismissalRestrictionsRequest returns the DismissalRestrictionsRequest field. +func (p *PullRequestReviewsEnforcementUpdate) GetDismissalRestrictionsRequest() *DismissalRestrictionsRequest { + if p == nil { + return nil + } + return p.DismissalRestrictionsRequest +} + +// GetDismissStaleReviews returns the DismissStaleReviews field if it's non-nil, zero value otherwise. +func (p *PullRequestReviewsEnforcementUpdate) GetDismissStaleReviews() bool { + if p == nil || p.DismissStaleReviews == nil { + return false + } + return *p.DismissStaleReviews +} + +// GetMergablePulls returns the MergablePulls field if it's non-nil, zero value otherwise. +func (p *PullStats) GetMergablePulls() int { + if p == nil || p.MergablePulls == nil { + return 0 + } + return *p.MergablePulls +} + +// GetMergedPulls returns the MergedPulls field if it's non-nil, zero value otherwise. +func (p *PullStats) GetMergedPulls() int { + if p == nil || p.MergedPulls == nil { + return 0 + } + return *p.MergedPulls +} + +// GetTotalPulls returns the TotalPulls field if it's non-nil, zero value otherwise. +func (p *PullStats) GetTotalPulls() int { + if p == nil || p.TotalPulls == nil { + return 0 + } + return *p.TotalPulls +} + +// GetUnmergablePulls returns the UnmergablePulls field if it's non-nil, zero value otherwise. +func (p *PullStats) GetUnmergablePulls() int { + if p == nil || p.UnmergablePulls == nil { + return 0 + } + return *p.UnmergablePulls +} + +// GetCommits returns the Commits field if it's non-nil, zero value otherwise. +func (p *PunchCard) GetCommits() int { + if p == nil || p.Commits == nil { + return 0 + } + return *p.Commits +} + +// GetDay returns the Day field if it's non-nil, zero value otherwise. +func (p *PunchCard) GetDay() int { + if p == nil || p.Day == nil { + return 0 + } + return *p.Day +} + +// GetHour returns the Hour field if it's non-nil, zero value otherwise. +func (p *PunchCard) GetHour() int { + if p == nil || p.Hour == nil { + return 0 + } + return *p.Hour +} + +// GetAfter returns the After field if it's non-nil, zero value otherwise. +func (p *PushEvent) GetAfter() string { + if p == nil || p.After == nil { + return "" + } + return *p.After +} + +// GetBaseRef returns the BaseRef field if it's non-nil, zero value otherwise. +func (p *PushEvent) GetBaseRef() string { + if p == nil || p.BaseRef == nil { + return "" + } + return *p.BaseRef +} + +// GetBefore returns the Before field if it's non-nil, zero value otherwise. +func (p *PushEvent) GetBefore() string { + if p == nil || p.Before == nil { + return "" + } + return *p.Before +} + +// GetCompare returns the Compare field if it's non-nil, zero value otherwise. +func (p *PushEvent) GetCompare() string { + if p == nil || p.Compare == nil { + return "" + } + return *p.Compare +} + +// GetCreated returns the Created field if it's non-nil, zero value otherwise. +func (p *PushEvent) GetCreated() bool { + if p == nil || p.Created == nil { + return false + } + return *p.Created +} + +// GetDeleted returns the Deleted field if it's non-nil, zero value otherwise. +func (p *PushEvent) GetDeleted() bool { + if p == nil || p.Deleted == nil { + return false + } + return *p.Deleted +} + +// GetDistinctSize returns the DistinctSize field if it's non-nil, zero value otherwise. +func (p *PushEvent) GetDistinctSize() int { + if p == nil || p.DistinctSize == nil { + return 0 + } + return *p.DistinctSize +} + +// GetForced returns the Forced field if it's non-nil, zero value otherwise. +func (p *PushEvent) GetForced() bool { + if p == nil || p.Forced == nil { + return false + } + return *p.Forced +} + +// GetHead returns the Head field if it's non-nil, zero value otherwise. +func (p *PushEvent) GetHead() string { + if p == nil || p.Head == nil { + return "" + } + return *p.Head +} + +// GetHeadCommit returns the HeadCommit field. +func (p *PushEvent) GetHeadCommit() *PushEventCommit { + if p == nil { + return nil + } + return p.HeadCommit +} + +// GetInstallation returns the Installation field. +func (p *PushEvent) GetInstallation() *Installation { + if p == nil { + return nil + } + return p.Installation +} + +// GetPusher returns the Pusher field. +func (p *PushEvent) GetPusher() *User { + if p == nil { + return nil + } + return p.Pusher +} + +// GetPushID returns the PushID field if it's non-nil, zero value otherwise. +func (p *PushEvent) GetPushID() int64 { + if p == nil || p.PushID == nil { + return 0 + } + return *p.PushID +} + +// GetRef returns the Ref field if it's non-nil, zero value otherwise. +func (p *PushEvent) GetRef() string { + if p == nil || p.Ref == nil { + return "" + } + return *p.Ref +} + +// GetRepo returns the Repo field. +func (p *PushEvent) GetRepo() *PushEventRepository { + if p == nil { + return nil + } + return p.Repo +} + +// GetSender returns the Sender field. +func (p *PushEvent) GetSender() *User { + if p == nil { + return nil + } + return p.Sender +} + +// GetSize returns the Size field if it's non-nil, zero value otherwise. +func (p *PushEvent) GetSize() int { + if p == nil || p.Size == nil { + return 0 + } + return *p.Size +} + +// GetAuthor returns the Author field. +func (p *PushEventCommit) GetAuthor() *CommitAuthor { + if p == nil { + return nil + } + return p.Author +} + +// GetCommitter returns the Committer field. +func (p *PushEventCommit) GetCommitter() *CommitAuthor { + if p == nil { + return nil + } + return p.Committer +} + +// GetDistinct returns the Distinct field if it's non-nil, zero value otherwise. +func (p *PushEventCommit) GetDistinct() bool { + if p == nil || p.Distinct == nil { + return false + } + return *p.Distinct +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (p *PushEventCommit) GetID() string { + if p == nil || p.ID == nil { + return "" + } + return *p.ID +} + +// GetMessage returns the Message field if it's non-nil, zero value otherwise. +func (p *PushEventCommit) GetMessage() string { + if p == nil || p.Message == nil { + return "" + } + return *p.Message +} + +// GetSHA returns the SHA field if it's non-nil, zero value otherwise. +func (p *PushEventCommit) GetSHA() string { + if p == nil || p.SHA == nil { + return "" + } + return *p.SHA +} + +// GetTimestamp returns the Timestamp field if it's non-nil, zero value otherwise. +func (p *PushEventCommit) GetTimestamp() Timestamp { + if p == nil || p.Timestamp == nil { + return Timestamp{} + } + return *p.Timestamp +} + +// GetTreeID returns the TreeID field if it's non-nil, zero value otherwise. +func (p *PushEventCommit) GetTreeID() string { + if p == nil || p.TreeID == nil { + return "" + } + return *p.TreeID +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (p *PushEventCommit) GetURL() string { + if p == nil || p.URL == nil { + return "" + } + return *p.URL +} + +// GetEmail returns the Email field if it's non-nil, zero value otherwise. +func (p *PushEventRepoOwner) GetEmail() string { + if p == nil || p.Email == nil { + return "" + } + return *p.Email +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (p *PushEventRepoOwner) GetName() string { + if p == nil || p.Name == nil { + return "" + } + return *p.Name +} + +// GetArchiveURL returns the ArchiveURL field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetArchiveURL() string { + if p == nil || p.ArchiveURL == nil { + return "" + } + return *p.ArchiveURL +} + +// GetCloneURL returns the CloneURL field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetCloneURL() string { + if p == nil || p.CloneURL == nil { + return "" + } + return *p.CloneURL +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetCreatedAt() Timestamp { + if p == nil || p.CreatedAt == nil { + return Timestamp{} + } + return *p.CreatedAt +} + +// GetDefaultBranch returns the DefaultBranch field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetDefaultBranch() string { + if p == nil || p.DefaultBranch == nil { + return "" + } + return *p.DefaultBranch +} + +// GetDescription returns the Description field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetDescription() string { + if p == nil || p.Description == nil { + return "" + } + return *p.Description +} + +// GetFork returns the Fork field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetFork() bool { + if p == nil || p.Fork == nil { + return false + } + return *p.Fork +} + +// GetForksCount returns the ForksCount field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetForksCount() int { + if p == nil || p.ForksCount == nil { + return 0 + } + return *p.ForksCount +} + +// GetFullName returns the FullName field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetFullName() string { + if p == nil || p.FullName == nil { + return "" + } + return *p.FullName +} + +// GetGitURL returns the GitURL field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetGitURL() string { + if p == nil || p.GitURL == nil { + return "" + } + return *p.GitURL +} + +// GetHasDownloads returns the HasDownloads field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetHasDownloads() bool { + if p == nil || p.HasDownloads == nil { + return false + } + return *p.HasDownloads +} + +// GetHasIssues returns the HasIssues field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetHasIssues() bool { + if p == nil || p.HasIssues == nil { + return false + } + return *p.HasIssues +} + +// GetHasPages returns the HasPages field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetHasPages() bool { + if p == nil || p.HasPages == nil { + return false + } + return *p.HasPages +} + +// GetHasWiki returns the HasWiki field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetHasWiki() bool { + if p == nil || p.HasWiki == nil { + return false + } + return *p.HasWiki +} + +// GetHomepage returns the Homepage field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetHomepage() string { + if p == nil || p.Homepage == nil { + return "" + } + return *p.Homepage +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetHTMLURL() string { + if p == nil || p.HTMLURL == nil { + return "" + } + return *p.HTMLURL +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetID() int64 { + if p == nil || p.ID == nil { + return 0 + } + return *p.ID +} + +// GetLanguage returns the Language field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetLanguage() string { + if p == nil || p.Language == nil { + return "" + } + return *p.Language +} + +// GetMasterBranch returns the MasterBranch field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetMasterBranch() string { + if p == nil || p.MasterBranch == nil { + return "" + } + return *p.MasterBranch +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetName() string { + if p == nil || p.Name == nil { + return "" + } + return *p.Name +} + +// GetOpenIssuesCount returns the OpenIssuesCount field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetOpenIssuesCount() int { + if p == nil || p.OpenIssuesCount == nil { + return 0 + } + return *p.OpenIssuesCount +} + +// GetOrganization returns the Organization field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetOrganization() string { + if p == nil || p.Organization == nil { + return "" + } + return *p.Organization +} + +// GetOwner returns the Owner field. +func (p *PushEventRepository) GetOwner() *PushEventRepoOwner { + if p == nil { + return nil + } + return p.Owner +} + +// GetPrivate returns the Private field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetPrivate() bool { + if p == nil || p.Private == nil { + return false + } + return *p.Private +} + +// GetPushedAt returns the PushedAt field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetPushedAt() Timestamp { + if p == nil || p.PushedAt == nil { + return Timestamp{} + } + return *p.PushedAt +} + +// GetSize returns the Size field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetSize() int { + if p == nil || p.Size == nil { + return 0 + } + return *p.Size +} + +// GetSSHURL returns the SSHURL field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetSSHURL() string { + if p == nil || p.SSHURL == nil { + return "" + } + return *p.SSHURL +} + +// GetStargazersCount returns the StargazersCount field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetStargazersCount() int { + if p == nil || p.StargazersCount == nil { + return 0 + } + return *p.StargazersCount +} + +// GetStatusesURL returns the StatusesURL field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetStatusesURL() string { + if p == nil || p.StatusesURL == nil { + return "" + } + return *p.StatusesURL +} + +// GetSVNURL returns the SVNURL field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetSVNURL() string { + if p == nil || p.SVNURL == nil { + return "" + } + return *p.SVNURL +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetUpdatedAt() Timestamp { + if p == nil || p.UpdatedAt == nil { + return Timestamp{} + } + return *p.UpdatedAt +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetURL() string { + if p == nil || p.URL == nil { + return "" + } + return *p.URL +} + +// GetWatchersCount returns the WatchersCount field if it's non-nil, zero value otherwise. +func (p *PushEventRepository) GetWatchersCount() int { + if p == nil || p.WatchersCount == nil { + return 0 + } + return *p.WatchersCount +} + +// GetCore returns the Core field. +func (r *RateLimits) GetCore() *Rate { + if r == nil { + return nil + } + return r.Core +} + +// GetSearch returns the Search field. +func (r *RateLimits) GetSearch() *Rate { + if r == nil { + return nil + } + return r.Search +} + +// GetContent returns the Content field if it's non-nil, zero value otherwise. +func (r *Reaction) GetContent() string { + if r == nil || r.Content == nil { + return "" + } + return *r.Content +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (r *Reaction) GetID() int64 { + if r == nil || r.ID == nil { + return 0 + } + return *r.ID +} + +// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. +func (r *Reaction) GetNodeID() string { + if r == nil || r.NodeID == nil { + return "" + } + return *r.NodeID +} + +// GetUser returns the User field. +func (r *Reaction) GetUser() *User { + if r == nil { + return nil + } + return r.User +} + +// GetConfused returns the Confused field if it's non-nil, zero value otherwise. +func (r *Reactions) GetConfused() int { + if r == nil || r.Confused == nil { + return 0 + } + return *r.Confused +} + +// GetHeart returns the Heart field if it's non-nil, zero value otherwise. +func (r *Reactions) GetHeart() int { + if r == nil || r.Heart == nil { + return 0 + } + return *r.Heart +} + +// GetHooray returns the Hooray field if it's non-nil, zero value otherwise. +func (r *Reactions) GetHooray() int { + if r == nil || r.Hooray == nil { + return 0 + } + return *r.Hooray +} + +// GetLaugh returns the Laugh field if it's non-nil, zero value otherwise. +func (r *Reactions) GetLaugh() int { + if r == nil || r.Laugh == nil { + return 0 + } + return *r.Laugh +} + +// GetMinusOne returns the MinusOne field if it's non-nil, zero value otherwise. +func (r *Reactions) GetMinusOne() int { + if r == nil || r.MinusOne == nil { + return 0 + } + return *r.MinusOne +} + +// GetPlusOne returns the PlusOne field if it's non-nil, zero value otherwise. +func (r *Reactions) GetPlusOne() int { + if r == nil || r.PlusOne == nil { + return 0 + } + return *r.PlusOne +} + +// GetTotalCount returns the TotalCount field if it's non-nil, zero value otherwise. +func (r *Reactions) GetTotalCount() int { + if r == nil || r.TotalCount == nil { + return 0 + } + return *r.TotalCount +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (r *Reactions) GetURL() string { + if r == nil || r.URL == nil { + return "" + } + return *r.URL +} + +// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. +func (r *Reference) GetNodeID() string { + if r == nil || r.NodeID == nil { + return "" + } + return *r.NodeID +} + +// GetObject returns the Object field. +func (r *Reference) GetObject() *GitObject { + if r == nil { + return nil + } + return r.Object +} + +// GetRef returns the Ref field if it's non-nil, zero value otherwise. +func (r *Reference) GetRef() string { + if r == nil || r.Ref == nil { + return "" + } + return *r.Ref +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (r *Reference) GetURL() string { + if r == nil || r.URL == nil { + return "" + } + return *r.URL +} + +// GetBrowserDownloadURL returns the BrowserDownloadURL field if it's non-nil, zero value otherwise. +func (r *ReleaseAsset) GetBrowserDownloadURL() string { + if r == nil || r.BrowserDownloadURL == nil { + return "" + } + return *r.BrowserDownloadURL +} + +// GetContentType returns the ContentType field if it's non-nil, zero value otherwise. +func (r *ReleaseAsset) GetContentType() string { + if r == nil || r.ContentType == nil { + return "" + } + return *r.ContentType +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (r *ReleaseAsset) GetCreatedAt() Timestamp { + if r == nil || r.CreatedAt == nil { + return Timestamp{} + } + return *r.CreatedAt +} + +// GetDownloadCount returns the DownloadCount field if it's non-nil, zero value otherwise. +func (r *ReleaseAsset) GetDownloadCount() int { + if r == nil || r.DownloadCount == nil { + return 0 + } + return *r.DownloadCount +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (r *ReleaseAsset) GetID() int64 { + if r == nil || r.ID == nil { + return 0 + } + return *r.ID +} + +// GetLabel returns the Label field if it's non-nil, zero value otherwise. +func (r *ReleaseAsset) GetLabel() string { + if r == nil || r.Label == nil { + return "" + } + return *r.Label +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (r *ReleaseAsset) GetName() string { + if r == nil || r.Name == nil { + return "" + } + return *r.Name +} + +// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. +func (r *ReleaseAsset) GetNodeID() string { + if r == nil || r.NodeID == nil { + return "" + } + return *r.NodeID +} + +// GetSize returns the Size field if it's non-nil, zero value otherwise. +func (r *ReleaseAsset) GetSize() int { + if r == nil || r.Size == nil { + return 0 + } + return *r.Size +} + +// GetState returns the State field if it's non-nil, zero value otherwise. +func (r *ReleaseAsset) GetState() string { + if r == nil || r.State == nil { + return "" + } + return *r.State +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (r *ReleaseAsset) GetUpdatedAt() Timestamp { + if r == nil || r.UpdatedAt == nil { + return Timestamp{} + } + return *r.UpdatedAt +} + +// GetUploader returns the Uploader field. +func (r *ReleaseAsset) GetUploader() *User { + if r == nil { + return nil + } + return r.Uploader +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (r *ReleaseAsset) GetURL() string { + if r == nil || r.URL == nil { + return "" + } + return *r.URL +} + +// GetAction returns the Action field if it's non-nil, zero value otherwise. +func (r *ReleaseEvent) GetAction() string { + if r == nil || r.Action == nil { + return "" + } + return *r.Action +} + +// GetInstallation returns the Installation field. +func (r *ReleaseEvent) GetInstallation() *Installation { + if r == nil { + return nil + } + return r.Installation +} + +// GetRelease returns the Release field. +func (r *ReleaseEvent) GetRelease() *RepositoryRelease { + if r == nil { + return nil + } + return r.Release +} + +// GetRepo returns the Repo field. +func (r *ReleaseEvent) GetRepo() *Repository { + if r == nil { + return nil + } + return r.Repo +} + +// GetSender returns the Sender field. +func (r *ReleaseEvent) GetSender() *User { + if r == nil { + return nil + } + return r.Sender +} + +// GetFrom returns the From field if it's non-nil, zero value otherwise. +func (r *Rename) GetFrom() string { + if r == nil || r.From == nil { + return "" + } + return *r.From +} + +// GetTo returns the To field if it's non-nil, zero value otherwise. +func (r *Rename) GetTo() string { + if r == nil || r.To == nil { + return "" + } + return *r.To +} + +// GetIncompleteResults returns the IncompleteResults field if it's non-nil, zero value otherwise. +func (r *RepositoriesSearchResult) GetIncompleteResults() bool { + if r == nil || r.IncompleteResults == nil { + return false + } + return *r.IncompleteResults +} + +// GetTotal returns the Total field if it's non-nil, zero value otherwise. +func (r *RepositoriesSearchResult) GetTotal() int { + if r == nil || r.Total == nil { + return 0 + } + return *r.Total +} + +// GetAllowMergeCommit returns the AllowMergeCommit field if it's non-nil, zero value otherwise. +func (r *Repository) GetAllowMergeCommit() bool { + if r == nil || r.AllowMergeCommit == nil { + return false + } + return *r.AllowMergeCommit +} + +// GetAllowRebaseMerge returns the AllowRebaseMerge field if it's non-nil, zero value otherwise. +func (r *Repository) GetAllowRebaseMerge() bool { + if r == nil || r.AllowRebaseMerge == nil { + return false + } + return *r.AllowRebaseMerge +} + +// GetAllowSquashMerge returns the AllowSquashMerge field if it's non-nil, zero value otherwise. +func (r *Repository) GetAllowSquashMerge() bool { + if r == nil || r.AllowSquashMerge == nil { + return false + } + return *r.AllowSquashMerge +} + +// GetArchived returns the Archived field if it's non-nil, zero value otherwise. +func (r *Repository) GetArchived() bool { + if r == nil || r.Archived == nil { + return false + } + return *r.Archived +} + +// GetArchiveURL returns the ArchiveURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetArchiveURL() string { + if r == nil || r.ArchiveURL == nil { + return "" + } + return *r.ArchiveURL +} + +// GetAssigneesURL returns the AssigneesURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetAssigneesURL() string { + if r == nil || r.AssigneesURL == nil { + return "" + } + return *r.AssigneesURL +} + +// GetAutoInit returns the AutoInit field if it's non-nil, zero value otherwise. +func (r *Repository) GetAutoInit() bool { + if r == nil || r.AutoInit == nil { + return false + } + return *r.AutoInit +} + +// GetBlobsURL returns the BlobsURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetBlobsURL() string { + if r == nil || r.BlobsURL == nil { + return "" + } + return *r.BlobsURL +} + +// GetBranchesURL returns the BranchesURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetBranchesURL() string { + if r == nil || r.BranchesURL == nil { + return "" + } + return *r.BranchesURL +} + +// GetCloneURL returns the CloneURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetCloneURL() string { + if r == nil || r.CloneURL == nil { + return "" + } + return *r.CloneURL +} + +// GetCodeOfConduct returns the CodeOfConduct field. +func (r *Repository) GetCodeOfConduct() *CodeOfConduct { + if r == nil { + return nil + } + return r.CodeOfConduct +} + +// GetCollaboratorsURL returns the CollaboratorsURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetCollaboratorsURL() string { + if r == nil || r.CollaboratorsURL == nil { + return "" + } + return *r.CollaboratorsURL +} + +// GetCommentsURL returns the CommentsURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetCommentsURL() string { + if r == nil || r.CommentsURL == nil { + return "" + } + return *r.CommentsURL +} + +// GetCommitsURL returns the CommitsURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetCommitsURL() string { + if r == nil || r.CommitsURL == nil { + return "" + } + return *r.CommitsURL +} + +// GetCompareURL returns the CompareURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetCompareURL() string { + if r == nil || r.CompareURL == nil { + return "" + } + return *r.CompareURL +} + +// GetContentsURL returns the ContentsURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetContentsURL() string { + if r == nil || r.ContentsURL == nil { + return "" + } + return *r.ContentsURL +} + +// GetContributorsURL returns the ContributorsURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetContributorsURL() string { + if r == nil || r.ContributorsURL == nil { + return "" + } + return *r.ContributorsURL +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (r *Repository) GetCreatedAt() Timestamp { + if r == nil || r.CreatedAt == nil { + return Timestamp{} + } + return *r.CreatedAt +} + +// GetDefaultBranch returns the DefaultBranch field if it's non-nil, zero value otherwise. +func (r *Repository) GetDefaultBranch() string { + if r == nil || r.DefaultBranch == nil { + return "" + } + return *r.DefaultBranch +} + +// GetDeploymentsURL returns the DeploymentsURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetDeploymentsURL() string { + if r == nil || r.DeploymentsURL == nil { + return "" + } + return *r.DeploymentsURL +} + +// GetDescription returns the Description field if it's non-nil, zero value otherwise. +func (r *Repository) GetDescription() string { + if r == nil || r.Description == nil { + return "" + } + return *r.Description +} + +// GetDownloadsURL returns the DownloadsURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetDownloadsURL() string { + if r == nil || r.DownloadsURL == nil { + return "" + } + return *r.DownloadsURL +} + +// GetEventsURL returns the EventsURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetEventsURL() string { + if r == nil || r.EventsURL == nil { + return "" + } + return *r.EventsURL +} + +// GetFork returns the Fork field if it's non-nil, zero value otherwise. +func (r *Repository) GetFork() bool { + if r == nil || r.Fork == nil { + return false + } + return *r.Fork +} + +// GetForksCount returns the ForksCount field if it's non-nil, zero value otherwise. +func (r *Repository) GetForksCount() int { + if r == nil || r.ForksCount == nil { + return 0 + } + return *r.ForksCount +} + +// GetForksURL returns the ForksURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetForksURL() string { + if r == nil || r.ForksURL == nil { + return "" + } + return *r.ForksURL +} + +// GetFullName returns the FullName field if it's non-nil, zero value otherwise. +func (r *Repository) GetFullName() string { + if r == nil || r.FullName == nil { + return "" + } + return *r.FullName +} + +// GetGitCommitsURL returns the GitCommitsURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetGitCommitsURL() string { + if r == nil || r.GitCommitsURL == nil { + return "" + } + return *r.GitCommitsURL +} + +// GetGitignoreTemplate returns the GitignoreTemplate field if it's non-nil, zero value otherwise. +func (r *Repository) GetGitignoreTemplate() string { + if r == nil || r.GitignoreTemplate == nil { + return "" + } + return *r.GitignoreTemplate +} + +// GetGitRefsURL returns the GitRefsURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetGitRefsURL() string { + if r == nil || r.GitRefsURL == nil { + return "" + } + return *r.GitRefsURL +} + +// GetGitTagsURL returns the GitTagsURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetGitTagsURL() string { + if r == nil || r.GitTagsURL == nil { + return "" + } + return *r.GitTagsURL +} + +// GetGitURL returns the GitURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetGitURL() string { + if r == nil || r.GitURL == nil { + return "" + } + return *r.GitURL +} + +// GetHasDownloads returns the HasDownloads field if it's non-nil, zero value otherwise. +func (r *Repository) GetHasDownloads() bool { + if r == nil || r.HasDownloads == nil { + return false + } + return *r.HasDownloads +} + +// GetHasIssues returns the HasIssues field if it's non-nil, zero value otherwise. +func (r *Repository) GetHasIssues() bool { + if r == nil || r.HasIssues == nil { + return false + } + return *r.HasIssues +} + +// GetHasPages returns the HasPages field if it's non-nil, zero value otherwise. +func (r *Repository) GetHasPages() bool { + if r == nil || r.HasPages == nil { + return false + } + return *r.HasPages +} + +// GetHasProjects returns the HasProjects field if it's non-nil, zero value otherwise. +func (r *Repository) GetHasProjects() bool { + if r == nil || r.HasProjects == nil { + return false + } + return *r.HasProjects +} + +// GetHasWiki returns the HasWiki field if it's non-nil, zero value otherwise. +func (r *Repository) GetHasWiki() bool { + if r == nil || r.HasWiki == nil { + return false + } + return *r.HasWiki +} + +// GetHomepage returns the Homepage field if it's non-nil, zero value otherwise. +func (r *Repository) GetHomepage() string { + if r == nil || r.Homepage == nil { + return "" + } + return *r.Homepage +} + +// GetHooksURL returns the HooksURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetHooksURL() string { + if r == nil || r.HooksURL == nil { + return "" + } + return *r.HooksURL +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetHTMLURL() string { + if r == nil || r.HTMLURL == nil { + return "" + } + return *r.HTMLURL +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (r *Repository) GetID() int64 { + if r == nil || r.ID == nil { + return 0 + } + return *r.ID +} + +// GetIssueCommentURL returns the IssueCommentURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetIssueCommentURL() string { + if r == nil || r.IssueCommentURL == nil { + return "" + } + return *r.IssueCommentURL +} + +// GetIssueEventsURL returns the IssueEventsURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetIssueEventsURL() string { + if r == nil || r.IssueEventsURL == nil { + return "" + } + return *r.IssueEventsURL +} + +// GetIssuesURL returns the IssuesURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetIssuesURL() string { + if r == nil || r.IssuesURL == nil { + return "" + } + return *r.IssuesURL +} + +// GetKeysURL returns the KeysURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetKeysURL() string { + if r == nil || r.KeysURL == nil { + return "" + } + return *r.KeysURL +} + +// GetLabelsURL returns the LabelsURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetLabelsURL() string { + if r == nil || r.LabelsURL == nil { + return "" + } + return *r.LabelsURL +} + +// GetLanguage returns the Language field if it's non-nil, zero value otherwise. +func (r *Repository) GetLanguage() string { + if r == nil || r.Language == nil { + return "" + } + return *r.Language +} + +// GetLanguagesURL returns the LanguagesURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetLanguagesURL() string { + if r == nil || r.LanguagesURL == nil { + return "" + } + return *r.LanguagesURL +} + +// GetLicense returns the License field. +func (r *Repository) GetLicense() *License { + if r == nil { + return nil + } + return r.License +} + +// GetLicenseTemplate returns the LicenseTemplate field if it's non-nil, zero value otherwise. +func (r *Repository) GetLicenseTemplate() string { + if r == nil || r.LicenseTemplate == nil { + return "" + } + return *r.LicenseTemplate +} + +// GetMasterBranch returns the MasterBranch field if it's non-nil, zero value otherwise. +func (r *Repository) GetMasterBranch() string { + if r == nil || r.MasterBranch == nil { + return "" + } + return *r.MasterBranch +} + +// GetMergesURL returns the MergesURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetMergesURL() string { + if r == nil || r.MergesURL == nil { + return "" + } + return *r.MergesURL +} + +// GetMilestonesURL returns the MilestonesURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetMilestonesURL() string { + if r == nil || r.MilestonesURL == nil { + return "" + } + return *r.MilestonesURL +} + +// GetMirrorURL returns the MirrorURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetMirrorURL() string { + if r == nil || r.MirrorURL == nil { + return "" + } + return *r.MirrorURL +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (r *Repository) GetName() string { + if r == nil || r.Name == nil { + return "" + } + return *r.Name +} + +// GetNetworkCount returns the NetworkCount field if it's non-nil, zero value otherwise. +func (r *Repository) GetNetworkCount() int { + if r == nil || r.NetworkCount == nil { + return 0 + } + return *r.NetworkCount +} + +// GetNotificationsURL returns the NotificationsURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetNotificationsURL() string { + if r == nil || r.NotificationsURL == nil { + return "" + } + return *r.NotificationsURL +} + +// GetOpenIssuesCount returns the OpenIssuesCount field if it's non-nil, zero value otherwise. +func (r *Repository) GetOpenIssuesCount() int { + if r == nil || r.OpenIssuesCount == nil { + return 0 + } + return *r.OpenIssuesCount +} + +// GetOrganization returns the Organization field. +func (r *Repository) GetOrganization() *Organization { + if r == nil { + return nil + } + return r.Organization +} + +// GetOwner returns the Owner field. +func (r *Repository) GetOwner() *User { + if r == nil { + return nil + } + return r.Owner +} + +// GetParent returns the Parent field. +func (r *Repository) GetParent() *Repository { + if r == nil { + return nil + } + return r.Parent +} + +// GetPermissions returns the Permissions field if it's non-nil, zero value otherwise. +func (r *Repository) GetPermissions() map[string]bool { + if r == nil || r.Permissions == nil { + return map[string]bool{} + } + return *r.Permissions +} + +// GetPrivate returns the Private field if it's non-nil, zero value otherwise. +func (r *Repository) GetPrivate() bool { + if r == nil || r.Private == nil { + return false + } + return *r.Private +} + +// GetPullsURL returns the PullsURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetPullsURL() string { + if r == nil || r.PullsURL == nil { + return "" + } + return *r.PullsURL +} + +// GetPushedAt returns the PushedAt field if it's non-nil, zero value otherwise. +func (r *Repository) GetPushedAt() Timestamp { + if r == nil || r.PushedAt == nil { + return Timestamp{} + } + return *r.PushedAt +} + +// GetReleasesURL returns the ReleasesURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetReleasesURL() string { + if r == nil || r.ReleasesURL == nil { + return "" + } + return *r.ReleasesURL +} + +// GetSize returns the Size field if it's non-nil, zero value otherwise. +func (r *Repository) GetSize() int { + if r == nil || r.Size == nil { + return 0 + } + return *r.Size +} + +// GetSource returns the Source field. +func (r *Repository) GetSource() *Repository { + if r == nil { + return nil + } + return r.Source +} + +// GetSSHURL returns the SSHURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetSSHURL() string { + if r == nil || r.SSHURL == nil { + return "" + } + return *r.SSHURL +} + +// GetStargazersCount returns the StargazersCount field if it's non-nil, zero value otherwise. +func (r *Repository) GetStargazersCount() int { + if r == nil || r.StargazersCount == nil { + return 0 + } + return *r.StargazersCount +} + +// GetStargazersURL returns the StargazersURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetStargazersURL() string { + if r == nil || r.StargazersURL == nil { + return "" + } + return *r.StargazersURL +} + +// GetStatusesURL returns the StatusesURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetStatusesURL() string { + if r == nil || r.StatusesURL == nil { + return "" + } + return *r.StatusesURL +} + +// GetSubscribersCount returns the SubscribersCount field if it's non-nil, zero value otherwise. +func (r *Repository) GetSubscribersCount() int { + if r == nil || r.SubscribersCount == nil { + return 0 + } + return *r.SubscribersCount +} + +// GetSubscribersURL returns the SubscribersURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetSubscribersURL() string { + if r == nil || r.SubscribersURL == nil { + return "" + } + return *r.SubscribersURL +} + +// GetSubscriptionURL returns the SubscriptionURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetSubscriptionURL() string { + if r == nil || r.SubscriptionURL == nil { + return "" + } + return *r.SubscriptionURL +} + +// GetSVNURL returns the SVNURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetSVNURL() string { + if r == nil || r.SVNURL == nil { + return "" + } + return *r.SVNURL +} + +// GetTagsURL returns the TagsURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetTagsURL() string { + if r == nil || r.TagsURL == nil { + return "" + } + return *r.TagsURL +} + +// GetTeamID returns the TeamID field if it's non-nil, zero value otherwise. +func (r *Repository) GetTeamID() int64 { + if r == nil || r.TeamID == nil { + return 0 + } + return *r.TeamID +} + +// GetTeamsURL returns the TeamsURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetTeamsURL() string { + if r == nil || r.TeamsURL == nil { + return "" + } + return *r.TeamsURL +} + +// GetTreesURL returns the TreesURL field if it's non-nil, zero value otherwise. +func (r *Repository) GetTreesURL() string { + if r == nil || r.TreesURL == nil { + return "" + } + return *r.TreesURL +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (r *Repository) GetUpdatedAt() Timestamp { + if r == nil || r.UpdatedAt == nil { + return Timestamp{} + } + return *r.UpdatedAt +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (r *Repository) GetURL() string { + if r == nil || r.URL == nil { + return "" + } + return *r.URL +} + +// GetWatchersCount returns the WatchersCount field if it's non-nil, zero value otherwise. +func (r *Repository) GetWatchersCount() int { + if r == nil || r.WatchersCount == nil { + return 0 + } + return *r.WatchersCount +} + +// GetBody returns the Body field if it's non-nil, zero value otherwise. +func (r *RepositoryComment) GetBody() string { + if r == nil || r.Body == nil { + return "" + } + return *r.Body +} + +// GetCommitID returns the CommitID field if it's non-nil, zero value otherwise. +func (r *RepositoryComment) GetCommitID() string { + if r == nil || r.CommitID == nil { + return "" + } + return *r.CommitID +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (r *RepositoryComment) GetCreatedAt() time.Time { + if r == nil || r.CreatedAt == nil { + return time.Time{} + } + return *r.CreatedAt +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (r *RepositoryComment) GetHTMLURL() string { + if r == nil || r.HTMLURL == nil { + return "" + } + return *r.HTMLURL +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (r *RepositoryComment) GetID() int64 { + if r == nil || r.ID == nil { + return 0 + } + return *r.ID +} + +// GetPath returns the Path field if it's non-nil, zero value otherwise. +func (r *RepositoryComment) GetPath() string { + if r == nil || r.Path == nil { + return "" + } + return *r.Path +} + +// GetPosition returns the Position field if it's non-nil, zero value otherwise. +func (r *RepositoryComment) GetPosition() int { + if r == nil || r.Position == nil { + return 0 + } + return *r.Position +} + +// GetReactions returns the Reactions field. +func (r *RepositoryComment) GetReactions() *Reactions { + if r == nil { + return nil + } + return r.Reactions +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (r *RepositoryComment) GetUpdatedAt() time.Time { + if r == nil || r.UpdatedAt == nil { + return time.Time{} + } + return *r.UpdatedAt +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (r *RepositoryComment) GetURL() string { + if r == nil || r.URL == nil { + return "" + } + return *r.URL +} + +// GetUser returns the User field. +func (r *RepositoryComment) GetUser() *User { + if r == nil { + return nil + } + return r.User +} + +// GetAuthor returns the Author field. +func (r *RepositoryCommit) GetAuthor() *User { + if r == nil { + return nil + } + return r.Author +} + +// GetCommentsURL returns the CommentsURL field if it's non-nil, zero value otherwise. +func (r *RepositoryCommit) GetCommentsURL() string { + if r == nil || r.CommentsURL == nil { + return "" + } + return *r.CommentsURL +} + +// GetCommit returns the Commit field. +func (r *RepositoryCommit) GetCommit() *Commit { + if r == nil { + return nil + } + return r.Commit +} + +// GetCommitter returns the Committer field. +func (r *RepositoryCommit) GetCommitter() *User { + if r == nil { + return nil + } + return r.Committer +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (r *RepositoryCommit) GetHTMLURL() string { + if r == nil || r.HTMLURL == nil { + return "" + } + return *r.HTMLURL +} + +// GetSHA returns the SHA field if it's non-nil, zero value otherwise. +func (r *RepositoryCommit) GetSHA() string { + if r == nil || r.SHA == nil { + return "" + } + return *r.SHA +} + +// GetStats returns the Stats field. +func (r *RepositoryCommit) GetStats() *CommitStats { + if r == nil { + return nil + } + return r.Stats +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (r *RepositoryCommit) GetURL() string { + if r == nil || r.URL == nil { + return "" + } + return *r.URL +} + +// GetDownloadURL returns the DownloadURL field if it's non-nil, zero value otherwise. +func (r *RepositoryContent) GetDownloadURL() string { + if r == nil || r.DownloadURL == nil { + return "" + } + return *r.DownloadURL +} + +// GetEncoding returns the Encoding field if it's non-nil, zero value otherwise. +func (r *RepositoryContent) GetEncoding() string { + if r == nil || r.Encoding == nil { + return "" + } + return *r.Encoding +} + +// GetGitURL returns the GitURL field if it's non-nil, zero value otherwise. +func (r *RepositoryContent) GetGitURL() string { + if r == nil || r.GitURL == nil { + return "" + } + return *r.GitURL +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (r *RepositoryContent) GetHTMLURL() string { + if r == nil || r.HTMLURL == nil { + return "" + } + return *r.HTMLURL +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (r *RepositoryContent) GetName() string { + if r == nil || r.Name == nil { + return "" + } + return *r.Name +} + +// GetPath returns the Path field if it's non-nil, zero value otherwise. +func (r *RepositoryContent) GetPath() string { + if r == nil || r.Path == nil { + return "" + } + return *r.Path +} + +// GetSHA returns the SHA field if it's non-nil, zero value otherwise. +func (r *RepositoryContent) GetSHA() string { + if r == nil || r.SHA == nil { + return "" + } + return *r.SHA +} + +// GetSize returns the Size field if it's non-nil, zero value otherwise. +func (r *RepositoryContent) GetSize() int { + if r == nil || r.Size == nil { + return 0 + } + return *r.Size +} + +// GetType returns the Type field if it's non-nil, zero value otherwise. +func (r *RepositoryContent) GetType() string { + if r == nil || r.Type == nil { + return "" + } + return *r.Type +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (r *RepositoryContent) GetURL() string { + if r == nil || r.URL == nil { + return "" + } + return *r.URL +} + +// GetAuthor returns the Author field. +func (r *RepositoryContentFileOptions) GetAuthor() *CommitAuthor { + if r == nil { + return nil + } + return r.Author +} + +// GetBranch returns the Branch field if it's non-nil, zero value otherwise. +func (r *RepositoryContentFileOptions) GetBranch() string { + if r == nil || r.Branch == nil { + return "" + } + return *r.Branch +} + +// GetCommitter returns the Committer field. +func (r *RepositoryContentFileOptions) GetCommitter() *CommitAuthor { + if r == nil { + return nil + } + return r.Committer +} + +// GetMessage returns the Message field if it's non-nil, zero value otherwise. +func (r *RepositoryContentFileOptions) GetMessage() string { + if r == nil || r.Message == nil { + return "" + } + return *r.Message +} + +// GetSHA returns the SHA field if it's non-nil, zero value otherwise. +func (r *RepositoryContentFileOptions) GetSHA() string { + if r == nil || r.SHA == nil { + return "" + } + return *r.SHA +} + +// GetContent returns the Content field. +func (r *RepositoryContentResponse) GetContent() *RepositoryContent { + if r == nil { + return nil + } + return r.Content +} + +// GetAction returns the Action field if it's non-nil, zero value otherwise. +func (r *RepositoryEvent) GetAction() string { + if r == nil || r.Action == nil { + return "" + } + return *r.Action +} + +// GetInstallation returns the Installation field. +func (r *RepositoryEvent) GetInstallation() *Installation { + if r == nil { + return nil + } + return r.Installation +} + +// GetOrg returns the Org field. +func (r *RepositoryEvent) GetOrg() *Organization { + if r == nil { + return nil + } + return r.Org +} + +// GetRepo returns the Repo field. +func (r *RepositoryEvent) GetRepo() *Repository { + if r == nil { + return nil + } + return r.Repo +} + +// GetSender returns the Sender field. +func (r *RepositoryEvent) GetSender() *User { + if r == nil { + return nil + } + return r.Sender +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (r *RepositoryInvitation) GetCreatedAt() Timestamp { + if r == nil || r.CreatedAt == nil { + return Timestamp{} + } + return *r.CreatedAt +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (r *RepositoryInvitation) GetHTMLURL() string { + if r == nil || r.HTMLURL == nil { + return "" + } + return *r.HTMLURL +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (r *RepositoryInvitation) GetID() int64 { + if r == nil || r.ID == nil { + return 0 + } + return *r.ID +} + +// GetInvitee returns the Invitee field. +func (r *RepositoryInvitation) GetInvitee() *User { + if r == nil { + return nil + } + return r.Invitee +} + +// GetInviter returns the Inviter field. +func (r *RepositoryInvitation) GetInviter() *User { + if r == nil { + return nil + } + return r.Inviter +} + +// GetPermissions returns the Permissions field if it's non-nil, zero value otherwise. +func (r *RepositoryInvitation) GetPermissions() string { + if r == nil || r.Permissions == nil { + return "" + } + return *r.Permissions +} + +// GetRepo returns the Repo field. +func (r *RepositoryInvitation) GetRepo() *Repository { + if r == nil { + return nil + } + return r.Repo +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (r *RepositoryInvitation) GetURL() string { + if r == nil || r.URL == nil { + return "" + } + return *r.URL +} + +// GetContent returns the Content field if it's non-nil, zero value otherwise. +func (r *RepositoryLicense) GetContent() string { + if r == nil || r.Content == nil { + return "" + } + return *r.Content +} + +// GetDownloadURL returns the DownloadURL field if it's non-nil, zero value otherwise. +func (r *RepositoryLicense) GetDownloadURL() string { + if r == nil || r.DownloadURL == nil { + return "" + } + return *r.DownloadURL +} + +// GetEncoding returns the Encoding field if it's non-nil, zero value otherwise. +func (r *RepositoryLicense) GetEncoding() string { + if r == nil || r.Encoding == nil { + return "" + } + return *r.Encoding +} + +// GetGitURL returns the GitURL field if it's non-nil, zero value otherwise. +func (r *RepositoryLicense) GetGitURL() string { + if r == nil || r.GitURL == nil { + return "" + } + return *r.GitURL +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (r *RepositoryLicense) GetHTMLURL() string { + if r == nil || r.HTMLURL == nil { + return "" + } + return *r.HTMLURL +} + +// GetLicense returns the License field. +func (r *RepositoryLicense) GetLicense() *License { + if r == nil { + return nil + } + return r.License +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (r *RepositoryLicense) GetName() string { + if r == nil || r.Name == nil { + return "" + } + return *r.Name +} + +// GetPath returns the Path field if it's non-nil, zero value otherwise. +func (r *RepositoryLicense) GetPath() string { + if r == nil || r.Path == nil { + return "" + } + return *r.Path +} + +// GetSHA returns the SHA field if it's non-nil, zero value otherwise. +func (r *RepositoryLicense) GetSHA() string { + if r == nil || r.SHA == nil { + return "" + } + return *r.SHA +} + +// GetSize returns the Size field if it's non-nil, zero value otherwise. +func (r *RepositoryLicense) GetSize() int { + if r == nil || r.Size == nil { + return 0 + } + return *r.Size +} + +// GetType returns the Type field if it's non-nil, zero value otherwise. +func (r *RepositoryLicense) GetType() string { + if r == nil || r.Type == nil { + return "" + } + return *r.Type +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (r *RepositoryLicense) GetURL() string { + if r == nil || r.URL == nil { + return "" + } + return *r.URL +} + +// GetBase returns the Base field if it's non-nil, zero value otherwise. +func (r *RepositoryMergeRequest) GetBase() string { + if r == nil || r.Base == nil { + return "" + } + return *r.Base +} + +// GetCommitMessage returns the CommitMessage field if it's non-nil, zero value otherwise. +func (r *RepositoryMergeRequest) GetCommitMessage() string { + if r == nil || r.CommitMessage == nil { + return "" + } + return *r.CommitMessage +} + +// GetHead returns the Head field if it's non-nil, zero value otherwise. +func (r *RepositoryMergeRequest) GetHead() string { + if r == nil || r.Head == nil { + return "" + } + return *r.Head +} + +// GetPermission returns the Permission field if it's non-nil, zero value otherwise. +func (r *RepositoryPermissionLevel) GetPermission() string { + if r == nil || r.Permission == nil { + return "" + } + return *r.Permission +} + +// GetUser returns the User field. +func (r *RepositoryPermissionLevel) GetUser() *User { + if r == nil { + return nil + } + return r.User +} + +// GetAssetsURL returns the AssetsURL field if it's non-nil, zero value otherwise. +func (r *RepositoryRelease) GetAssetsURL() string { + if r == nil || r.AssetsURL == nil { + return "" + } + return *r.AssetsURL +} + +// GetAuthor returns the Author field. +func (r *RepositoryRelease) GetAuthor() *User { + if r == nil { + return nil + } + return r.Author +} + +// GetBody returns the Body field if it's non-nil, zero value otherwise. +func (r *RepositoryRelease) GetBody() string { + if r == nil || r.Body == nil { + return "" + } + return *r.Body +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (r *RepositoryRelease) GetCreatedAt() Timestamp { + if r == nil || r.CreatedAt == nil { + return Timestamp{} + } + return *r.CreatedAt +} + +// GetDraft returns the Draft field if it's non-nil, zero value otherwise. +func (r *RepositoryRelease) GetDraft() bool { + if r == nil || r.Draft == nil { + return false + } + return *r.Draft +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (r *RepositoryRelease) GetHTMLURL() string { + if r == nil || r.HTMLURL == nil { + return "" + } + return *r.HTMLURL +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (r *RepositoryRelease) GetID() int64 { + if r == nil || r.ID == nil { + return 0 + } + return *r.ID +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (r *RepositoryRelease) GetName() string { + if r == nil || r.Name == nil { + return "" + } + return *r.Name +} + +// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. +func (r *RepositoryRelease) GetNodeID() string { + if r == nil || r.NodeID == nil { + return "" + } + return *r.NodeID +} + +// GetPrerelease returns the Prerelease field if it's non-nil, zero value otherwise. +func (r *RepositoryRelease) GetPrerelease() bool { + if r == nil || r.Prerelease == nil { + return false + } + return *r.Prerelease +} + +// GetPublishedAt returns the PublishedAt field if it's non-nil, zero value otherwise. +func (r *RepositoryRelease) GetPublishedAt() Timestamp { + if r == nil || r.PublishedAt == nil { + return Timestamp{} + } + return *r.PublishedAt +} + +// GetTagName returns the TagName field if it's non-nil, zero value otherwise. +func (r *RepositoryRelease) GetTagName() string { + if r == nil || r.TagName == nil { + return "" + } + return *r.TagName +} + +// GetTarballURL returns the TarballURL field if it's non-nil, zero value otherwise. +func (r *RepositoryRelease) GetTarballURL() string { + if r == nil || r.TarballURL == nil { + return "" + } + return *r.TarballURL +} + +// GetTargetCommitish returns the TargetCommitish field if it's non-nil, zero value otherwise. +func (r *RepositoryRelease) GetTargetCommitish() string { + if r == nil || r.TargetCommitish == nil { + return "" + } + return *r.TargetCommitish +} + +// GetUploadURL returns the UploadURL field if it's non-nil, zero value otherwise. +func (r *RepositoryRelease) GetUploadURL() string { + if r == nil || r.UploadURL == nil { + return "" + } + return *r.UploadURL +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (r *RepositoryRelease) GetURL() string { + if r == nil || r.URL == nil { + return "" + } + return *r.URL +} + +// GetZipballURL returns the ZipballURL field if it's non-nil, zero value otherwise. +func (r *RepositoryRelease) GetZipballURL() string { + if r == nil || r.ZipballURL == nil { + return "" + } + return *r.ZipballURL +} + +// GetCommit returns the Commit field. +func (r *RepositoryTag) GetCommit() *Commit { + if r == nil { + return nil + } + return r.Commit +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (r *RepositoryTag) GetName() string { + if r == nil || r.Name == nil { + return "" + } + return *r.Name +} + +// GetTarballURL returns the TarballURL field if it's non-nil, zero value otherwise. +func (r *RepositoryTag) GetTarballURL() string { + if r == nil || r.TarballURL == nil { + return "" + } + return *r.TarballURL +} + +// GetZipballURL returns the ZipballURL field if it's non-nil, zero value otherwise. +func (r *RepositoryTag) GetZipballURL() string { + if r == nil || r.ZipballURL == nil { + return "" + } + return *r.ZipballURL +} + +// GetForkRepos returns the ForkRepos field if it's non-nil, zero value otherwise. +func (r *RepoStats) GetForkRepos() int { + if r == nil || r.ForkRepos == nil { + return 0 + } + return *r.ForkRepos +} + +// GetOrgRepos returns the OrgRepos field if it's non-nil, zero value otherwise. +func (r *RepoStats) GetOrgRepos() int { + if r == nil || r.OrgRepos == nil { + return 0 + } + return *r.OrgRepos +} + +// GetRootRepos returns the RootRepos field if it's non-nil, zero value otherwise. +func (r *RepoStats) GetRootRepos() int { + if r == nil || r.RootRepos == nil { + return 0 + } + return *r.RootRepos +} + +// GetTotalPushes returns the TotalPushes field if it's non-nil, zero value otherwise. +func (r *RepoStats) GetTotalPushes() int { + if r == nil || r.TotalPushes == nil { + return 0 + } + return *r.TotalPushes +} + +// GetTotalRepos returns the TotalRepos field if it's non-nil, zero value otherwise. +func (r *RepoStats) GetTotalRepos() int { + if r == nil || r.TotalRepos == nil { + return 0 + } + return *r.TotalRepos +} + +// GetTotalWikis returns the TotalWikis field if it's non-nil, zero value otherwise. +func (r *RepoStats) GetTotalWikis() int { + if r == nil || r.TotalWikis == nil { + return 0 + } + return *r.TotalWikis +} + +// GetContext returns the Context field if it's non-nil, zero value otherwise. +func (r *RepoStatus) GetContext() string { + if r == nil || r.Context == nil { + return "" + } + return *r.Context +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (r *RepoStatus) GetCreatedAt() time.Time { + if r == nil || r.CreatedAt == nil { + return time.Time{} + } + return *r.CreatedAt +} + +// GetCreator returns the Creator field. +func (r *RepoStatus) GetCreator() *User { + if r == nil { + return nil + } + return r.Creator +} + +// GetDescription returns the Description field if it's non-nil, zero value otherwise. +func (r *RepoStatus) GetDescription() string { + if r == nil || r.Description == nil { + return "" + } + return *r.Description +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (r *RepoStatus) GetID() int64 { + if r == nil || r.ID == nil { + return 0 + } + return *r.ID +} + +// GetState returns the State field if it's non-nil, zero value otherwise. +func (r *RepoStatus) GetState() string { + if r == nil || r.State == nil { + return "" + } + return *r.State +} + +// GetTargetURL returns the TargetURL field if it's non-nil, zero value otherwise. +func (r *RepoStatus) GetTargetURL() string { + if r == nil || r.TargetURL == nil { + return "" + } + return *r.TargetURL +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (r *RepoStatus) GetUpdatedAt() time.Time { + if r == nil || r.UpdatedAt == nil { + return time.Time{} + } + return *r.UpdatedAt +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (r *RepoStatus) GetURL() string { + if r == nil || r.URL == nil { + return "" + } + return *r.URL +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (s *ServiceHook) GetName() string { + if s == nil || s.Name == nil { + return "" + } + return *s.Name +} + +// GetPayload returns the Payload field if it's non-nil, zero value otherwise. +func (s *SignatureVerification) GetPayload() string { + if s == nil || s.Payload == nil { + return "" + } + return *s.Payload +} + +// GetReason returns the Reason field if it's non-nil, zero value otherwise. +func (s *SignatureVerification) GetReason() string { + if s == nil || s.Reason == nil { + return "" + } + return *s.Reason +} + +// GetSignature returns the Signature field if it's non-nil, zero value otherwise. +func (s *SignatureVerification) GetSignature() string { + if s == nil || s.Signature == nil { + return "" + } + return *s.Signature +} + +// GetVerified returns the Verified field if it's non-nil, zero value otherwise. +func (s *SignatureVerification) GetVerified() bool { + if s == nil || s.Verified == nil { + return false + } + return *s.Verified +} + +// GetActor returns the Actor field. +func (s *Source) GetActor() *User { + if s == nil { + return nil + } + return s.Actor +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (s *Source) GetID() int64 { + if s == nil || s.ID == nil { + return 0 + } + return *s.ID +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (s *Source) GetURL() string { + if s == nil || s.URL == nil { + return "" + } + return *s.URL +} + +// GetEmail returns the Email field if it's non-nil, zero value otherwise. +func (s *SourceImportAuthor) GetEmail() string { + if s == nil || s.Email == nil { + return "" + } + return *s.Email +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (s *SourceImportAuthor) GetID() int64 { + if s == nil || s.ID == nil { + return 0 + } + return *s.ID +} + +// GetImportURL returns the ImportURL field if it's non-nil, zero value otherwise. +func (s *SourceImportAuthor) GetImportURL() string { + if s == nil || s.ImportURL == nil { + return "" + } + return *s.ImportURL +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (s *SourceImportAuthor) GetName() string { + if s == nil || s.Name == nil { + return "" + } + return *s.Name +} + +// GetRemoteID returns the RemoteID field if it's non-nil, zero value otherwise. +func (s *SourceImportAuthor) GetRemoteID() string { + if s == nil || s.RemoteID == nil { + return "" + } + return *s.RemoteID +} + +// GetRemoteName returns the RemoteName field if it's non-nil, zero value otherwise. +func (s *SourceImportAuthor) GetRemoteName() string { + if s == nil || s.RemoteName == nil { + return "" + } + return *s.RemoteName +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (s *SourceImportAuthor) GetURL() string { + if s == nil || s.URL == nil { + return "" + } + return *s.URL +} + +// GetStarredAt returns the StarredAt field if it's non-nil, zero value otherwise. +func (s *Stargazer) GetStarredAt() Timestamp { + if s == nil || s.StarredAt == nil { + return Timestamp{} + } + return *s.StarredAt +} + +// GetUser returns the User field. +func (s *Stargazer) GetUser() *User { + if s == nil { + return nil + } + return s.User +} + +// GetRepository returns the Repository field. +func (s *StarredRepository) GetRepository() *Repository { + if s == nil { + return nil + } + return s.Repository +} + +// GetStarredAt returns the StarredAt field if it's non-nil, zero value otherwise. +func (s *StarredRepository) GetStarredAt() Timestamp { + if s == nil || s.StarredAt == nil { + return Timestamp{} + } + return *s.StarredAt +} + +// GetCommit returns the Commit field. +func (s *StatusEvent) GetCommit() *RepositoryCommit { + if s == nil { + return nil + } + return s.Commit +} + +// GetContext returns the Context field if it's non-nil, zero value otherwise. +func (s *StatusEvent) GetContext() string { + if s == nil || s.Context == nil { + return "" + } + return *s.Context +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (s *StatusEvent) GetCreatedAt() Timestamp { + if s == nil || s.CreatedAt == nil { + return Timestamp{} + } + return *s.CreatedAt +} + +// GetDescription returns the Description field if it's non-nil, zero value otherwise. +func (s *StatusEvent) GetDescription() string { + if s == nil || s.Description == nil { + return "" + } + return *s.Description +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (s *StatusEvent) GetID() int64 { + if s == nil || s.ID == nil { + return 0 + } + return *s.ID +} + +// GetInstallation returns the Installation field. +func (s *StatusEvent) GetInstallation() *Installation { + if s == nil { + return nil + } + return s.Installation +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (s *StatusEvent) GetName() string { + if s == nil || s.Name == nil { + return "" + } + return *s.Name +} + +// GetRepo returns the Repo field. +func (s *StatusEvent) GetRepo() *Repository { + if s == nil { + return nil + } + return s.Repo +} + +// GetSender returns the Sender field. +func (s *StatusEvent) GetSender() *User { + if s == nil { + return nil + } + return s.Sender +} + +// GetSHA returns the SHA field if it's non-nil, zero value otherwise. +func (s *StatusEvent) GetSHA() string { + if s == nil || s.SHA == nil { + return "" + } + return *s.SHA +} + +// GetState returns the State field if it's non-nil, zero value otherwise. +func (s *StatusEvent) GetState() string { + if s == nil || s.State == nil { + return "" + } + return *s.State +} + +// GetTargetURL returns the TargetURL field if it's non-nil, zero value otherwise. +func (s *StatusEvent) GetTargetURL() string { + if s == nil || s.TargetURL == nil { + return "" + } + return *s.TargetURL +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (s *StatusEvent) GetUpdatedAt() Timestamp { + if s == nil || s.UpdatedAt == nil { + return Timestamp{} + } + return *s.UpdatedAt +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (s *Subscription) GetCreatedAt() Timestamp { + if s == nil || s.CreatedAt == nil { + return Timestamp{} + } + return *s.CreatedAt +} + +// GetIgnored returns the Ignored field if it's non-nil, zero value otherwise. +func (s *Subscription) GetIgnored() bool { + if s == nil || s.Ignored == nil { + return false + } + return *s.Ignored +} + +// GetReason returns the Reason field if it's non-nil, zero value otherwise. +func (s *Subscription) GetReason() string { + if s == nil || s.Reason == nil { + return "" + } + return *s.Reason +} + +// GetRepositoryURL returns the RepositoryURL field if it's non-nil, zero value otherwise. +func (s *Subscription) GetRepositoryURL() string { + if s == nil || s.RepositoryURL == nil { + return "" + } + return *s.RepositoryURL +} + +// GetSubscribed returns the Subscribed field if it's non-nil, zero value otherwise. +func (s *Subscription) GetSubscribed() bool { + if s == nil || s.Subscribed == nil { + return false + } + return *s.Subscribed +} + +// GetThreadURL returns the ThreadURL field if it's non-nil, zero value otherwise. +func (s *Subscription) GetThreadURL() string { + if s == nil || s.ThreadURL == nil { + return "" + } + return *s.ThreadURL +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (s *Subscription) GetURL() string { + if s == nil || s.URL == nil { + return "" + } + return *s.URL +} + +// GetMessage returns the Message field if it's non-nil, zero value otherwise. +func (t *Tag) GetMessage() string { + if t == nil || t.Message == nil { + return "" + } + return *t.Message +} + +// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. +func (t *Tag) GetNodeID() string { + if t == nil || t.NodeID == nil { + return "" + } + return *t.NodeID +} + +// GetObject returns the Object field. +func (t *Tag) GetObject() *GitObject { + if t == nil { + return nil + } + return t.Object +} + +// GetSHA returns the SHA field if it's non-nil, zero value otherwise. +func (t *Tag) GetSHA() string { + if t == nil || t.SHA == nil { + return "" + } + return *t.SHA +} + +// GetTag returns the Tag field if it's non-nil, zero value otherwise. +func (t *Tag) GetTag() string { + if t == nil || t.Tag == nil { + return "" + } + return *t.Tag +} + +// GetTagger returns the Tagger field. +func (t *Tag) GetTagger() *CommitAuthor { + if t == nil { + return nil + } + return t.Tagger +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (t *Tag) GetURL() string { + if t == nil || t.URL == nil { + return "" + } + return *t.URL +} + +// GetVerification returns the Verification field. +func (t *Tag) GetVerification() *SignatureVerification { + if t == nil { + return nil + } + return t.Verification +} + +// GetDescription returns the Description field if it's non-nil, zero value otherwise. +func (t *Team) GetDescription() string { + if t == nil || t.Description == nil { + return "" + } + return *t.Description +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (t *Team) GetID() int64 { + if t == nil || t.ID == nil { + return 0 + } + return *t.ID +} + +// GetLDAPDN returns the LDAPDN field if it's non-nil, zero value otherwise. +func (t *Team) GetLDAPDN() string { + if t == nil || t.LDAPDN == nil { + return "" + } + return *t.LDAPDN +} + +// GetMembersCount returns the MembersCount field if it's non-nil, zero value otherwise. +func (t *Team) GetMembersCount() int { + if t == nil || t.MembersCount == nil { + return 0 + } + return *t.MembersCount +} + +// GetMembersURL returns the MembersURL field if it's non-nil, zero value otherwise. +func (t *Team) GetMembersURL() string { + if t == nil || t.MembersURL == nil { + return "" + } + return *t.MembersURL +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (t *Team) GetName() string { + if t == nil || t.Name == nil { + return "" + } + return *t.Name +} + +// GetOrganization returns the Organization field. +func (t *Team) GetOrganization() *Organization { + if t == nil { + return nil + } + return t.Organization +} + +// GetParent returns the Parent field. +func (t *Team) GetParent() *Team { + if t == nil { + return nil + } + return t.Parent +} + +// GetPermission returns the Permission field if it's non-nil, zero value otherwise. +func (t *Team) GetPermission() string { + if t == nil || t.Permission == nil { + return "" + } + return *t.Permission +} + +// GetPrivacy returns the Privacy field if it's non-nil, zero value otherwise. +func (t *Team) GetPrivacy() string { + if t == nil || t.Privacy == nil { + return "" + } + return *t.Privacy +} + +// GetReposCount returns the ReposCount field if it's non-nil, zero value otherwise. +func (t *Team) GetReposCount() int { + if t == nil || t.ReposCount == nil { + return 0 + } + return *t.ReposCount +} + +// GetRepositoriesURL returns the RepositoriesURL field if it's non-nil, zero value otherwise. +func (t *Team) GetRepositoriesURL() string { + if t == nil || t.RepositoriesURL == nil { + return "" + } + return *t.RepositoriesURL +} + +// GetSlug returns the Slug field if it's non-nil, zero value otherwise. +func (t *Team) GetSlug() string { + if t == nil || t.Slug == nil { + return "" + } + return *t.Slug +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (t *Team) GetURL() string { + if t == nil || t.URL == nil { + return "" + } + return *t.URL +} + +// GetInstallation returns the Installation field. +func (t *TeamAddEvent) GetInstallation() *Installation { + if t == nil { + return nil + } + return t.Installation +} + +// GetOrg returns the Org field. +func (t *TeamAddEvent) GetOrg() *Organization { + if t == nil { + return nil + } + return t.Org +} + +// GetRepo returns the Repo field. +func (t *TeamAddEvent) GetRepo() *Repository { + if t == nil { + return nil + } + return t.Repo +} + +// GetSender returns the Sender field. +func (t *TeamAddEvent) GetSender() *User { + if t == nil { + return nil + } + return t.Sender +} + +// GetTeam returns the Team field. +func (t *TeamAddEvent) GetTeam() *Team { + if t == nil { + return nil + } + return t.Team +} + +// GetAuthor returns the Author field. +func (t *TeamDiscussion) GetAuthor() *User { + if t == nil { + return nil + } + return t.Author +} + +// GetBody returns the Body field if it's non-nil, zero value otherwise. +func (t *TeamDiscussion) GetBody() string { + if t == nil || t.Body == nil { + return "" + } + return *t.Body +} + +// GetBodyHTML returns the BodyHTML field if it's non-nil, zero value otherwise. +func (t *TeamDiscussion) GetBodyHTML() string { + if t == nil || t.BodyHTML == nil { + return "" + } + return *t.BodyHTML +} + +// GetBodyVersion returns the BodyVersion field if it's non-nil, zero value otherwise. +func (t *TeamDiscussion) GetBodyVersion() string { + if t == nil || t.BodyVersion == nil { + return "" + } + return *t.BodyVersion +} + +// GetCommentsCount returns the CommentsCount field if it's non-nil, zero value otherwise. +func (t *TeamDiscussion) GetCommentsCount() int64 { + if t == nil || t.CommentsCount == nil { + return 0 + } + return *t.CommentsCount +} + +// GetCommentsURL returns the CommentsURL field if it's non-nil, zero value otherwise. +func (t *TeamDiscussion) GetCommentsURL() string { + if t == nil || t.CommentsURL == nil { + return "" + } + return *t.CommentsURL +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (t *TeamDiscussion) GetCreatedAt() Timestamp { + if t == nil || t.CreatedAt == nil { + return Timestamp{} + } + return *t.CreatedAt +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (t *TeamDiscussion) GetHTMLURL() string { + if t == nil || t.HTMLURL == nil { + return "" + } + return *t.HTMLURL +} + +// GetLastEditedAt returns the LastEditedAt field if it's non-nil, zero value otherwise. +func (t *TeamDiscussion) GetLastEditedAt() Timestamp { + if t == nil || t.LastEditedAt == nil { + return Timestamp{} + } + return *t.LastEditedAt +} + +// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. +func (t *TeamDiscussion) GetNodeID() string { + if t == nil || t.NodeID == nil { + return "" + } + return *t.NodeID +} + +// GetNumber returns the Number field if it's non-nil, zero value otherwise. +func (t *TeamDiscussion) GetNumber() int64 { + if t == nil || t.Number == nil { + return 0 + } + return *t.Number +} + +// GetPinned returns the Pinned field if it's non-nil, zero value otherwise. +func (t *TeamDiscussion) GetPinned() bool { + if t == nil || t.Pinned == nil { + return false + } + return *t.Pinned +} + +// GetPrivate returns the Private field if it's non-nil, zero value otherwise. +func (t *TeamDiscussion) GetPrivate() bool { + if t == nil || t.Private == nil { + return false + } + return *t.Private +} + +// GetTeamURL returns the TeamURL field if it's non-nil, zero value otherwise. +func (t *TeamDiscussion) GetTeamURL() string { + if t == nil || t.TeamURL == nil { + return "" + } + return *t.TeamURL +} + +// GetTitle returns the Title field if it's non-nil, zero value otherwise. +func (t *TeamDiscussion) GetTitle() string { + if t == nil || t.Title == nil { + return "" + } + return *t.Title +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (t *TeamDiscussion) GetUpdatedAt() Timestamp { + if t == nil || t.UpdatedAt == nil { + return Timestamp{} + } + return *t.UpdatedAt +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (t *TeamDiscussion) GetURL() string { + if t == nil || t.URL == nil { + return "" + } + return *t.URL +} + +// GetAction returns the Action field if it's non-nil, zero value otherwise. +func (t *TeamEvent) GetAction() string { + if t == nil || t.Action == nil { + return "" + } + return *t.Action +} + +// GetChanges returns the Changes field. +func (t *TeamEvent) GetChanges() *TeamChange { + if t == nil { + return nil + } + return t.Changes +} + +// GetInstallation returns the Installation field. +func (t *TeamEvent) GetInstallation() *Installation { + if t == nil { + return nil + } + return t.Installation +} + +// GetOrg returns the Org field. +func (t *TeamEvent) GetOrg() *Organization { + if t == nil { + return nil + } + return t.Org +} + +// GetRepo returns the Repo field. +func (t *TeamEvent) GetRepo() *Repository { + if t == nil { + return nil + } + return t.Repo +} + +// GetSender returns the Sender field. +func (t *TeamEvent) GetSender() *User { + if t == nil { + return nil + } + return t.Sender +} + +// GetTeam returns the Team field. +func (t *TeamEvent) GetTeam() *Team { + if t == nil { + return nil + } + return t.Team +} + +// GetDescription returns the Description field if it's non-nil, zero value otherwise. +func (t *TeamLDAPMapping) GetDescription() string { + if t == nil || t.Description == nil { + return "" + } + return *t.Description +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (t *TeamLDAPMapping) GetID() int64 { + if t == nil || t.ID == nil { + return 0 + } + return *t.ID +} + +// GetLDAPDN returns the LDAPDN field if it's non-nil, zero value otherwise. +func (t *TeamLDAPMapping) GetLDAPDN() string { + if t == nil || t.LDAPDN == nil { + return "" + } + return *t.LDAPDN +} + +// GetMembersURL returns the MembersURL field if it's non-nil, zero value otherwise. +func (t *TeamLDAPMapping) GetMembersURL() string { + if t == nil || t.MembersURL == nil { + return "" + } + return *t.MembersURL +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (t *TeamLDAPMapping) GetName() string { + if t == nil || t.Name == nil { + return "" + } + return *t.Name +} + +// GetPermission returns the Permission field if it's non-nil, zero value otherwise. +func (t *TeamLDAPMapping) GetPermission() string { + if t == nil || t.Permission == nil { + return "" + } + return *t.Permission +} + +// GetPrivacy returns the Privacy field if it's non-nil, zero value otherwise. +func (t *TeamLDAPMapping) GetPrivacy() string { + if t == nil || t.Privacy == nil { + return "" + } + return *t.Privacy +} + +// GetRepositoriesURL returns the RepositoriesURL field if it's non-nil, zero value otherwise. +func (t *TeamLDAPMapping) GetRepositoriesURL() string { + if t == nil || t.RepositoriesURL == nil { + return "" + } + return *t.RepositoriesURL +} + +// GetSlug returns the Slug field if it's non-nil, zero value otherwise. +func (t *TeamLDAPMapping) GetSlug() string { + if t == nil || t.Slug == nil { + return "" + } + return *t.Slug +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (t *TeamLDAPMapping) GetURL() string { + if t == nil || t.URL == nil { + return "" + } + return *t.URL +} + +// GetFragment returns the Fragment field if it's non-nil, zero value otherwise. +func (t *TextMatch) GetFragment() string { + if t == nil || t.Fragment == nil { + return "" + } + return *t.Fragment +} + +// GetObjectType returns the ObjectType field if it's non-nil, zero value otherwise. +func (t *TextMatch) GetObjectType() string { + if t == nil || t.ObjectType == nil { + return "" + } + return *t.ObjectType +} + +// GetObjectURL returns the ObjectURL field if it's non-nil, zero value otherwise. +func (t *TextMatch) GetObjectURL() string { + if t == nil || t.ObjectURL == nil { + return "" + } + return *t.ObjectURL +} + +// GetProperty returns the Property field if it's non-nil, zero value otherwise. +func (t *TextMatch) GetProperty() string { + if t == nil || t.Property == nil { + return "" + } + return *t.Property +} + +// GetActor returns the Actor field. +func (t *Timeline) GetActor() *User { + if t == nil { + return nil + } + return t.Actor +} + +// GetAssignee returns the Assignee field. +func (t *Timeline) GetAssignee() *User { + if t == nil { + return nil + } + return t.Assignee +} + +// GetCommitID returns the CommitID field if it's non-nil, zero value otherwise. +func (t *Timeline) GetCommitID() string { + if t == nil || t.CommitID == nil { + return "" + } + return *t.CommitID +} + +// GetCommitURL returns the CommitURL field if it's non-nil, zero value otherwise. +func (t *Timeline) GetCommitURL() string { + if t == nil || t.CommitURL == nil { + return "" + } + return *t.CommitURL +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (t *Timeline) GetCreatedAt() time.Time { + if t == nil || t.CreatedAt == nil { + return time.Time{} + } + return *t.CreatedAt +} + +// GetEvent returns the Event field if it's non-nil, zero value otherwise. +func (t *Timeline) GetEvent() string { + if t == nil || t.Event == nil { + return "" + } + return *t.Event +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (t *Timeline) GetID() int64 { + if t == nil || t.ID == nil { + return 0 + } + return *t.ID +} + +// GetLabel returns the Label field. +func (t *Timeline) GetLabel() *Label { + if t == nil { + return nil + } + return t.Label +} + +// GetMilestone returns the Milestone field. +func (t *Timeline) GetMilestone() *Milestone { + if t == nil { + return nil + } + return t.Milestone +} + +// GetRename returns the Rename field. +func (t *Timeline) GetRename() *Rename { + if t == nil { + return nil + } + return t.Rename +} + +// GetSource returns the Source field. +func (t *Timeline) GetSource() *Source { + if t == nil { + return nil + } + return t.Source +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (t *Timeline) GetURL() string { + if t == nil || t.URL == nil { + return "" + } + return *t.URL +} + +// GetCount returns the Count field if it's non-nil, zero value otherwise. +func (t *TrafficClones) GetCount() int { + if t == nil || t.Count == nil { + return 0 + } + return *t.Count +} + +// GetUniques returns the Uniques field if it's non-nil, zero value otherwise. +func (t *TrafficClones) GetUniques() int { + if t == nil || t.Uniques == nil { + return 0 + } + return *t.Uniques +} + +// GetCount returns the Count field if it's non-nil, zero value otherwise. +func (t *TrafficData) GetCount() int { + if t == nil || t.Count == nil { + return 0 + } + return *t.Count +} + +// GetTimestamp returns the Timestamp field if it's non-nil, zero value otherwise. +func (t *TrafficData) GetTimestamp() Timestamp { + if t == nil || t.Timestamp == nil { + return Timestamp{} + } + return *t.Timestamp +} + +// GetUniques returns the Uniques field if it's non-nil, zero value otherwise. +func (t *TrafficData) GetUniques() int { + if t == nil || t.Uniques == nil { + return 0 + } + return *t.Uniques +} + +// GetCount returns the Count field if it's non-nil, zero value otherwise. +func (t *TrafficPath) GetCount() int { + if t == nil || t.Count == nil { + return 0 + } + return *t.Count +} + +// GetPath returns the Path field if it's non-nil, zero value otherwise. +func (t *TrafficPath) GetPath() string { + if t == nil || t.Path == nil { + return "" + } + return *t.Path +} + +// GetTitle returns the Title field if it's non-nil, zero value otherwise. +func (t *TrafficPath) GetTitle() string { + if t == nil || t.Title == nil { + return "" + } + return *t.Title +} + +// GetUniques returns the Uniques field if it's non-nil, zero value otherwise. +func (t *TrafficPath) GetUniques() int { + if t == nil || t.Uniques == nil { + return 0 + } + return *t.Uniques +} + +// GetCount returns the Count field if it's non-nil, zero value otherwise. +func (t *TrafficReferrer) GetCount() int { + if t == nil || t.Count == nil { + return 0 + } + return *t.Count +} + +// GetReferrer returns the Referrer field if it's non-nil, zero value otherwise. +func (t *TrafficReferrer) GetReferrer() string { + if t == nil || t.Referrer == nil { + return "" + } + return *t.Referrer +} + +// GetUniques returns the Uniques field if it's non-nil, zero value otherwise. +func (t *TrafficReferrer) GetUniques() int { + if t == nil || t.Uniques == nil { + return 0 + } + return *t.Uniques +} + +// GetCount returns the Count field if it's non-nil, zero value otherwise. +func (t *TrafficViews) GetCount() int { + if t == nil || t.Count == nil { + return 0 + } + return *t.Count +} + +// GetUniques returns the Uniques field if it's non-nil, zero value otherwise. +func (t *TrafficViews) GetUniques() int { + if t == nil || t.Uniques == nil { + return 0 + } + return *t.Uniques +} + +// GetSHA returns the SHA field if it's non-nil, zero value otherwise. +func (t *Tree) GetSHA() string { + if t == nil || t.SHA == nil { + return "" + } + return *t.SHA +} + +// GetContent returns the Content field if it's non-nil, zero value otherwise. +func (t *TreeEntry) GetContent() string { + if t == nil || t.Content == nil { + return "" + } + return *t.Content +} + +// GetMode returns the Mode field if it's non-nil, zero value otherwise. +func (t *TreeEntry) GetMode() string { + if t == nil || t.Mode == nil { + return "" + } + return *t.Mode +} + +// GetPath returns the Path field if it's non-nil, zero value otherwise. +func (t *TreeEntry) GetPath() string { + if t == nil || t.Path == nil { + return "" + } + return *t.Path +} + +// GetSHA returns the SHA field if it's non-nil, zero value otherwise. +func (t *TreeEntry) GetSHA() string { + if t == nil || t.SHA == nil { + return "" + } + return *t.SHA +} + +// GetSize returns the Size field if it's non-nil, zero value otherwise. +func (t *TreeEntry) GetSize() int { + if t == nil || t.Size == nil { + return 0 + } + return *t.Size +} + +// GetType returns the Type field if it's non-nil, zero value otherwise. +func (t *TreeEntry) GetType() string { + if t == nil || t.Type == nil { + return "" + } + return *t.Type +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (t *TreeEntry) GetURL() string { + if t == nil || t.URL == nil { + return "" + } + return *t.URL +} + +// GetAvatarURL returns the AvatarURL field if it's non-nil, zero value otherwise. +func (u *User) GetAvatarURL() string { + if u == nil || u.AvatarURL == nil { + return "" + } + return *u.AvatarURL +} + +// GetBio returns the Bio field if it's non-nil, zero value otherwise. +func (u *User) GetBio() string { + if u == nil || u.Bio == nil { + return "" + } + return *u.Bio +} + +// GetBlog returns the Blog field if it's non-nil, zero value otherwise. +func (u *User) GetBlog() string { + if u == nil || u.Blog == nil { + return "" + } + return *u.Blog +} + +// GetCollaborators returns the Collaborators field if it's non-nil, zero value otherwise. +func (u *User) GetCollaborators() int { + if u == nil || u.Collaborators == nil { + return 0 + } + return *u.Collaborators +} + +// GetCompany returns the Company field if it's non-nil, zero value otherwise. +func (u *User) GetCompany() string { + if u == nil || u.Company == nil { + return "" + } + return *u.Company +} + +// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. +func (u *User) GetCreatedAt() Timestamp { + if u == nil || u.CreatedAt == nil { + return Timestamp{} + } + return *u.CreatedAt +} + +// GetDiskUsage returns the DiskUsage field if it's non-nil, zero value otherwise. +func (u *User) GetDiskUsage() int { + if u == nil || u.DiskUsage == nil { + return 0 + } + return *u.DiskUsage +} + +// GetEmail returns the Email field if it's non-nil, zero value otherwise. +func (u *User) GetEmail() string { + if u == nil || u.Email == nil { + return "" + } + return *u.Email +} + +// GetEventsURL returns the EventsURL field if it's non-nil, zero value otherwise. +func (u *User) GetEventsURL() string { + if u == nil || u.EventsURL == nil { + return "" + } + return *u.EventsURL +} + +// GetFollowers returns the Followers field if it's non-nil, zero value otherwise. +func (u *User) GetFollowers() int { + if u == nil || u.Followers == nil { + return 0 + } + return *u.Followers +} + +// GetFollowersURL returns the FollowersURL field if it's non-nil, zero value otherwise. +func (u *User) GetFollowersURL() string { + if u == nil || u.FollowersURL == nil { + return "" + } + return *u.FollowersURL +} + +// GetFollowing returns the Following field if it's non-nil, zero value otherwise. +func (u *User) GetFollowing() int { + if u == nil || u.Following == nil { + return 0 + } + return *u.Following +} + +// GetFollowingURL returns the FollowingURL field if it's non-nil, zero value otherwise. +func (u *User) GetFollowingURL() string { + if u == nil || u.FollowingURL == nil { + return "" + } + return *u.FollowingURL +} + +// GetGistsURL returns the GistsURL field if it's non-nil, zero value otherwise. +func (u *User) GetGistsURL() string { + if u == nil || u.GistsURL == nil { + return "" + } + return *u.GistsURL +} + +// GetGravatarID returns the GravatarID field if it's non-nil, zero value otherwise. +func (u *User) GetGravatarID() string { + if u == nil || u.GravatarID == nil { + return "" + } + return *u.GravatarID +} + +// GetHireable returns the Hireable field if it's non-nil, zero value otherwise. +func (u *User) GetHireable() bool { + if u == nil || u.Hireable == nil { + return false + } + return *u.Hireable +} + +// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. +func (u *User) GetHTMLURL() string { + if u == nil || u.HTMLURL == nil { + return "" + } + return *u.HTMLURL +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (u *User) GetID() int64 { + if u == nil || u.ID == nil { + return 0 + } + return *u.ID +} + +// GetLocation returns the Location field if it's non-nil, zero value otherwise. +func (u *User) GetLocation() string { + if u == nil || u.Location == nil { + return "" + } + return *u.Location +} + +// GetLogin returns the Login field if it's non-nil, zero value otherwise. +func (u *User) GetLogin() string { + if u == nil || u.Login == nil { + return "" + } + return *u.Login +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (u *User) GetName() string { + if u == nil || u.Name == nil { + return "" + } + return *u.Name +} + +// GetOrganizationsURL returns the OrganizationsURL field if it's non-nil, zero value otherwise. +func (u *User) GetOrganizationsURL() string { + if u == nil || u.OrganizationsURL == nil { + return "" + } + return *u.OrganizationsURL +} + +// GetOwnedPrivateRepos returns the OwnedPrivateRepos field if it's non-nil, zero value otherwise. +func (u *User) GetOwnedPrivateRepos() int { + if u == nil || u.OwnedPrivateRepos == nil { + return 0 + } + return *u.OwnedPrivateRepos +} + +// GetPermissions returns the Permissions field if it's non-nil, zero value otherwise. +func (u *User) GetPermissions() map[string]bool { + if u == nil || u.Permissions == nil { + return map[string]bool{} + } + return *u.Permissions +} + +// GetPlan returns the Plan field. +func (u *User) GetPlan() *Plan { + if u == nil { + return nil + } + return u.Plan +} + +// GetPrivateGists returns the PrivateGists field if it's non-nil, zero value otherwise. +func (u *User) GetPrivateGists() int { + if u == nil || u.PrivateGists == nil { + return 0 + } + return *u.PrivateGists +} + +// GetPublicGists returns the PublicGists field if it's non-nil, zero value otherwise. +func (u *User) GetPublicGists() int { + if u == nil || u.PublicGists == nil { + return 0 + } + return *u.PublicGists +} + +// GetPublicRepos returns the PublicRepos field if it's non-nil, zero value otherwise. +func (u *User) GetPublicRepos() int { + if u == nil || u.PublicRepos == nil { + return 0 + } + return *u.PublicRepos +} + +// GetReceivedEventsURL returns the ReceivedEventsURL field if it's non-nil, zero value otherwise. +func (u *User) GetReceivedEventsURL() string { + if u == nil || u.ReceivedEventsURL == nil { + return "" + } + return *u.ReceivedEventsURL +} + +// GetReposURL returns the ReposURL field if it's non-nil, zero value otherwise. +func (u *User) GetReposURL() string { + if u == nil || u.ReposURL == nil { + return "" + } + return *u.ReposURL +} + +// GetSiteAdmin returns the SiteAdmin field if it's non-nil, zero value otherwise. +func (u *User) GetSiteAdmin() bool { + if u == nil || u.SiteAdmin == nil { + return false + } + return *u.SiteAdmin +} + +// GetStarredURL returns the StarredURL field if it's non-nil, zero value otherwise. +func (u *User) GetStarredURL() string { + if u == nil || u.StarredURL == nil { + return "" + } + return *u.StarredURL +} + +// GetSubscriptionsURL returns the SubscriptionsURL field if it's non-nil, zero value otherwise. +func (u *User) GetSubscriptionsURL() string { + if u == nil || u.SubscriptionsURL == nil { + return "" + } + return *u.SubscriptionsURL +} + +// GetSuspendedAt returns the SuspendedAt field if it's non-nil, zero value otherwise. +func (u *User) GetSuspendedAt() Timestamp { + if u == nil || u.SuspendedAt == nil { + return Timestamp{} + } + return *u.SuspendedAt +} + +// GetTotalPrivateRepos returns the TotalPrivateRepos field if it's non-nil, zero value otherwise. +func (u *User) GetTotalPrivateRepos() int { + if u == nil || u.TotalPrivateRepos == nil { + return 0 + } + return *u.TotalPrivateRepos +} + +// GetType returns the Type field if it's non-nil, zero value otherwise. +func (u *User) GetType() string { + if u == nil || u.Type == nil { + return "" + } + return *u.Type +} + +// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. +func (u *User) GetUpdatedAt() Timestamp { + if u == nil || u.UpdatedAt == nil { + return Timestamp{} + } + return *u.UpdatedAt +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (u *User) GetURL() string { + if u == nil || u.URL == nil { + return "" + } + return *u.URL +} + +// GetEmail returns the Email field if it's non-nil, zero value otherwise. +func (u *UserEmail) GetEmail() string { + if u == nil || u.Email == nil { + return "" + } + return *u.Email +} + +// GetPrimary returns the Primary field if it's non-nil, zero value otherwise. +func (u *UserEmail) GetPrimary() bool { + if u == nil || u.Primary == nil { + return false + } + return *u.Primary +} + +// GetVerified returns the Verified field if it's non-nil, zero value otherwise. +func (u *UserEmail) GetVerified() bool { + if u == nil || u.Verified == nil { + return false + } + return *u.Verified +} + +// GetAvatarURL returns the AvatarURL field if it's non-nil, zero value otherwise. +func (u *UserLDAPMapping) GetAvatarURL() string { + if u == nil || u.AvatarURL == nil { + return "" + } + return *u.AvatarURL +} + +// GetEventsURL returns the EventsURL field if it's non-nil, zero value otherwise. +func (u *UserLDAPMapping) GetEventsURL() string { + if u == nil || u.EventsURL == nil { + return "" + } + return *u.EventsURL +} + +// GetFollowersURL returns the FollowersURL field if it's non-nil, zero value otherwise. +func (u *UserLDAPMapping) GetFollowersURL() string { + if u == nil || u.FollowersURL == nil { + return "" + } + return *u.FollowersURL +} + +// GetFollowingURL returns the FollowingURL field if it's non-nil, zero value otherwise. +func (u *UserLDAPMapping) GetFollowingURL() string { + if u == nil || u.FollowingURL == nil { + return "" + } + return *u.FollowingURL +} + +// GetGistsURL returns the GistsURL field if it's non-nil, zero value otherwise. +func (u *UserLDAPMapping) GetGistsURL() string { + if u == nil || u.GistsURL == nil { + return "" + } + return *u.GistsURL +} + +// GetGravatarID returns the GravatarID field if it's non-nil, zero value otherwise. +func (u *UserLDAPMapping) GetGravatarID() string { + if u == nil || u.GravatarID == nil { + return "" + } + return *u.GravatarID +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (u *UserLDAPMapping) GetID() int64 { + if u == nil || u.ID == nil { + return 0 + } + return *u.ID +} + +// GetLDAPDN returns the LDAPDN field if it's non-nil, zero value otherwise. +func (u *UserLDAPMapping) GetLDAPDN() string { + if u == nil || u.LDAPDN == nil { + return "" + } + return *u.LDAPDN +} + +// GetLogin returns the Login field if it's non-nil, zero value otherwise. +func (u *UserLDAPMapping) GetLogin() string { + if u == nil || u.Login == nil { + return "" + } + return *u.Login +} + +// GetOrganizationsURL returns the OrganizationsURL field if it's non-nil, zero value otherwise. +func (u *UserLDAPMapping) GetOrganizationsURL() string { + if u == nil || u.OrganizationsURL == nil { + return "" + } + return *u.OrganizationsURL +} + +// GetReceivedEventsURL returns the ReceivedEventsURL field if it's non-nil, zero value otherwise. +func (u *UserLDAPMapping) GetReceivedEventsURL() string { + if u == nil || u.ReceivedEventsURL == nil { + return "" + } + return *u.ReceivedEventsURL +} + +// GetReposURL returns the ReposURL field if it's non-nil, zero value otherwise. +func (u *UserLDAPMapping) GetReposURL() string { + if u == nil || u.ReposURL == nil { + return "" + } + return *u.ReposURL +} + +// GetSiteAdmin returns the SiteAdmin field if it's non-nil, zero value otherwise. +func (u *UserLDAPMapping) GetSiteAdmin() bool { + if u == nil || u.SiteAdmin == nil { + return false + } + return *u.SiteAdmin +} + +// GetStarredURL returns the StarredURL field if it's non-nil, zero value otherwise. +func (u *UserLDAPMapping) GetStarredURL() string { + if u == nil || u.StarredURL == nil { + return "" + } + return *u.StarredURL +} + +// GetSubscriptionsURL returns the SubscriptionsURL field if it's non-nil, zero value otherwise. +func (u *UserLDAPMapping) GetSubscriptionsURL() string { + if u == nil || u.SubscriptionsURL == nil { + return "" + } + return *u.SubscriptionsURL +} + +// GetType returns the Type field if it's non-nil, zero value otherwise. +func (u *UserLDAPMapping) GetType() string { + if u == nil || u.Type == nil { + return "" + } + return *u.Type +} + +// GetURL returns the URL field if it's non-nil, zero value otherwise. +func (u *UserLDAPMapping) GetURL() string { + if u == nil || u.URL == nil { + return "" + } + return *u.URL +} + +// GetIncompleteResults returns the IncompleteResults field if it's non-nil, zero value otherwise. +func (u *UsersSearchResult) GetIncompleteResults() bool { + if u == nil || u.IncompleteResults == nil { + return false + } + return *u.IncompleteResults +} + +// GetTotal returns the Total field if it's non-nil, zero value otherwise. +func (u *UsersSearchResult) GetTotal() int { + if u == nil || u.Total == nil { + return 0 + } + return *u.Total +} + +// GetAdminUsers returns the AdminUsers field if it's non-nil, zero value otherwise. +func (u *UserStats) GetAdminUsers() int { + if u == nil || u.AdminUsers == nil { + return 0 + } + return *u.AdminUsers +} + +// GetSuspendedUsers returns the SuspendedUsers field if it's non-nil, zero value otherwise. +func (u *UserStats) GetSuspendedUsers() int { + if u == nil || u.SuspendedUsers == nil { + return 0 + } + return *u.SuspendedUsers +} + +// GetTotalUsers returns the TotalUsers field if it's non-nil, zero value otherwise. +func (u *UserStats) GetTotalUsers() int { + if u == nil || u.TotalUsers == nil { + return 0 + } + return *u.TotalUsers +} + +// GetAction returns the Action field if it's non-nil, zero value otherwise. +func (w *WatchEvent) GetAction() string { + if w == nil || w.Action == nil { + return "" + } + return *w.Action +} + +// GetInstallation returns the Installation field. +func (w *WatchEvent) GetInstallation() *Installation { + if w == nil { + return nil + } + return w.Installation +} + +// GetRepo returns the Repo field. +func (w *WatchEvent) GetRepo() *Repository { + if w == nil { + return nil + } + return w.Repo +} + +// GetSender returns the Sender field. +func (w *WatchEvent) GetSender() *User { + if w == nil { + return nil + } + return w.Sender +} + +// GetEmail returns the Email field if it's non-nil, zero value otherwise. +func (w *WebHookAuthor) GetEmail() string { + if w == nil || w.Email == nil { + return "" + } + return *w.Email +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (w *WebHookAuthor) GetName() string { + if w == nil || w.Name == nil { + return "" + } + return *w.Name +} + +// GetUsername returns the Username field if it's non-nil, zero value otherwise. +func (w *WebHookAuthor) GetUsername() string { + if w == nil || w.Username == nil { + return "" + } + return *w.Username +} + +// GetAuthor returns the Author field. +func (w *WebHookCommit) GetAuthor() *WebHookAuthor { + if w == nil { + return nil + } + return w.Author +} + +// GetCommitter returns the Committer field. +func (w *WebHookCommit) GetCommitter() *WebHookAuthor { + if w == nil { + return nil + } + return w.Committer +} + +// GetDistinct returns the Distinct field if it's non-nil, zero value otherwise. +func (w *WebHookCommit) GetDistinct() bool { + if w == nil || w.Distinct == nil { + return false + } + return *w.Distinct +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (w *WebHookCommit) GetID() string { + if w == nil || w.ID == nil { + return "" + } + return *w.ID +} + +// GetMessage returns the Message field if it's non-nil, zero value otherwise. +func (w *WebHookCommit) GetMessage() string { + if w == nil || w.Message == nil { + return "" + } + return *w.Message +} + +// GetTimestamp returns the Timestamp field if it's non-nil, zero value otherwise. +func (w *WebHookCommit) GetTimestamp() time.Time { + if w == nil || w.Timestamp == nil { + return time.Time{} + } + return *w.Timestamp +} + +// GetAfter returns the After field if it's non-nil, zero value otherwise. +func (w *WebHookPayload) GetAfter() string { + if w == nil || w.After == nil { + return "" + } + return *w.After +} + +// GetBefore returns the Before field if it's non-nil, zero value otherwise. +func (w *WebHookPayload) GetBefore() string { + if w == nil || w.Before == nil { + return "" + } + return *w.Before +} + +// GetCompare returns the Compare field if it's non-nil, zero value otherwise. +func (w *WebHookPayload) GetCompare() string { + if w == nil || w.Compare == nil { + return "" + } + return *w.Compare +} + +// GetCreated returns the Created field if it's non-nil, zero value otherwise. +func (w *WebHookPayload) GetCreated() bool { + if w == nil || w.Created == nil { + return false + } + return *w.Created +} + +// GetDeleted returns the Deleted field if it's non-nil, zero value otherwise. +func (w *WebHookPayload) GetDeleted() bool { + if w == nil || w.Deleted == nil { + return false + } + return *w.Deleted +} + +// GetForced returns the Forced field if it's non-nil, zero value otherwise. +func (w *WebHookPayload) GetForced() bool { + if w == nil || w.Forced == nil { + return false + } + return *w.Forced +} + +// GetHeadCommit returns the HeadCommit field. +func (w *WebHookPayload) GetHeadCommit() *WebHookCommit { + if w == nil { + return nil + } + return w.HeadCommit +} + +// GetPusher returns the Pusher field. +func (w *WebHookPayload) GetPusher() *User { + if w == nil { + return nil + } + return w.Pusher +} + +// GetRef returns the Ref field if it's non-nil, zero value otherwise. +func (w *WebHookPayload) GetRef() string { + if w == nil || w.Ref == nil { + return "" + } + return *w.Ref +} + +// GetRepo returns the Repo field. +func (w *WebHookPayload) GetRepo() *Repository { + if w == nil { + return nil + } + return w.Repo +} + +// GetSender returns the Sender field. +func (w *WebHookPayload) GetSender() *User { + if w == nil { + return nil + } + return w.Sender +} + +// GetTotal returns the Total field if it's non-nil, zero value otherwise. +func (w *WeeklyCommitActivity) GetTotal() int { + if w == nil || w.Total == nil { + return 0 + } + return *w.Total +} + +// GetWeek returns the Week field if it's non-nil, zero value otherwise. +func (w *WeeklyCommitActivity) GetWeek() Timestamp { + if w == nil || w.Week == nil { + return Timestamp{} + } + return *w.Week +} + +// GetAdditions returns the Additions field if it's non-nil, zero value otherwise. +func (w *WeeklyStats) GetAdditions() int { + if w == nil || w.Additions == nil { + return 0 + } + return *w.Additions +} + +// GetCommits returns the Commits field if it's non-nil, zero value otherwise. +func (w *WeeklyStats) GetCommits() int { + if w == nil || w.Commits == nil { + return 0 + } + return *w.Commits +} + +// GetDeletions returns the Deletions field if it's non-nil, zero value otherwise. +func (w *WeeklyStats) GetDeletions() int { + if w == nil || w.Deletions == nil { + return 0 + } + return *w.Deletions +} + +// GetWeek returns the Week field if it's non-nil, zero value otherwise. +func (w *WeeklyStats) GetWeek() Timestamp { + if w == nil || w.Week == nil { + return Timestamp{} + } + return *w.Week +} diff --git a/vendor/github.com/google/go-github/github/github.go b/vendor/github.com/google/go-github/github/github.go new file mode 100644 index 00000000..a0c78aae --- /dev/null +++ b/vendor/github.com/google/go-github/github/github.go @@ -0,0 +1,989 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run gen-accessors.go + +package github + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "fmt" + "io" + "io/ioutil" + "net/http" + "net/url" + "reflect" + "strconv" + "strings" + "sync" + "time" + + "github.com/google/go-querystring/query" +) + +const ( + defaultBaseURL = "https://api.github.com/" + uploadBaseURL = "https://uploads.github.com/" + userAgent = "go-github" + + headerRateLimit = "X-RateLimit-Limit" + headerRateRemaining = "X-RateLimit-Remaining" + headerRateReset = "X-RateLimit-Reset" + headerOTP = "X-GitHub-OTP" + + mediaTypeV3 = "application/vnd.github.v3+json" + defaultMediaType = "application/octet-stream" + mediaTypeV3SHA = "application/vnd.github.v3.sha" + mediaTypeV3Diff = "application/vnd.github.v3.diff" + mediaTypeV3Patch = "application/vnd.github.v3.patch" + mediaTypeOrgPermissionRepo = "application/vnd.github.v3.repository+json" + + // Media Type values to access preview APIs + + // https://developer.github.com/changes/2015-03-09-licenses-api/ + mediaTypeLicensesPreview = "application/vnd.github.drax-preview+json" + + // https://developer.github.com/changes/2014-12-09-new-attributes-for-stars-api/ + mediaTypeStarringPreview = "application/vnd.github.v3.star+json" + + // https://developer.github.com/changes/2015-11-11-protected-branches-api/ + mediaTypeProtectedBranchesPreview = "application/vnd.github.loki-preview+json" + + // https://help.github.com/enterprise/2.4/admin/guides/migrations/exporting-the-github-com-organization-s-repositories/ + mediaTypeMigrationsPreview = "application/vnd.github.wyandotte-preview+json" + + // https://developer.github.com/changes/2016-04-06-deployment-and-deployment-status-enhancements/ + mediaTypeDeploymentStatusPreview = "application/vnd.github.ant-man-preview+json" + + // https://developer.github.com/changes/2016-02-19-source-import-preview-api/ + mediaTypeImportPreview = "application/vnd.github.barred-rock-preview" + + // https://developer.github.com/changes/2016-05-12-reactions-api-preview/ + mediaTypeReactionsPreview = "application/vnd.github.squirrel-girl-preview" + + // https://developer.github.com/changes/2016-04-04-git-signing-api-preview/ + mediaTypeGitSigningPreview = "application/vnd.github.cryptographer-preview+json" + + // https://developer.github.com/changes/2016-05-23-timeline-preview-api/ + mediaTypeTimelinePreview = "application/vnd.github.mockingbird-preview+json" + + // https://developer.github.com/changes/2016-06-14-repository-invitations/ + mediaTypeRepositoryInvitationsPreview = "application/vnd.github.swamp-thing-preview+json" + + // https://developer.github.com/changes/2016-07-06-github-pages-preiew-api/ + mediaTypePagesPreview = "application/vnd.github.mister-fantastic-preview+json" + + // https://developer.github.com/changes/2016-09-14-projects-api/ + mediaTypeProjectsPreview = "application/vnd.github.inertia-preview+json" + + // https://developer.github.com/changes/2016-09-14-Integrations-Early-Access/ + mediaTypeIntegrationPreview = "application/vnd.github.machine-man-preview+json" + + // https://developer.github.com/changes/2017-01-05-commit-search-api/ + mediaTypeCommitSearchPreview = "application/vnd.github.cloak-preview+json" + + // https://developer.github.com/changes/2017-02-28-user-blocking-apis-and-webhook/ + mediaTypeBlockUsersPreview = "application/vnd.github.giant-sentry-fist-preview+json" + + // https://developer.github.com/changes/2017-02-09-community-health/ + mediaTypeRepositoryCommunityHealthMetricsPreview = "application/vnd.github.black-panther-preview+json" + + // https://developer.github.com/changes/2017-05-23-coc-api/ + mediaTypeCodesOfConductPreview = "application/vnd.github.scarlet-witch-preview+json" + + // https://developer.github.com/changes/2017-07-17-update-topics-on-repositories/ + mediaTypeTopicsPreview = "application/vnd.github.mercy-preview+json" + + // https://developer.github.com/v3/apps/marketplace/ + mediaTypeMarketplacePreview = "application/vnd.github.valkyrie-preview+json" + + // https://developer.github.com/changes/2017-08-30-preview-nested-teams/ + mediaTypeNestedTeamsPreview = "application/vnd.github.hellcat-preview+json" + + // https://developer.github.com/changes/2017-11-09-repository-transfer-api-preview/ + mediaTypeRepositoryTransferPreview = "application/vnd.github.nightshade-preview+json" + + // https://developer.github.com/changes/2017-12-19-graphql-node-id/ + mediaTypeGraphQLNodeIDPreview = "application/vnd.github.jean-grey-preview+json" + + // https://developer.github.com/changes/2018-01-25-organization-invitation-api-preview/ + mediaTypeOrganizationInvitationPreview = "application/vnd.github.dazzler-preview+json" + + // https://developer.github.com/changes/2018-02-22-label-description-search-preview/ + mediaTypeLabelDescriptionSearchPreview = "application/vnd.github.symmetra-preview+json" + + // https://developer.github.com/changes/2018-02-07-team-discussions-api/ + mediaTypeTeamDiscussionsPreview = "application/vnd.github.echo-preview+json" +) + +// A Client manages communication with the GitHub API. +type Client struct { + clientMu sync.Mutex // clientMu protects the client during calls that modify the CheckRedirect func. + client *http.Client // HTTP client used to communicate with the API. + + // Base URL for API requests. Defaults to the public GitHub API, but can be + // set to a domain endpoint to use with GitHub Enterprise. BaseURL should + // always be specified with a trailing slash. + BaseURL *url.URL + + // Base URL for uploading files. + UploadURL *url.URL + + // User agent used when communicating with the GitHub API. + UserAgent string + + rateMu sync.Mutex + rateLimits [categories]Rate // Rate limits for the client as determined by the most recent API calls. + + common service // Reuse a single struct instead of allocating one for each service on the heap. + + // Services used for talking to different parts of the GitHub API. + Activity *ActivityService + Admin *AdminService + Apps *AppsService + Authorizations *AuthorizationsService + Gists *GistsService + Git *GitService + Gitignores *GitignoresService + Issues *IssuesService + Licenses *LicensesService + Marketplace *MarketplaceService + Migrations *MigrationService + Organizations *OrganizationsService + Projects *ProjectsService + PullRequests *PullRequestsService + Reactions *ReactionsService + Repositories *RepositoriesService + Search *SearchService + Teams *TeamsService + Users *UsersService +} + +type service struct { + client *Client +} + +// ListOptions specifies the optional parameters to various List methods that +// support pagination. +type ListOptions struct { + // For paginated result sets, page of results to retrieve. + Page int `url:"page,omitempty"` + + // For paginated result sets, the number of results to include per page. + PerPage int `url:"per_page,omitempty"` +} + +// UploadOptions specifies the parameters to methods that support uploads. +type UploadOptions struct { + Name string `url:"name,omitempty"` +} + +// RawType represents type of raw format of a request instead of JSON. +type RawType uint8 + +const ( + // Diff format. + Diff RawType = 1 + iota + // Patch format. + Patch +) + +// RawOptions specifies parameters when user wants to get raw format of +// a response instead of JSON. +type RawOptions struct { + Type RawType +} + +// addOptions adds the parameters in opt as URL query parameters to s. opt +// must be a struct whose fields may contain "url" tags. +func addOptions(s string, opt interface{}) (string, error) { + v := reflect.ValueOf(opt) + if v.Kind() == reflect.Ptr && v.IsNil() { + return s, nil + } + + u, err := url.Parse(s) + if err != nil { + return s, err + } + + qs, err := query.Values(opt) + if err != nil { + return s, err + } + + u.RawQuery = qs.Encode() + return u.String(), nil +} + +// NewClient returns a new GitHub API client. If a nil httpClient is +// provided, http.DefaultClient will be used. To use API methods which require +// authentication, provide an http.Client that will perform the authentication +// for you (such as that provided by the golang.org/x/oauth2 library). +func NewClient(httpClient *http.Client) *Client { + if httpClient == nil { + httpClient = http.DefaultClient + } + baseURL, _ := url.Parse(defaultBaseURL) + uploadURL, _ := url.Parse(uploadBaseURL) + + c := &Client{client: httpClient, BaseURL: baseURL, UserAgent: userAgent, UploadURL: uploadURL} + c.common.client = c + c.Activity = (*ActivityService)(&c.common) + c.Admin = (*AdminService)(&c.common) + c.Apps = (*AppsService)(&c.common) + c.Authorizations = (*AuthorizationsService)(&c.common) + c.Gists = (*GistsService)(&c.common) + c.Git = (*GitService)(&c.common) + c.Gitignores = (*GitignoresService)(&c.common) + c.Issues = (*IssuesService)(&c.common) + c.Licenses = (*LicensesService)(&c.common) + c.Marketplace = &MarketplaceService{client: c} + c.Migrations = (*MigrationService)(&c.common) + c.Organizations = (*OrganizationsService)(&c.common) + c.Projects = (*ProjectsService)(&c.common) + c.PullRequests = (*PullRequestsService)(&c.common) + c.Reactions = (*ReactionsService)(&c.common) + c.Repositories = (*RepositoriesService)(&c.common) + c.Search = (*SearchService)(&c.common) + c.Teams = (*TeamsService)(&c.common) + c.Users = (*UsersService)(&c.common) + return c +} + +// NewEnterpriseClient returns a new GitHub API client with provided +// base URL and upload URL (often the same URL). +// If either URL does not have a trailing slash, one is added automatically. +// If a nil httpClient is provided, http.DefaultClient will be used. +// +// Note that NewEnterpriseClient is a convenience helper only; +// its behavior is equivalent to using NewClient, followed by setting +// the BaseURL and UploadURL fields. +func NewEnterpriseClient(baseURL, uploadURL string, httpClient *http.Client) (*Client, error) { + baseEndpoint, err := url.Parse(baseURL) + if err != nil { + return nil, err + } + if !strings.HasSuffix(baseEndpoint.Path, "/") { + baseEndpoint.Path += "/" + } + + uploadEndpoint, err := url.Parse(uploadURL) + if err != nil { + return nil, err + } + if !strings.HasSuffix(uploadEndpoint.Path, "/") { + uploadEndpoint.Path += "/" + } + + c := NewClient(httpClient) + c.BaseURL = baseEndpoint + c.UploadURL = uploadEndpoint + return c, nil +} + +// NewRequest creates an API request. A relative URL can be provided in urlStr, +// in which case it is resolved relative to the BaseURL of the Client. +// Relative URLs should always be specified without a preceding slash. If +// specified, the value pointed to by body is JSON encoded and included as the +// request body. +func (c *Client) NewRequest(method, urlStr string, body interface{}) (*http.Request, error) { + if !strings.HasSuffix(c.BaseURL.Path, "/") { + return nil, fmt.Errorf("BaseURL must have a trailing slash, but %q does not", c.BaseURL) + } + u, err := c.BaseURL.Parse(urlStr) + if err != nil { + return nil, err + } + + var buf io.ReadWriter + if body != nil { + buf = new(bytes.Buffer) + enc := json.NewEncoder(buf) + enc.SetEscapeHTML(false) + err := enc.Encode(body) + if err != nil { + return nil, err + } + } + + req, err := http.NewRequest(method, u.String(), buf) + if err != nil { + return nil, err + } + + if body != nil { + req.Header.Set("Content-Type", "application/json") + } + req.Header.Set("Accept", mediaTypeV3) + if c.UserAgent != "" { + req.Header.Set("User-Agent", c.UserAgent) + } + return req, nil +} + +// NewUploadRequest creates an upload request. A relative URL can be provided in +// urlStr, in which case it is resolved relative to the UploadURL of the Client. +// Relative URLs should always be specified without a preceding slash. +func (c *Client) NewUploadRequest(urlStr string, reader io.Reader, size int64, mediaType string) (*http.Request, error) { + if !strings.HasSuffix(c.UploadURL.Path, "/") { + return nil, fmt.Errorf("UploadURL must have a trailing slash, but %q does not", c.UploadURL) + } + u, err := c.UploadURL.Parse(urlStr) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("POST", u.String(), reader) + if err != nil { + return nil, err + } + req.ContentLength = size + + if mediaType == "" { + mediaType = defaultMediaType + } + req.Header.Set("Content-Type", mediaType) + req.Header.Set("Accept", mediaTypeV3) + req.Header.Set("User-Agent", c.UserAgent) + return req, nil +} + +// Response is a GitHub API response. This wraps the standard http.Response +// returned from GitHub and provides convenient access to things like +// pagination links. +type Response struct { + *http.Response + + // These fields provide the page values for paginating through a set of + // results. Any or all of these may be set to the zero value for + // responses that are not part of a paginated set, or for which there + // are no additional pages. + + NextPage int + PrevPage int + FirstPage int + LastPage int + + Rate +} + +// newResponse creates a new Response for the provided http.Response. +// r must not be nil. +func newResponse(r *http.Response) *Response { + response := &Response{Response: r} + response.populatePageValues() + response.Rate = parseRate(r) + return response +} + +// populatePageValues parses the HTTP Link response headers and populates the +// various pagination link values in the Response. +func (r *Response) populatePageValues() { + if links, ok := r.Response.Header["Link"]; ok && len(links) > 0 { + for _, link := range strings.Split(links[0], ",") { + segments := strings.Split(strings.TrimSpace(link), ";") + + // link must at least have href and rel + if len(segments) < 2 { + continue + } + + // ensure href is properly formatted + if !strings.HasPrefix(segments[0], "<") || !strings.HasSuffix(segments[0], ">") { + continue + } + + // try to pull out page parameter + url, err := url.Parse(segments[0][1 : len(segments[0])-1]) + if err != nil { + continue + } + page := url.Query().Get("page") + if page == "" { + continue + } + + for _, segment := range segments[1:] { + switch strings.TrimSpace(segment) { + case `rel="next"`: + r.NextPage, _ = strconv.Atoi(page) + case `rel="prev"`: + r.PrevPage, _ = strconv.Atoi(page) + case `rel="first"`: + r.FirstPage, _ = strconv.Atoi(page) + case `rel="last"`: + r.LastPage, _ = strconv.Atoi(page) + } + + } + } + } +} + +// parseRate parses the rate related headers. +func parseRate(r *http.Response) Rate { + var rate Rate + if limit := r.Header.Get(headerRateLimit); limit != "" { + rate.Limit, _ = strconv.Atoi(limit) + } + if remaining := r.Header.Get(headerRateRemaining); remaining != "" { + rate.Remaining, _ = strconv.Atoi(remaining) + } + if reset := r.Header.Get(headerRateReset); reset != "" { + if v, _ := strconv.ParseInt(reset, 10, 64); v != 0 { + rate.Reset = Timestamp{time.Unix(v, 0)} + } + } + return rate +} + +// Do sends an API request and returns the API response. The API response is +// JSON decoded and stored in the value pointed to by v, or returned as an +// error if an API error has occurred. If v implements the io.Writer +// interface, the raw response body will be written to v, without attempting to +// first decode it. If rate limit is exceeded and reset time is in the future, +// Do returns *RateLimitError immediately without making a network API call. +// +// The provided ctx must be non-nil. If it is canceled or times out, +// ctx.Err() will be returned. +func (c *Client) Do(ctx context.Context, req *http.Request, v interface{}) (*Response, error) { + req = withContext(ctx, req) + + rateLimitCategory := category(req.URL.Path) + + // If we've hit rate limit, don't make further requests before Reset time. + if err := c.checkRateLimitBeforeDo(req, rateLimitCategory); err != nil { + return &Response{ + Response: err.Response, + Rate: err.Rate, + }, err + } + + resp, err := c.client.Do(req) + if err != nil { + // If we got an error, and the context has been canceled, + // the context's error is probably more useful. + select { + case <-ctx.Done(): + return nil, ctx.Err() + default: + } + + // If the error type is *url.Error, sanitize its URL before returning. + if e, ok := err.(*url.Error); ok { + if url, err := url.Parse(e.URL); err == nil { + e.URL = sanitizeURL(url).String() + return nil, e + } + } + + return nil, err + } + defer resp.Body.Close() + + response := newResponse(resp) + + c.rateMu.Lock() + c.rateLimits[rateLimitCategory] = response.Rate + c.rateMu.Unlock() + + err = CheckResponse(resp) + if err != nil { + // Even though there was an error, we still return the response + // in case the caller wants to inspect it further. + // However, if the error is AcceptedError, decode it below before + // returning from this function and closing the response body. + if _, ok := err.(*AcceptedError); !ok { + return response, err + } + } + + if v != nil { + if w, ok := v.(io.Writer); ok { + io.Copy(w, resp.Body) + } else { + decErr := json.NewDecoder(resp.Body).Decode(v) + if decErr == io.EOF { + decErr = nil // ignore EOF errors caused by empty response body + } + if decErr != nil { + err = decErr + } + } + } + + return response, err +} + +// checkRateLimitBeforeDo does not make any network calls, but uses existing knowledge from +// current client state in order to quickly check if *RateLimitError can be immediately returned +// from Client.Do, and if so, returns it so that Client.Do can skip making a network API call unnecessarily. +// Otherwise it returns nil, and Client.Do should proceed normally. +func (c *Client) checkRateLimitBeforeDo(req *http.Request, rateLimitCategory rateLimitCategory) *RateLimitError { + c.rateMu.Lock() + rate := c.rateLimits[rateLimitCategory] + c.rateMu.Unlock() + if !rate.Reset.Time.IsZero() && rate.Remaining == 0 && time.Now().Before(rate.Reset.Time) { + // Create a fake response. + resp := &http.Response{ + Status: http.StatusText(http.StatusForbidden), + StatusCode: http.StatusForbidden, + Request: req, + Header: make(http.Header), + Body: ioutil.NopCloser(strings.NewReader("")), + } + return &RateLimitError{ + Rate: rate, + Response: resp, + Message: fmt.Sprintf("API rate limit of %v still exceeded until %v, not making remote request.", rate.Limit, rate.Reset.Time), + } + } + + return nil +} + +/* +An ErrorResponse reports one or more errors caused by an API request. + +GitHub API docs: https://developer.github.com/v3/#client-errors +*/ +type ErrorResponse struct { + Response *http.Response // HTTP response that caused this error + Message string `json:"message"` // error message + Errors []Error `json:"errors"` // more detail on individual errors + // Block is only populated on certain types of errors such as code 451. + // See https://developer.github.com/changes/2016-03-17-the-451-status-code-is-now-supported/ + // for more information. + Block *struct { + Reason string `json:"reason,omitempty"` + CreatedAt *Timestamp `json:"created_at,omitempty"` + } `json:"block,omitempty"` + // Most errors will also include a documentation_url field pointing + // to some content that might help you resolve the error, see + // https://developer.github.com/v3/#client-errors + DocumentationURL string `json:"documentation_url,omitempty"` +} + +func (r *ErrorResponse) Error() string { + return fmt.Sprintf("%v %v: %d %v %+v", + r.Response.Request.Method, sanitizeURL(r.Response.Request.URL), + r.Response.StatusCode, r.Message, r.Errors) +} + +// TwoFactorAuthError occurs when using HTTP Basic Authentication for a user +// that has two-factor authentication enabled. The request can be reattempted +// by providing a one-time password in the request. +type TwoFactorAuthError ErrorResponse + +func (r *TwoFactorAuthError) Error() string { return (*ErrorResponse)(r).Error() } + +// RateLimitError occurs when GitHub returns 403 Forbidden response with a rate limit +// remaining value of 0, and error message starts with "API rate limit exceeded for ". +type RateLimitError struct { + Rate Rate // Rate specifies last known rate limit for the client + Response *http.Response // HTTP response that caused this error + Message string `json:"message"` // error message +} + +func (r *RateLimitError) Error() string { + return fmt.Sprintf("%v %v: %d %v %v", + r.Response.Request.Method, sanitizeURL(r.Response.Request.URL), + r.Response.StatusCode, r.Message, formatRateReset(r.Rate.Reset.Time.Sub(time.Now()))) +} + +// AcceptedError occurs when GitHub returns 202 Accepted response with an +// empty body, which means a job was scheduled on the GitHub side to process +// the information needed and cache it. +// Technically, 202 Accepted is not a real error, it's just used to +// indicate that results are not ready yet, but should be available soon. +// The request can be repeated after some time. +type AcceptedError struct{} + +func (*AcceptedError) Error() string { + return "job scheduled on GitHub side; try again later" +} + +// AbuseRateLimitError occurs when GitHub returns 403 Forbidden response with the +// "documentation_url" field value equal to "https://developer.github.com/v3/#abuse-rate-limits". +type AbuseRateLimitError struct { + Response *http.Response // HTTP response that caused this error + Message string `json:"message"` // error message + + // RetryAfter is provided with some abuse rate limit errors. If present, + // it is the amount of time that the client should wait before retrying. + // Otherwise, the client should try again later (after an unspecified amount of time). + RetryAfter *time.Duration +} + +func (r *AbuseRateLimitError) Error() string { + return fmt.Sprintf("%v %v: %d %v", + r.Response.Request.Method, sanitizeURL(r.Response.Request.URL), + r.Response.StatusCode, r.Message) +} + +// sanitizeURL redacts the client_secret parameter from the URL which may be +// exposed to the user. +func sanitizeURL(uri *url.URL) *url.URL { + if uri == nil { + return nil + } + params := uri.Query() + if len(params.Get("client_secret")) > 0 { + params.Set("client_secret", "REDACTED") + uri.RawQuery = params.Encode() + } + return uri +} + +/* +An Error reports more details on an individual error in an ErrorResponse. +These are the possible validation error codes: + + missing: + resource does not exist + missing_field: + a required field on a resource has not been set + invalid: + the formatting of a field is invalid + already_exists: + another resource has the same valid as this field + custom: + some resources return this (e.g. github.User.CreateKey()), additional + information is set in the Message field of the Error + +GitHub API docs: https://developer.github.com/v3/#client-errors +*/ +type Error struct { + Resource string `json:"resource"` // resource on which the error occurred + Field string `json:"field"` // field on which the error occurred + Code string `json:"code"` // validation error code + Message string `json:"message"` // Message describing the error. Errors with Code == "custom" will always have this set. +} + +func (e *Error) Error() string { + return fmt.Sprintf("%v error caused by %v field on %v resource", + e.Code, e.Field, e.Resource) +} + +// CheckResponse checks the API response for errors, and returns them if +// present. A response is considered an error if it has a status code outside +// the 200 range or equal to 202 Accepted. +// API error responses are expected to have either no response +// body, or a JSON response body that maps to ErrorResponse. Any other +// response body will be silently ignored. +// +// The error type will be *RateLimitError for rate limit exceeded errors, +// *AcceptedError for 202 Accepted status codes, +// and *TwoFactorAuthError for two-factor authentication errors. +func CheckResponse(r *http.Response) error { + if r.StatusCode == http.StatusAccepted { + return &AcceptedError{} + } + if c := r.StatusCode; 200 <= c && c <= 299 { + return nil + } + errorResponse := &ErrorResponse{Response: r} + data, err := ioutil.ReadAll(r.Body) + if err == nil && data != nil { + json.Unmarshal(data, errorResponse) + } + switch { + case r.StatusCode == http.StatusUnauthorized && strings.HasPrefix(r.Header.Get(headerOTP), "required"): + return (*TwoFactorAuthError)(errorResponse) + case r.StatusCode == http.StatusForbidden && r.Header.Get(headerRateRemaining) == "0" && strings.HasPrefix(errorResponse.Message, "API rate limit exceeded for "): + return &RateLimitError{ + Rate: parseRate(r), + Response: errorResponse.Response, + Message: errorResponse.Message, + } + case r.StatusCode == http.StatusForbidden && strings.HasSuffix(errorResponse.DocumentationURL, "/v3/#abuse-rate-limits"): + abuseRateLimitError := &AbuseRateLimitError{ + Response: errorResponse.Response, + Message: errorResponse.Message, + } + if v := r.Header["Retry-After"]; len(v) > 0 { + // According to GitHub support, the "Retry-After" header value will be + // an integer which represents the number of seconds that one should + // wait before resuming making requests. + retryAfterSeconds, _ := strconv.ParseInt(v[0], 10, 64) // Error handling is noop. + retryAfter := time.Duration(retryAfterSeconds) * time.Second + abuseRateLimitError.RetryAfter = &retryAfter + } + return abuseRateLimitError + default: + return errorResponse + } +} + +// parseBoolResponse determines the boolean result from a GitHub API response. +// Several GitHub API methods return boolean responses indicated by the HTTP +// status code in the response (true indicated by a 204, false indicated by a +// 404). This helper function will determine that result and hide the 404 +// error if present. Any other error will be returned through as-is. +func parseBoolResponse(err error) (bool, error) { + if err == nil { + return true, nil + } + + if err, ok := err.(*ErrorResponse); ok && err.Response.StatusCode == http.StatusNotFound { + // Simply false. In this one case, we do not pass the error through. + return false, nil + } + + // some other real error occurred + return false, err +} + +// Rate represents the rate limit for the current client. +type Rate struct { + // The number of requests per hour the client is currently limited to. + Limit int `json:"limit"` + + // The number of remaining requests the client can make this hour. + Remaining int `json:"remaining"` + + // The time at which the current rate limit will reset. + Reset Timestamp `json:"reset"` +} + +func (r Rate) String() string { + return Stringify(r) +} + +// RateLimits represents the rate limits for the current client. +type RateLimits struct { + // The rate limit for non-search API requests. Unauthenticated + // requests are limited to 60 per hour. Authenticated requests are + // limited to 5,000 per hour. + // + // GitHub API docs: https://developer.github.com/v3/#rate-limiting + Core *Rate `json:"core"` + + // The rate limit for search API requests. Unauthenticated requests + // are limited to 10 requests per minutes. Authenticated requests are + // limited to 30 per minute. + // + // GitHub API docs: https://developer.github.com/v3/search/#rate-limit + Search *Rate `json:"search"` +} + +func (r RateLimits) String() string { + return Stringify(r) +} + +type rateLimitCategory uint8 + +const ( + coreCategory rateLimitCategory = iota + searchCategory + + categories // An array of this length will be able to contain all rate limit categories. +) + +// category returns the rate limit category of the endpoint, determined by Request.URL.Path. +func category(path string) rateLimitCategory { + switch { + default: + return coreCategory + case strings.HasPrefix(path, "/search/"): + return searchCategory + } +} + +// RateLimits returns the rate limits for the current client. +func (c *Client) RateLimits(ctx context.Context) (*RateLimits, *Response, error) { + req, err := c.NewRequest("GET", "rate_limit", nil) + if err != nil { + return nil, nil, err + } + + response := new(struct { + Resources *RateLimits `json:"resources"` + }) + resp, err := c.Do(ctx, req, response) + if err != nil { + return nil, nil, err + } + + if response.Resources != nil { + c.rateMu.Lock() + if response.Resources.Core != nil { + c.rateLimits[coreCategory] = *response.Resources.Core + } + if response.Resources.Search != nil { + c.rateLimits[searchCategory] = *response.Resources.Search + } + c.rateMu.Unlock() + } + + return response.Resources, resp, nil +} + +/* +UnauthenticatedRateLimitedTransport allows you to make unauthenticated calls +that need to use a higher rate limit associated with your OAuth application. + + t := &github.UnauthenticatedRateLimitedTransport{ + ClientID: "your app's client ID", + ClientSecret: "your app's client secret", + } + client := github.NewClient(t.Client()) + +This will append the querystring params client_id=xxx&client_secret=yyy to all +requests. + +See https://developer.github.com/v3/#unauthenticated-rate-limited-requests for +more information. +*/ +type UnauthenticatedRateLimitedTransport struct { + // ClientID is the GitHub OAuth client ID of the current application, which + // can be found by selecting its entry in the list at + // https://github.com/settings/applications. + ClientID string + + // ClientSecret is the GitHub OAuth client secret of the current + // application. + ClientSecret string + + // Transport is the underlying HTTP transport to use when making requests. + // It will default to http.DefaultTransport if nil. + Transport http.RoundTripper +} + +// RoundTrip implements the RoundTripper interface. +func (t *UnauthenticatedRateLimitedTransport) RoundTrip(req *http.Request) (*http.Response, error) { + if t.ClientID == "" { + return nil, errors.New("t.ClientID is empty") + } + if t.ClientSecret == "" { + return nil, errors.New("t.ClientSecret is empty") + } + + // To set extra querystring params, we must make a copy of the Request so + // that we don't modify the Request we were given. This is required by the + // specification of http.RoundTripper. + // + // Since we are going to modify only req.URL here, we only need a deep copy + // of req.URL. + req2 := new(http.Request) + *req2 = *req + req2.URL = new(url.URL) + *req2.URL = *req.URL + + q := req2.URL.Query() + q.Set("client_id", t.ClientID) + q.Set("client_secret", t.ClientSecret) + req2.URL.RawQuery = q.Encode() + + // Make the HTTP request. + return t.transport().RoundTrip(req2) +} + +// Client returns an *http.Client that makes requests which are subject to the +// rate limit of your OAuth application. +func (t *UnauthenticatedRateLimitedTransport) Client() *http.Client { + return &http.Client{Transport: t} +} + +func (t *UnauthenticatedRateLimitedTransport) transport() http.RoundTripper { + if t.Transport != nil { + return t.Transport + } + return http.DefaultTransport +} + +// BasicAuthTransport is an http.RoundTripper that authenticates all requests +// using HTTP Basic Authentication with the provided username and password. It +// additionally supports users who have two-factor authentication enabled on +// their GitHub account. +type BasicAuthTransport struct { + Username string // GitHub username + Password string // GitHub password + OTP string // one-time password for users with two-factor auth enabled + + // Transport is the underlying HTTP transport to use when making requests. + // It will default to http.DefaultTransport if nil. + Transport http.RoundTripper +} + +// RoundTrip implements the RoundTripper interface. +func (t *BasicAuthTransport) RoundTrip(req *http.Request) (*http.Response, error) { + // To set extra headers, we must make a copy of the Request so + // that we don't modify the Request we were given. This is required by the + // specification of http.RoundTripper. + // + // Since we are going to modify only req.Header here, we only need a deep copy + // of req.Header. + req2 := new(http.Request) + *req2 = *req + req2.Header = make(http.Header, len(req.Header)) + for k, s := range req.Header { + req2.Header[k] = append([]string(nil), s...) + } + + req2.SetBasicAuth(t.Username, t.Password) + if t.OTP != "" { + req2.Header.Set(headerOTP, t.OTP) + } + return t.transport().RoundTrip(req2) +} + +// Client returns an *http.Client that makes requests that are authenticated +// using HTTP Basic Authentication. +func (t *BasicAuthTransport) Client() *http.Client { + return &http.Client{Transport: t} +} + +func (t *BasicAuthTransport) transport() http.RoundTripper { + if t.Transport != nil { + return t.Transport + } + return http.DefaultTransport +} + +// formatRateReset formats d to look like "[rate reset in 2s]" or +// "[rate reset in 87m02s]" for the positive durations. And like "[rate limit was reset 87m02s ago]" +// for the negative cases. +func formatRateReset(d time.Duration) string { + isNegative := d < 0 + if isNegative { + d *= -1 + } + secondsTotal := int(0.5 + d.Seconds()) + minutes := secondsTotal / 60 + seconds := secondsTotal - minutes*60 + + var timeString string + if minutes > 0 { + timeString = fmt.Sprintf("%dm%02ds", minutes, seconds) + } else { + timeString = fmt.Sprintf("%ds", seconds) + } + + if isNegative { + return fmt.Sprintf("[rate limit was reset %v ago]", timeString) + } + return fmt.Sprintf("[rate reset in %v]", timeString) +} + +// Bool is a helper routine that allocates a new bool value +// to store v and returns a pointer to it. +func Bool(v bool) *bool { return &v } + +// Int is a helper routine that allocates a new int value +// to store v and returns a pointer to it. +func Int(v int) *int { return &v } + +// Int64 is a helper routine that allocates a new int64 value +// to store v and returns a pointer to it. +func Int64(v int64) *int64 { return &v } + +// String is a helper routine that allocates a new string value +// to store v and returns a pointer to it. +func String(v string) *string { return &v } diff --git a/vendor/github.com/google/go-github/github/gitignore.go b/vendor/github.com/google/go-github/github/gitignore.go new file mode 100644 index 00000000..2f691bc3 --- /dev/null +++ b/vendor/github.com/google/go-github/github/gitignore.go @@ -0,0 +1,64 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// GitignoresService provides access to the gitignore related functions in the +// GitHub API. +// +// GitHub API docs: https://developer.github.com/v3/gitignore/ +type GitignoresService service + +// Gitignore represents a .gitignore file as returned by the GitHub API. +type Gitignore struct { + Name *string `json:"name,omitempty"` + Source *string `json:"source,omitempty"` +} + +func (g Gitignore) String() string { + return Stringify(g) +} + +// List all available Gitignore templates. +// +// GitHub API docs: https://developer.github.com/v3/gitignore/#listing-available-templates +func (s GitignoresService) List(ctx context.Context) ([]string, *Response, error) { + req, err := s.client.NewRequest("GET", "gitignore/templates", nil) + if err != nil { + return nil, nil, err + } + + var availableTemplates []string + resp, err := s.client.Do(ctx, req, &availableTemplates) + if err != nil { + return nil, resp, err + } + + return availableTemplates, resp, nil +} + +// Get a Gitignore by name. +// +// GitHub API docs: https://developer.github.com/v3/gitignore/#get-a-single-template +func (s GitignoresService) Get(ctx context.Context, name string) (*Gitignore, *Response, error) { + u := fmt.Sprintf("gitignore/templates/%v", name) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + gitignore := new(Gitignore) + resp, err := s.client.Do(ctx, req, gitignore) + if err != nil { + return nil, resp, err + } + + return gitignore, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/issues.go b/vendor/github.com/google/go-github/github/issues.go new file mode 100644 index 00000000..ded07f0a --- /dev/null +++ b/vendor/github.com/google/go-github/github/issues.go @@ -0,0 +1,332 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" + "strings" + "time" +) + +// IssuesService handles communication with the issue related +// methods of the GitHub API. +// +// GitHub API docs: https://developer.github.com/v3/issues/ +type IssuesService service + +// Issue represents a GitHub issue on a repository. +// +// Note: As far as the GitHub API is concerned, every pull request is an issue, +// but not every issue is a pull request. Some endpoints, events, and webhooks +// may also return pull requests via this struct. If PullRequestLinks is nil, +// this is an issue, and if PullRequestLinks is not nil, this is a pull request. +// The IsPullRequest helper method can be used to check that. +type Issue struct { + ID *int64 `json:"id,omitempty"` + Number *int `json:"number,omitempty"` + State *string `json:"state,omitempty"` + Locked *bool `json:"locked,omitempty"` + Title *string `json:"title,omitempty"` + Body *string `json:"body,omitempty"` + User *User `json:"user,omitempty"` + Labels []Label `json:"labels,omitempty"` + Assignee *User `json:"assignee,omitempty"` + Comments *int `json:"comments,omitempty"` + ClosedAt *time.Time `json:"closed_at,omitempty"` + CreatedAt *time.Time `json:"created_at,omitempty"` + UpdatedAt *time.Time `json:"updated_at,omitempty"` + ClosedBy *User `json:"closed_by,omitempty"` + URL *string `json:"url,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` + CommentsURL *string `json:"comments_url,omitempty"` + EventsURL *string `json:"events_url,omitempty"` + LabelsURL *string `json:"labels_url,omitempty"` + RepositoryURL *string `json:"repository_url,omitempty"` + Milestone *Milestone `json:"milestone,omitempty"` + PullRequestLinks *PullRequestLinks `json:"pull_request,omitempty"` + Repository *Repository `json:"repository,omitempty"` + Reactions *Reactions `json:"reactions,omitempty"` + Assignees []*User `json:"assignees,omitempty"` + NodeID *string `json:"node_id,omitempty"` + + // TextMatches is only populated from search results that request text matches + // See: search.go and https://developer.github.com/v3/search/#text-match-metadata + TextMatches []TextMatch `json:"text_matches,omitempty"` +} + +func (i Issue) String() string { + return Stringify(i) +} + +// IsPullRequest reports whether the issue is also a pull request. It uses the +// method recommended by GitHub's API documentation, which is to check whether +// PullRequestLinks is non-nil. +func (i Issue) IsPullRequest() bool { + return i.PullRequestLinks != nil +} + +// IssueRequest represents a request to create/edit an issue. +// It is separate from Issue above because otherwise Labels +// and Assignee fail to serialize to the correct JSON. +type IssueRequest struct { + Title *string `json:"title,omitempty"` + Body *string `json:"body,omitempty"` + Labels *[]string `json:"labels,omitempty"` + Assignee *string `json:"assignee,omitempty"` + State *string `json:"state,omitempty"` + Milestone *int `json:"milestone,omitempty"` + Assignees *[]string `json:"assignees,omitempty"` +} + +// IssueListOptions specifies the optional parameters to the IssuesService.List +// and IssuesService.ListByOrg methods. +type IssueListOptions struct { + // Filter specifies which issues to list. Possible values are: assigned, + // created, mentioned, subscribed, all. Default is "assigned". + Filter string `url:"filter,omitempty"` + + // State filters issues based on their state. Possible values are: open, + // closed, all. Default is "open". + State string `url:"state,omitempty"` + + // Labels filters issues based on their label. + Labels []string `url:"labels,comma,omitempty"` + + // Sort specifies how to sort issues. Possible values are: created, updated, + // and comments. Default value is "created". + Sort string `url:"sort,omitempty"` + + // Direction in which to sort issues. Possible values are: asc, desc. + // Default is "desc". + Direction string `url:"direction,omitempty"` + + // Since filters issues by time. + Since time.Time `url:"since,omitempty"` + + ListOptions +} + +// PullRequestLinks object is added to the Issue object when it's an issue included +// in the IssueCommentEvent webhook payload, if the webhook is fired by a comment on a PR. +type PullRequestLinks struct { + URL *string `json:"url,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` + DiffURL *string `json:"diff_url,omitempty"` + PatchURL *string `json:"patch_url,omitempty"` +} + +// List the issues for the authenticated user. If all is true, list issues +// across all the user's visible repositories including owned, member, and +// organization repositories; if false, list only owned and member +// repositories. +// +// GitHub API docs: https://developer.github.com/v3/issues/#list-issues +func (s *IssuesService) List(ctx context.Context, all bool, opt *IssueListOptions) ([]*Issue, *Response, error) { + var u string + if all { + u = "issues" + } else { + u = "user/issues" + } + return s.listIssues(ctx, u, opt) +} + +// ListByOrg fetches the issues in the specified organization for the +// authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/issues/#list-issues +func (s *IssuesService) ListByOrg(ctx context.Context, org string, opt *IssueListOptions) ([]*Issue, *Response, error) { + u := fmt.Sprintf("orgs/%v/issues", org) + return s.listIssues(ctx, u, opt) +} + +func (s *IssuesService) listIssues(ctx context.Context, u string, opt *IssueListOptions) ([]*Issue, *Response, error) { + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + var issues []*Issue + resp, err := s.client.Do(ctx, req, &issues) + if err != nil { + return nil, resp, err + } + + return issues, resp, nil +} + +// IssueListByRepoOptions specifies the optional parameters to the +// IssuesService.ListByRepo method. +type IssueListByRepoOptions struct { + // Milestone limits issues for the specified milestone. Possible values are + // a milestone number, "none" for issues with no milestone, "*" for issues + // with any milestone. + Milestone string `url:"milestone,omitempty"` + + // State filters issues based on their state. Possible values are: open, + // closed, all. Default is "open". + State string `url:"state,omitempty"` + + // Assignee filters issues based on their assignee. Possible values are a + // user name, "none" for issues that are not assigned, "*" for issues with + // any assigned user. + Assignee string `url:"assignee,omitempty"` + + // Creator filters issues based on their creator. + Creator string `url:"creator,omitempty"` + + // Mentioned filters issues to those mentioned a specific user. + Mentioned string `url:"mentioned,omitempty"` + + // Labels filters issues based on their label. + Labels []string `url:"labels,omitempty,comma"` + + // Sort specifies how to sort issues. Possible values are: created, updated, + // and comments. Default value is "created". + Sort string `url:"sort,omitempty"` + + // Direction in which to sort issues. Possible values are: asc, desc. + // Default is "desc". + Direction string `url:"direction,omitempty"` + + // Since filters issues by time. + Since time.Time `url:"since,omitempty"` + + ListOptions +} + +// ListByRepo lists the issues for the specified repository. +// +// GitHub API docs: https://developer.github.com/v3/issues/#list-issues-for-a-repository +func (s *IssuesService) ListByRepo(ctx context.Context, owner string, repo string, opt *IssueListByRepoOptions) ([]*Issue, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/issues", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + var issues []*Issue + resp, err := s.client.Do(ctx, req, &issues) + if err != nil { + return nil, resp, err + } + + return issues, resp, nil +} + +// Get a single issue. +// +// GitHub API docs: https://developer.github.com/v3/issues/#get-a-single-issue +func (s *IssuesService) Get(ctx context.Context, owner string, repo string, number int) (*Issue, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/issues/%d", owner, repo, number) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + issue := new(Issue) + resp, err := s.client.Do(ctx, req, issue) + if err != nil { + return nil, resp, err + } + + return issue, resp, nil +} + +// Create a new issue on the specified repository. +// +// GitHub API docs: https://developer.github.com/v3/issues/#create-an-issue +func (s *IssuesService) Create(ctx context.Context, owner string, repo string, issue *IssueRequest) (*Issue, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/issues", owner, repo) + req, err := s.client.NewRequest("POST", u, issue) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + i := new(Issue) + resp, err := s.client.Do(ctx, req, i) + if err != nil { + return nil, resp, err + } + + return i, resp, nil +} + +// Edit an issue. +// +// GitHub API docs: https://developer.github.com/v3/issues/#edit-an-issue +func (s *IssuesService) Edit(ctx context.Context, owner string, repo string, number int, issue *IssueRequest) (*Issue, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/issues/%d", owner, repo, number) + req, err := s.client.NewRequest("PATCH", u, issue) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + i := new(Issue) + resp, err := s.client.Do(ctx, req, i) + if err != nil { + return nil, resp, err + } + + return i, resp, nil +} + +// Lock an issue's conversation. +// +// GitHub API docs: https://developer.github.com/v3/issues/#lock-an-issue +func (s *IssuesService) Lock(ctx context.Context, owner string, repo string, number int) (*Response, error) { + u := fmt.Sprintf("repos/%v/%v/issues/%d/lock", owner, repo, number) + req, err := s.client.NewRequest("PUT", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +// Unlock an issue's conversation. +// +// GitHub API docs: https://developer.github.com/v3/issues/#unlock-an-issue +func (s *IssuesService) Unlock(ctx context.Context, owner string, repo string, number int) (*Response, error) { + u := fmt.Sprintf("repos/%v/%v/issues/%d/lock", owner, repo, number) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/issues_assignees.go b/vendor/github.com/google/go-github/github/issues_assignees.go new file mode 100644 index 00000000..9cb366f5 --- /dev/null +++ b/vendor/github.com/google/go-github/github/issues_assignees.go @@ -0,0 +1,85 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// ListAssignees fetches all available assignees (owners and collaborators) to +// which issues may be assigned. +// +// GitHub API docs: https://developer.github.com/v3/issues/assignees/#list-assignees +func (s *IssuesService) ListAssignees(ctx context.Context, owner, repo string, opt *ListOptions) ([]*User, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/assignees", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + var assignees []*User + resp, err := s.client.Do(ctx, req, &assignees) + if err != nil { + return nil, resp, err + } + + return assignees, resp, nil +} + +// IsAssignee checks if a user is an assignee for the specified repository. +// +// GitHub API docs: https://developer.github.com/v3/issues/assignees/#check-assignee +func (s *IssuesService) IsAssignee(ctx context.Context, owner, repo, user string) (bool, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/assignees/%v", owner, repo, user) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return false, nil, err + } + resp, err := s.client.Do(ctx, req, nil) + assignee, err := parseBoolResponse(err) + return assignee, resp, err +} + +// AddAssignees adds the provided GitHub users as assignees to the issue. +// +// GitHub API docs: https://developer.github.com/v3/issues/assignees/#add-assignees-to-an-issue +func (s *IssuesService) AddAssignees(ctx context.Context, owner, repo string, number int, assignees []string) (*Issue, *Response, error) { + users := &struct { + Assignees []string `json:"assignees,omitempty"` + }{Assignees: assignees} + u := fmt.Sprintf("repos/%v/%v/issues/%v/assignees", owner, repo, number) + req, err := s.client.NewRequest("POST", u, users) + if err != nil { + return nil, nil, err + } + + issue := &Issue{} + resp, err := s.client.Do(ctx, req, issue) + return issue, resp, err +} + +// RemoveAssignees removes the provided GitHub users as assignees from the issue. +// +// GitHub API docs: https://developer.github.com/v3/issues/assignees/#remove-assignees-from-an-issue +func (s *IssuesService) RemoveAssignees(ctx context.Context, owner, repo string, number int, assignees []string) (*Issue, *Response, error) { + users := &struct { + Assignees []string `json:"assignees,omitempty"` + }{Assignees: assignees} + u := fmt.Sprintf("repos/%v/%v/issues/%v/assignees", owner, repo, number) + req, err := s.client.NewRequest("DELETE", u, users) + if err != nil { + return nil, nil, err + } + + issue := &Issue{} + resp, err := s.client.Do(ctx, req, issue) + return issue, resp, err +} diff --git a/vendor/github.com/google/go-github/github/issues_comments.go b/vendor/github.com/google/go-github/github/issues_comments.go new file mode 100644 index 00000000..e6f6f219 --- /dev/null +++ b/vendor/github.com/google/go-github/github/issues_comments.go @@ -0,0 +1,152 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" + "time" +) + +// IssueComment represents a comment left on an issue. +type IssueComment struct { + ID *int64 `json:"id,omitempty"` + Body *string `json:"body,omitempty"` + User *User `json:"user,omitempty"` + Reactions *Reactions `json:"reactions,omitempty"` + CreatedAt *time.Time `json:"created_at,omitempty"` + UpdatedAt *time.Time `json:"updated_at,omitempty"` + // AuthorAssociation is the comment author's relationship to the issue's repository. + // Possible values are "COLLABORATOR", "CONTRIBUTOR", "FIRST_TIMER", "FIRST_TIME_CONTRIBUTOR", "MEMBER", "OWNER", or "NONE". + AuthorAssociation *string `json:"author_association,omitempty"` + URL *string `json:"url,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` + IssueURL *string `json:"issue_url,omitempty"` +} + +func (i IssueComment) String() string { + return Stringify(i) +} + +// IssueListCommentsOptions specifies the optional parameters to the +// IssuesService.ListComments method. +type IssueListCommentsOptions struct { + // Sort specifies how to sort comments. Possible values are: created, updated. + Sort string `url:"sort,omitempty"` + + // Direction in which to sort comments. Possible values are: asc, desc. + Direction string `url:"direction,omitempty"` + + // Since filters comments by time. + Since time.Time `url:"since,omitempty"` + + ListOptions +} + +// ListComments lists all comments on the specified issue. Specifying an issue +// number of 0 will return all comments on all issues for the repository. +// +// GitHub API docs: https://developer.github.com/v3/issues/comments/#list-comments-on-an-issue +func (s *IssuesService) ListComments(ctx context.Context, owner string, repo string, number int, opt *IssueListCommentsOptions) ([]*IssueComment, *Response, error) { + var u string + if number == 0 { + u = fmt.Sprintf("repos/%v/%v/issues/comments", owner, repo) + } else { + u = fmt.Sprintf("repos/%v/%v/issues/%d/comments", owner, repo, number) + } + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeReactionsPreview) + + var comments []*IssueComment + resp, err := s.client.Do(ctx, req, &comments) + if err != nil { + return nil, resp, err + } + + return comments, resp, nil +} + +// GetComment fetches the specified issue comment. +// +// GitHub API docs: https://developer.github.com/v3/issues/comments/#get-a-single-comment +func (s *IssuesService) GetComment(ctx context.Context, owner string, repo string, commentID int64) (*IssueComment, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/issues/comments/%d", owner, repo, commentID) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeReactionsPreview) + + comment := new(IssueComment) + resp, err := s.client.Do(ctx, req, comment) + if err != nil { + return nil, resp, err + } + + return comment, resp, nil +} + +// CreateComment creates a new comment on the specified issue. +// +// GitHub API docs: https://developer.github.com/v3/issues/comments/#create-a-comment +func (s *IssuesService) CreateComment(ctx context.Context, owner string, repo string, number int, comment *IssueComment) (*IssueComment, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/issues/%d/comments", owner, repo, number) + req, err := s.client.NewRequest("POST", u, comment) + if err != nil { + return nil, nil, err + } + c := new(IssueComment) + resp, err := s.client.Do(ctx, req, c) + if err != nil { + return nil, resp, err + } + + return c, resp, nil +} + +// EditComment updates an issue comment. +// A non-nil comment.Body must be provided. Other comment fields should be left nil. +// +// GitHub API docs: https://developer.github.com/v3/issues/comments/#edit-a-comment +func (s *IssuesService) EditComment(ctx context.Context, owner string, repo string, commentID int64, comment *IssueComment) (*IssueComment, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/issues/comments/%d", owner, repo, commentID) + req, err := s.client.NewRequest("PATCH", u, comment) + if err != nil { + return nil, nil, err + } + c := new(IssueComment) + resp, err := s.client.Do(ctx, req, c) + if err != nil { + return nil, resp, err + } + + return c, resp, nil +} + +// DeleteComment deletes an issue comment. +// +// GitHub API docs: https://developer.github.com/v3/issues/comments/#delete-a-comment +func (s *IssuesService) DeleteComment(ctx context.Context, owner string, repo string, commentID int64) (*Response, error) { + u := fmt.Sprintf("repos/%v/%v/issues/comments/%d", owner, repo, commentID) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/issues_events.go b/vendor/github.com/google/go-github/github/issues_events.go new file mode 100644 index 00000000..55e6d431 --- /dev/null +++ b/vendor/github.com/google/go-github/github/issues_events.go @@ -0,0 +1,151 @@ +// Copyright 2014 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" + "time" +) + +// IssueEvent represents an event that occurred around an Issue or Pull Request. +type IssueEvent struct { + ID *int64 `json:"id,omitempty"` + URL *string `json:"url,omitempty"` + + // The User that generated this event. + Actor *User `json:"actor,omitempty"` + + // Event identifies the actual type of Event that occurred. Possible + // values are: + // + // closed + // The Actor closed the issue. + // If the issue was closed by commit message, CommitID holds the SHA1 hash of the commit. + // + // merged + // The Actor merged into master a branch containing a commit mentioning the issue. + // CommitID holds the SHA1 of the merge commit. + // + // referenced + // The Actor committed to master a commit mentioning the issue in its commit message. + // CommitID holds the SHA1 of the commit. + // + // reopened, locked, unlocked + // The Actor did that to the issue. + // + // renamed + // The Actor changed the issue title from Rename.From to Rename.To. + // + // mentioned + // Someone unspecified @mentioned the Actor [sic] in an issue comment body. + // + // assigned, unassigned + // The Assigner assigned the issue to or removed the assignment from the Assignee. + // + // labeled, unlabeled + // The Actor added or removed the Label from the issue. + // + // milestoned, demilestoned + // The Actor added or removed the issue from the Milestone. + // + // subscribed, unsubscribed + // The Actor subscribed to or unsubscribed from notifications for an issue. + // + // head_ref_deleted, head_ref_restored + // The pull request’s branch was deleted or restored. + // + Event *string `json:"event,omitempty"` + + CreatedAt *time.Time `json:"created_at,omitempty"` + Issue *Issue `json:"issue,omitempty"` + + // Only present on certain events; see above. + Assignee *User `json:"assignee,omitempty"` + Assigner *User `json:"assigner,omitempty"` + CommitID *string `json:"commit_id,omitempty"` + Milestone *Milestone `json:"milestone,omitempty"` + Label *Label `json:"label,omitempty"` + Rename *Rename `json:"rename,omitempty"` +} + +// ListIssueEvents lists events for the specified issue. +// +// GitHub API docs: https://developer.github.com/v3/issues/events/#list-events-for-an-issue +func (s *IssuesService) ListIssueEvents(ctx context.Context, owner, repo string, number int, opt *ListOptions) ([]*IssueEvent, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/issues/%v/events", owner, repo, number) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var events []*IssueEvent + resp, err := s.client.Do(ctx, req, &events) + if err != nil { + return nil, resp, err + } + + return events, resp, nil +} + +// ListRepositoryEvents lists events for the specified repository. +// +// GitHub API docs: https://developer.github.com/v3/issues/events/#list-events-for-a-repository +func (s *IssuesService) ListRepositoryEvents(ctx context.Context, owner, repo string, opt *ListOptions) ([]*IssueEvent, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/issues/events", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var events []*IssueEvent + resp, err := s.client.Do(ctx, req, &events) + if err != nil { + return nil, resp, err + } + + return events, resp, nil +} + +// GetEvent returns the specified issue event. +// +// GitHub API docs: https://developer.github.com/v3/issues/events/#get-a-single-event +func (s *IssuesService) GetEvent(ctx context.Context, owner, repo string, id int64) (*IssueEvent, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/issues/events/%v", owner, repo, id) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + event := new(IssueEvent) + resp, err := s.client.Do(ctx, req, event) + if err != nil { + return nil, resp, err + } + + return event, resp, nil +} + +// Rename contains details for 'renamed' events. +type Rename struct { + From *string `json:"from,omitempty"` + To *string `json:"to,omitempty"` +} + +func (r Rename) String() string { + return Stringify(r) +} diff --git a/vendor/github.com/google/go-github/github/issues_labels.go b/vendor/github.com/google/go-github/github/issues_labels.go new file mode 100644 index 00000000..4328997b --- /dev/null +++ b/vendor/github.com/google/go-github/github/issues_labels.go @@ -0,0 +1,270 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" + "strings" +) + +// Label represents a GitHub label on an Issue +type Label struct { + ID *int64 `json:"id,omitempty"` + URL *string `json:"url,omitempty"` + Name *string `json:"name,omitempty"` + Color *string `json:"color,omitempty"` + Description *string `json:"description,omitempty"` + Default *bool `json:"default,omitempty"` + NodeID *string `json:"node_id,omitempty"` +} + +func (l Label) String() string { + return Stringify(l) +} + +// ListLabels lists all labels for a repository. +// +// GitHub API docs: https://developer.github.com/v3/issues/labels/#list-all-labels-for-this-repository +func (s *IssuesService) ListLabels(ctx context.Context, owner string, repo string, opt *ListOptions) ([]*Label, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/labels", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + var labels []*Label + resp, err := s.client.Do(ctx, req, &labels) + if err != nil { + return nil, resp, err + } + + return labels, resp, nil +} + +// GetLabel gets a single label. +// +// GitHub API docs: https://developer.github.com/v3/issues/labels/#get-a-single-label +func (s *IssuesService) GetLabel(ctx context.Context, owner string, repo string, name string) (*Label, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/labels/%v", owner, repo, name) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + label := new(Label) + resp, err := s.client.Do(ctx, req, label) + if err != nil { + return nil, resp, err + } + + return label, resp, nil +} + +// CreateLabel creates a new label on the specified repository. +// +// GitHub API docs: https://developer.github.com/v3/issues/labels/#create-a-label +func (s *IssuesService) CreateLabel(ctx context.Context, owner string, repo string, label *Label) (*Label, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/labels", owner, repo) + req, err := s.client.NewRequest("POST", u, label) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + l := new(Label) + resp, err := s.client.Do(ctx, req, l) + if err != nil { + return nil, resp, err + } + + return l, resp, nil +} + +// EditLabel edits a label. +// +// GitHub API docs: https://developer.github.com/v3/issues/labels/#update-a-label +func (s *IssuesService) EditLabel(ctx context.Context, owner string, repo string, name string, label *Label) (*Label, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/labels/%v", owner, repo, name) + req, err := s.client.NewRequest("PATCH", u, label) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + l := new(Label) + resp, err := s.client.Do(ctx, req, l) + if err != nil { + return nil, resp, err + } + + return l, resp, nil +} + +// DeleteLabel deletes a label. +// +// GitHub API docs: https://developer.github.com/v3/issues/labels/#delete-a-label +func (s *IssuesService) DeleteLabel(ctx context.Context, owner string, repo string, name string) (*Response, error) { + u := fmt.Sprintf("repos/%v/%v/labels/%v", owner, repo, name) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + return s.client.Do(ctx, req, nil) +} + +// ListLabelsByIssue lists all labels for an issue. +// +// GitHub API docs: https://developer.github.com/v3/issues/labels/#list-labels-on-an-issue +func (s *IssuesService) ListLabelsByIssue(ctx context.Context, owner string, repo string, number int, opt *ListOptions) ([]*Label, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/issues/%d/labels", owner, repo, number) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + var labels []*Label + resp, err := s.client.Do(ctx, req, &labels) + if err != nil { + return nil, resp, err + } + + return labels, resp, nil +} + +// AddLabelsToIssue adds labels to an issue. +// +// GitHub API docs: https://developer.github.com/v3/issues/labels/#add-labels-to-an-issue +func (s *IssuesService) AddLabelsToIssue(ctx context.Context, owner string, repo string, number int, labels []string) ([]*Label, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/issues/%d/labels", owner, repo, number) + req, err := s.client.NewRequest("POST", u, labels) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + var l []*Label + resp, err := s.client.Do(ctx, req, &l) + if err != nil { + return nil, resp, err + } + + return l, resp, nil +} + +// RemoveLabelForIssue removes a label for an issue. +// +// GitHub API docs: https://developer.github.com/v3/issues/labels/#remove-a-label-from-an-issue +func (s *IssuesService) RemoveLabelForIssue(ctx context.Context, owner string, repo string, number int, label string) (*Response, error) { + u := fmt.Sprintf("repos/%v/%v/issues/%d/labels/%v", owner, repo, number, label) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeLabelDescriptionSearchPreview) + + return s.client.Do(ctx, req, nil) +} + +// ReplaceLabelsForIssue replaces all labels for an issue. +// +// GitHub API docs: https://developer.github.com/v3/issues/labels/#replace-all-labels-for-an-issue +func (s *IssuesService) ReplaceLabelsForIssue(ctx context.Context, owner string, repo string, number int, labels []string) ([]*Label, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/issues/%d/labels", owner, repo, number) + req, err := s.client.NewRequest("PUT", u, labels) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + var l []*Label + resp, err := s.client.Do(ctx, req, &l) + if err != nil { + return nil, resp, err + } + + return l, resp, nil +} + +// RemoveLabelsForIssue removes all labels for an issue. +// +// GitHub API docs: https://developer.github.com/v3/issues/labels/#remove-all-labels-from-an-issue +func (s *IssuesService) RemoveLabelsForIssue(ctx context.Context, owner string, repo string, number int) (*Response, error) { + u := fmt.Sprintf("repos/%v/%v/issues/%d/labels", owner, repo, number) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeLabelDescriptionSearchPreview) + + return s.client.Do(ctx, req, nil) +} + +// ListLabelsForMilestone lists labels for every issue in a milestone. +// +// GitHub API docs: https://developer.github.com/v3/issues/labels/#get-labels-for-every-issue-in-a-milestone +func (s *IssuesService) ListLabelsForMilestone(ctx context.Context, owner string, repo string, number int, opt *ListOptions) ([]*Label, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/milestones/%d/labels", owner, repo, number) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + var labels []*Label + resp, err := s.client.Do(ctx, req, &labels) + if err != nil { + return nil, resp, err + } + + return labels, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/issues_milestones.go b/vendor/github.com/google/go-github/github/issues_milestones.go new file mode 100644 index 00000000..6af1cc03 --- /dev/null +++ b/vendor/github.com/google/go-github/github/issues_milestones.go @@ -0,0 +1,160 @@ +// Copyright 2014 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" + "time" +) + +// Milestone represents a GitHub repository milestone. +type Milestone struct { + URL *string `json:"url,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` + LabelsURL *string `json:"labels_url,omitempty"` + ID *int64 `json:"id,omitempty"` + Number *int `json:"number,omitempty"` + State *string `json:"state,omitempty"` + Title *string `json:"title,omitempty"` + Description *string `json:"description,omitempty"` + Creator *User `json:"creator,omitempty"` + OpenIssues *int `json:"open_issues,omitempty"` + ClosedIssues *int `json:"closed_issues,omitempty"` + CreatedAt *time.Time `json:"created_at,omitempty"` + UpdatedAt *time.Time `json:"updated_at,omitempty"` + ClosedAt *time.Time `json:"closed_at,omitempty"` + DueOn *time.Time `json:"due_on,omitempty"` + NodeID *string `json:"node_id,omitempty"` +} + +func (m Milestone) String() string { + return Stringify(m) +} + +// MilestoneListOptions specifies the optional parameters to the +// IssuesService.ListMilestones method. +type MilestoneListOptions struct { + // State filters milestones based on their state. Possible values are: + // open, closed, all. Default is "open". + State string `url:"state,omitempty"` + + // Sort specifies how to sort milestones. Possible values are: due_on, completeness. + // Default value is "due_on". + Sort string `url:"sort,omitempty"` + + // Direction in which to sort milestones. Possible values are: asc, desc. + // Default is "asc". + Direction string `url:"direction,omitempty"` + + ListOptions +} + +// ListMilestones lists all milestones for a repository. +// +// GitHub API docs: https://developer.github.com/v3/issues/milestones/#list-milestones-for-a-repository +func (s *IssuesService) ListMilestones(ctx context.Context, owner string, repo string, opt *MilestoneListOptions) ([]*Milestone, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/milestones", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + var milestones []*Milestone + resp, err := s.client.Do(ctx, req, &milestones) + if err != nil { + return nil, resp, err + } + + return milestones, resp, nil +} + +// GetMilestone gets a single milestone. +// +// GitHub API docs: https://developer.github.com/v3/issues/milestones/#get-a-single-milestone +func (s *IssuesService) GetMilestone(ctx context.Context, owner string, repo string, number int) (*Milestone, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/milestones/%d", owner, repo, number) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + milestone := new(Milestone) + resp, err := s.client.Do(ctx, req, milestone) + if err != nil { + return nil, resp, err + } + + return milestone, resp, nil +} + +// CreateMilestone creates a new milestone on the specified repository. +// +// GitHub API docs: https://developer.github.com/v3/issues/milestones/#create-a-milestone +func (s *IssuesService) CreateMilestone(ctx context.Context, owner string, repo string, milestone *Milestone) (*Milestone, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/milestones", owner, repo) + req, err := s.client.NewRequest("POST", u, milestone) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + m := new(Milestone) + resp, err := s.client.Do(ctx, req, m) + if err != nil { + return nil, resp, err + } + + return m, resp, nil +} + +// EditMilestone edits a milestone. +// +// GitHub API docs: https://developer.github.com/v3/issues/milestones/#update-a-milestone +func (s *IssuesService) EditMilestone(ctx context.Context, owner string, repo string, number int, milestone *Milestone) (*Milestone, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/milestones/%d", owner, repo, number) + req, err := s.client.NewRequest("PATCH", u, milestone) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + m := new(Milestone) + resp, err := s.client.Do(ctx, req, m) + if err != nil { + return nil, resp, err + } + + return m, resp, nil +} + +// DeleteMilestone deletes a milestone. +// +// GitHub API docs: https://developer.github.com/v3/issues/milestones/#delete-a-milestone +func (s *IssuesService) DeleteMilestone(ctx context.Context, owner string, repo string, number int) (*Response, error) { + u := fmt.Sprintf("repos/%v/%v/milestones/%d", owner, repo, number) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/issues_timeline.go b/vendor/github.com/google/go-github/github/issues_timeline.go new file mode 100644 index 00000000..9cfda832 --- /dev/null +++ b/vendor/github.com/google/go-github/github/issues_timeline.go @@ -0,0 +1,149 @@ +// Copyright 2016 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" + "time" +) + +// Timeline represents an event that occurred around an Issue or Pull Request. +// +// It is similar to an IssueEvent but may contain more information. +// GitHub API docs: https://developer.github.com/v3/issues/timeline/ +type Timeline struct { + ID *int64 `json:"id,omitempty"` + URL *string `json:"url,omitempty"` + CommitURL *string `json:"commit_url,omitempty"` + + // The User object that generated the event. + Actor *User `json:"actor,omitempty"` + + // Event identifies the actual type of Event that occurred. Possible values + // are: + // + // assigned + // The issue was assigned to the assignee. + // + // closed + // The issue was closed by the actor. When the commit_id is present, it + // identifies the commit that closed the issue using "closes / fixes #NN" + // syntax. + // + // commented + // A comment was added to the issue. + // + // committed + // A commit was added to the pull request's 'HEAD' branch. Only provided + // for pull requests. + // + // cross-referenced + // The issue was referenced from another issue. The 'source' attribute + // contains the 'id', 'actor', and 'url' of the reference's source. + // + // demilestoned + // The issue was removed from a milestone. + // + // head_ref_deleted + // The pull request's branch was deleted. + // + // head_ref_restored + // The pull request's branch was restored. + // + // labeled + // A label was added to the issue. + // + // locked + // The issue was locked by the actor. + // + // mentioned + // The actor was @mentioned in an issue body. + // + // merged + // The issue was merged by the actor. The 'commit_id' attribute is the + // SHA1 of the HEAD commit that was merged. + // + // milestoned + // The issue was added to a milestone. + // + // referenced + // The issue was referenced from a commit message. The 'commit_id' + // attribute is the commit SHA1 of where that happened. + // + // renamed + // The issue title was changed. + // + // reopened + // The issue was reopened by the actor. + // + // subscribed + // The actor subscribed to receive notifications for an issue. + // + // unassigned + // The assignee was unassigned from the issue. + // + // unlabeled + // A label was removed from the issue. + // + // unlocked + // The issue was unlocked by the actor. + // + // unsubscribed + // The actor unsubscribed to stop receiving notifications for an issue. + // + Event *string `json:"event,omitempty"` + + // The string SHA of a commit that referenced this Issue or Pull Request. + CommitID *string `json:"commit_id,omitempty"` + // The timestamp indicating when the event occurred. + CreatedAt *time.Time `json:"created_at,omitempty"` + // The Label object including `name` and `color` attributes. Only provided for + // 'labeled' and 'unlabeled' events. + Label *Label `json:"label,omitempty"` + // The User object which was assigned to (or unassigned from) this Issue or + // Pull Request. Only provided for 'assigned' and 'unassigned' events. + Assignee *User `json:"assignee,omitempty"` + // The Milestone object including a 'title' attribute. + // Only provided for 'milestoned' and 'demilestoned' events. + Milestone *Milestone `json:"milestone,omitempty"` + // The 'id', 'actor', and 'url' for the source of a reference from another issue. + // Only provided for 'cross-referenced' events. + Source *Source `json:"source,omitempty"` + // An object containing rename details including 'from' and 'to' attributes. + // Only provided for 'renamed' events. + Rename *Rename `json:"rename,omitempty"` +} + +// Source represents a reference's source. +type Source struct { + ID *int64 `json:"id,omitempty"` + URL *string `json:"url,omitempty"` + Actor *User `json:"actor,omitempty"` +} + +// ListIssueTimeline lists events for the specified issue. +// +// GitHub API docs: https://developer.github.com/v3/issues/timeline/#list-events-for-an-issue +func (s *IssuesService) ListIssueTimeline(ctx context.Context, owner, repo string, number int, opt *ListOptions) ([]*Timeline, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/issues/%v/timeline", owner, repo, number) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeTimelinePreview) + + var events []*Timeline + resp, err := s.client.Do(ctx, req, &events) + return events, resp, err +} diff --git a/vendor/github.com/google/go-github/github/licenses.go b/vendor/github.com/google/go-github/github/licenses.go new file mode 100644 index 00000000..e9cd1777 --- /dev/null +++ b/vendor/github.com/google/go-github/github/licenses.go @@ -0,0 +1,103 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// LicensesService handles communication with the license related +// methods of the GitHub API. +// +// GitHub API docs: https://developer.github.com/v3/licenses/ +type LicensesService service + +// RepositoryLicense represents the license for a repository. +type RepositoryLicense struct { + Name *string `json:"name,omitempty"` + Path *string `json:"path,omitempty"` + + SHA *string `json:"sha,omitempty"` + Size *int `json:"size,omitempty"` + URL *string `json:"url,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` + GitURL *string `json:"git_url,omitempty"` + DownloadURL *string `json:"download_url,omitempty"` + Type *string `json:"type,omitempty"` + Content *string `json:"content,omitempty"` + Encoding *string `json:"encoding,omitempty"` + License *License `json:"license,omitempty"` +} + +func (l RepositoryLicense) String() string { + return Stringify(l) +} + +// License represents an open source license. +type License struct { + Key *string `json:"key,omitempty"` + Name *string `json:"name,omitempty"` + URL *string `json:"url,omitempty"` + + SPDXID *string `json:"spdx_id,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` + Featured *bool `json:"featured,omitempty"` + Description *string `json:"description,omitempty"` + Implementation *string `json:"implementation,omitempty"` + Permissions *[]string `json:"permissions,omitempty"` + Conditions *[]string `json:"conditions,omitempty"` + Limitations *[]string `json:"limitations,omitempty"` + Body *string `json:"body,omitempty"` +} + +func (l License) String() string { + return Stringify(l) +} + +// List popular open source licenses. +// +// GitHub API docs: https://developer.github.com/v3/licenses/#list-all-licenses +func (s *LicensesService) List(ctx context.Context) ([]*License, *Response, error) { + req, err := s.client.NewRequest("GET", "licenses", nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypeLicensesPreview) + + var licenses []*License + resp, err := s.client.Do(ctx, req, &licenses) + if err != nil { + return nil, resp, err + } + + return licenses, resp, nil +} + +// Get extended metadata for one license. +// +// GitHub API docs: https://developer.github.com/v3/licenses/#get-an-individual-license +func (s *LicensesService) Get(ctx context.Context, licenseName string) (*License, *Response, error) { + u := fmt.Sprintf("licenses/%s", licenseName) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypeLicensesPreview) + + license := new(License) + resp, err := s.client.Do(ctx, req, license) + if err != nil { + return nil, resp, err + } + + return license, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/messages.go b/vendor/github.com/google/go-github/github/messages.go new file mode 100644 index 00000000..2396fd43 --- /dev/null +++ b/vendor/github.com/google/go-github/github/messages.go @@ -0,0 +1,245 @@ +// Copyright 2016 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This file provides functions for validating payloads from GitHub Webhooks. +// GitHub API docs: https://developer.github.com/webhooks/securing/#validating-payloads-from-github + +package github + +import ( + "crypto/hmac" + "crypto/sha1" + "crypto/sha256" + "crypto/sha512" + "encoding/hex" + "encoding/json" + "errors" + "fmt" + "hash" + "io/ioutil" + "net/http" + "net/url" + "strings" +) + +const ( + // sha1Prefix is the prefix used by GitHub before the HMAC hexdigest. + sha1Prefix = "sha1" + // sha256Prefix and sha512Prefix are provided for future compatibility. + sha256Prefix = "sha256" + sha512Prefix = "sha512" + // signatureHeader is the GitHub header key used to pass the HMAC hexdigest. + signatureHeader = "X-Hub-Signature" + // eventTypeHeader is the GitHub header key used to pass the event type. + eventTypeHeader = "X-Github-Event" + // deliveryIDHeader is the GitHub header key used to pass the unique ID for the webhook event. + deliveryIDHeader = "X-Github-Delivery" +) + +var ( + // eventTypeMapping maps webhooks types to their corresponding go-github struct types. + eventTypeMapping = map[string]string{ + "commit_comment": "CommitCommentEvent", + "create": "CreateEvent", + "delete": "DeleteEvent", + "deployment": "DeploymentEvent", + "deployment_status": "DeploymentStatusEvent", + "fork": "ForkEvent", + "gollum": "GollumEvent", + "installation": "InstallationEvent", + "installation_repositories": "InstallationRepositoriesEvent", + "issue_comment": "IssueCommentEvent", + "issues": "IssuesEvent", + "label": "LabelEvent", + "marketplace_purchase": "MarketplacePurchaseEvent", + "member": "MemberEvent", + "membership": "MembershipEvent", + "milestone": "MilestoneEvent", + "organization": "OrganizationEvent", + "org_block": "OrgBlockEvent", + "page_build": "PageBuildEvent", + "ping": "PingEvent", + "project": "ProjectEvent", + "project_card": "ProjectCardEvent", + "project_column": "ProjectColumnEvent", + "public": "PublicEvent", + "pull_request_review": "PullRequestReviewEvent", + "pull_request_review_comment": "PullRequestReviewCommentEvent", + "pull_request": "PullRequestEvent", + "push": "PushEvent", + "repository": "RepositoryEvent", + "release": "ReleaseEvent", + "status": "StatusEvent", + "team": "TeamEvent", + "team_add": "TeamAddEvent", + "watch": "WatchEvent", + } +) + +// genMAC generates the HMAC signature for a message provided the secret key +// and hashFunc. +func genMAC(message, key []byte, hashFunc func() hash.Hash) []byte { + mac := hmac.New(hashFunc, key) + mac.Write(message) + return mac.Sum(nil) +} + +// checkMAC reports whether messageMAC is a valid HMAC tag for message. +func checkMAC(message, messageMAC, key []byte, hashFunc func() hash.Hash) bool { + expectedMAC := genMAC(message, key, hashFunc) + return hmac.Equal(messageMAC, expectedMAC) +} + +// messageMAC returns the hex-decoded HMAC tag from the signature and its +// corresponding hash function. +func messageMAC(signature string) ([]byte, func() hash.Hash, error) { + if signature == "" { + return nil, nil, errors.New("missing signature") + } + sigParts := strings.SplitN(signature, "=", 2) + if len(sigParts) != 2 { + return nil, nil, fmt.Errorf("error parsing signature %q", signature) + } + + var hashFunc func() hash.Hash + switch sigParts[0] { + case sha1Prefix: + hashFunc = sha1.New + case sha256Prefix: + hashFunc = sha256.New + case sha512Prefix: + hashFunc = sha512.New + default: + return nil, nil, fmt.Errorf("unknown hash type prefix: %q", sigParts[0]) + } + + buf, err := hex.DecodeString(sigParts[1]) + if err != nil { + return nil, nil, fmt.Errorf("error decoding signature %q: %v", signature, err) + } + return buf, hashFunc, nil +} + +// ValidatePayload validates an incoming GitHub Webhook event request +// and returns the (JSON) payload. +// The Content-Type header of the payload can be "application/json" or "application/x-www-form-urlencoded". +// If the Content-Type is neither then an error is returned. +// secretKey is the GitHub Webhook secret message. +// +// Example usage: +// +// func (s *GitHubEventMonitor) ServeHTTP(w http.ResponseWriter, r *http.Request) { +// payload, err := github.ValidatePayload(r, s.webhookSecretKey) +// if err != nil { ... } +// // Process payload... +// } +// +func ValidatePayload(r *http.Request, secretKey []byte) (payload []byte, err error) { + var body []byte // Raw body that GitHub uses to calculate the signature. + + switch ct := r.Header.Get("Content-Type"); ct { + case "application/json": + var err error + if body, err = ioutil.ReadAll(r.Body); err != nil { + return nil, err + } + + // If the content type is application/json, + // the JSON payload is just the original body. + payload = body + + case "application/x-www-form-urlencoded": + // payloadFormParam is the name of the form parameter that the JSON payload + // will be in if a webhook has its content type set to application/x-www-form-urlencoded. + const payloadFormParam = "payload" + + var err error + if body, err = ioutil.ReadAll(r.Body); err != nil { + return nil, err + } + + // If the content type is application/x-www-form-urlencoded, + // the JSON payload will be under the "payload" form param. + form, err := url.ParseQuery(string(body)) + if err != nil { + return nil, err + } + payload = []byte(form.Get(payloadFormParam)) + + default: + return nil, fmt.Errorf("Webhook request has unsupported Content-Type %q", ct) + } + + sig := r.Header.Get(signatureHeader) + if err := validateSignature(sig, body, secretKey); err != nil { + return nil, err + } + return payload, nil +} + +// validateSignature validates the signature for the given payload. +// signature is the GitHub hash signature delivered in the X-Hub-Signature header. +// payload is the JSON payload sent by GitHub Webhooks. +// secretKey is the GitHub Webhook secret message. +// +// GitHub API docs: https://developer.github.com/webhooks/securing/#validating-payloads-from-github +func validateSignature(signature string, payload, secretKey []byte) error { + messageMAC, hashFunc, err := messageMAC(signature) + if err != nil { + return err + } + if !checkMAC(payload, messageMAC, secretKey, hashFunc) { + return errors.New("payload signature check failed") + } + return nil +} + +// WebHookType returns the event type of webhook request r. +// +// GitHub API docs: https://developer.github.com/v3/repos/hooks/#webhook-headers +func WebHookType(r *http.Request) string { + return r.Header.Get(eventTypeHeader) +} + +// DeliveryID returns the unique delivery ID of webhook request r. +// +// GitHub API docs: https://developer.github.com/v3/repos/hooks/#webhook-headers +func DeliveryID(r *http.Request) string { + return r.Header.Get(deliveryIDHeader) +} + +// ParseWebHook parses the event payload. For recognized event types, a +// value of the corresponding struct type will be returned (as returned +// by Event.ParsePayload()). An error will be returned for unrecognized event +// types. +// +// Example usage: +// +// func (s *GitHubEventMonitor) ServeHTTP(w http.ResponseWriter, r *http.Request) { +// payload, err := github.ValidatePayload(r, s.webhookSecretKey) +// if err != nil { ... } +// event, err := github.ParseWebHook(github.WebHookType(r), payload) +// if err != nil { ... } +// switch event := event.(type) { +// case *github.CommitCommentEvent: +// processCommitCommentEvent(event) +// case *github.CreateEvent: +// processCreateEvent(event) +// ... +// } +// } +// +func ParseWebHook(messageType string, payload []byte) (interface{}, error) { + eventType, ok := eventTypeMapping[messageType] + if !ok { + return nil, fmt.Errorf("unknown X-Github-Event in message: %v", messageType) + } + + event := Event{ + Type: &eventType, + RawPayload: (*json.RawMessage)(&payload), + } + return event.ParsePayload() +} diff --git a/vendor/github.com/google/go-github/github/migrations.go b/vendor/github.com/google/go-github/github/migrations.go new file mode 100644 index 00000000..90cc1fae --- /dev/null +++ b/vendor/github.com/google/go-github/github/migrations.go @@ -0,0 +1,224 @@ +// Copyright 2016 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "errors" + "fmt" + "net/http" + "strings" +) + +// MigrationService provides access to the migration related functions +// in the GitHub API. +// +// GitHub API docs: https://developer.github.com/v3/migration/ +type MigrationService service + +// Migration represents a GitHub migration (archival). +type Migration struct { + ID *int64 `json:"id,omitempty"` + GUID *string `json:"guid,omitempty"` + // State is the current state of a migration. + // Possible values are: + // "pending" which means the migration hasn't started yet, + // "exporting" which means the migration is in progress, + // "exported" which means the migration finished successfully, or + // "failed" which means the migration failed. + State *string `json:"state,omitempty"` + // LockRepositories indicates whether repositories are locked (to prevent + // manipulation) while migrating data. + LockRepositories *bool `json:"lock_repositories,omitempty"` + // ExcludeAttachments indicates whether attachments should be excluded from + // the migration (to reduce migration archive file size). + ExcludeAttachments *bool `json:"exclude_attachments,omitempty"` + URL *string `json:"url,omitempty"` + CreatedAt *string `json:"created_at,omitempty"` + UpdatedAt *string `json:"updated_at,omitempty"` + Repositories []*Repository `json:"repositories,omitempty"` +} + +func (m Migration) String() string { + return Stringify(m) +} + +// MigrationOptions specifies the optional parameters to Migration methods. +type MigrationOptions struct { + // LockRepositories indicates whether repositories should be locked (to prevent + // manipulation) while migrating data. + LockRepositories bool + + // ExcludeAttachments indicates whether attachments should be excluded from + // the migration (to reduce migration archive file size). + ExcludeAttachments bool +} + +// startMigration represents the body of a StartMigration request. +type startMigration struct { + // Repositories is a slice of repository names to migrate. + Repositories []string `json:"repositories,omitempty"` + + // LockRepositories indicates whether repositories should be locked (to prevent + // manipulation) while migrating data. + LockRepositories *bool `json:"lock_repositories,omitempty"` + + // ExcludeAttachments indicates whether attachments should be excluded from + // the migration (to reduce migration archive file size). + ExcludeAttachments *bool `json:"exclude_attachments,omitempty"` +} + +// StartMigration starts the generation of a migration archive. +// repos is a slice of repository names to migrate. +// +// GitHub API docs: https://developer.github.com/v3/migration/migrations/#start-a-migration +func (s *MigrationService) StartMigration(ctx context.Context, org string, repos []string, opt *MigrationOptions) (*Migration, *Response, error) { + u := fmt.Sprintf("orgs/%v/migrations", org) + + body := &startMigration{Repositories: repos} + if opt != nil { + body.LockRepositories = Bool(opt.LockRepositories) + body.ExcludeAttachments = Bool(opt.ExcludeAttachments) + } + + req, err := s.client.NewRequest("POST", u, body) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeMigrationsPreview) + + m := &Migration{} + resp, err := s.client.Do(ctx, req, m) + if err != nil { + return nil, resp, err + } + + return m, resp, nil +} + +// ListMigrations lists the most recent migrations. +// +// GitHub API docs: https://developer.github.com/v3/migration/migrations/#get-a-list-of-migrations +func (s *MigrationService) ListMigrations(ctx context.Context, org string) ([]*Migration, *Response, error) { + u := fmt.Sprintf("orgs/%v/migrations", org) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeMigrationsPreview) + + var m []*Migration + resp, err := s.client.Do(ctx, req, &m) + if err != nil { + return nil, resp, err + } + + return m, resp, nil +} + +// MigrationStatus gets the status of a specific migration archive. +// id is the migration ID. +// +// GitHub API docs: https://developer.github.com/v3/migration/migrations/#get-the-status-of-a-migration +func (s *MigrationService) MigrationStatus(ctx context.Context, org string, id int64) (*Migration, *Response, error) { + u := fmt.Sprintf("orgs/%v/migrations/%v", org, id) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeMigrationsPreview) + + m := &Migration{} + resp, err := s.client.Do(ctx, req, m) + if err != nil { + return nil, resp, err + } + + return m, resp, nil +} + +// MigrationArchiveURL fetches a migration archive URL. +// id is the migration ID. +// +// GitHub API docs: https://developer.github.com/v3/migration/migrations/#download-a-migration-archive +func (s *MigrationService) MigrationArchiveURL(ctx context.Context, org string, id int64) (url string, err error) { + u := fmt.Sprintf("orgs/%v/migrations/%v/archive", org, id) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return "", err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeMigrationsPreview) + + s.client.clientMu.Lock() + defer s.client.clientMu.Unlock() + + // Disable the redirect mechanism because AWS fails if the GitHub auth token is provided. + var loc string + saveRedirect := s.client.client.CheckRedirect + s.client.client.CheckRedirect = func(req *http.Request, via []*http.Request) error { + loc = req.URL.String() + return errors.New("disable redirect") + } + defer func() { s.client.client.CheckRedirect = saveRedirect }() + + _, err = s.client.Do(ctx, req, nil) // expect error from disable redirect + if err == nil { + return "", errors.New("expected redirect, none provided") + } + if !strings.Contains(err.Error(), "disable redirect") { + return "", err + } + return loc, nil +} + +// DeleteMigration deletes a previous migration archive. +// id is the migration ID. +// +// GitHub API docs: https://developer.github.com/v3/migration/migrations/#delete-a-migration-archive +func (s *MigrationService) DeleteMigration(ctx context.Context, org string, id int64) (*Response, error) { + u := fmt.Sprintf("orgs/%v/migrations/%v/archive", org, id) + + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeMigrationsPreview) + + return s.client.Do(ctx, req, nil) +} + +// UnlockRepo unlocks a repository that was locked for migration. +// id is the migration ID. +// You should unlock each migrated repository and delete them when the migration +// is complete and you no longer need the source data. +// +// GitHub API docs: https://developer.github.com/v3/migration/migrations/#unlock-a-repository +func (s *MigrationService) UnlockRepo(ctx context.Context, org string, id int64, repo string) (*Response, error) { + u := fmt.Sprintf("orgs/%v/migrations/%v/repos/%v/lock", org, id, repo) + + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeMigrationsPreview) + + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/migrations_source_import.go b/vendor/github.com/google/go-github/github/migrations_source_import.go new file mode 100644 index 00000000..fd45e780 --- /dev/null +++ b/vendor/github.com/google/go-github/github/migrations_source_import.go @@ -0,0 +1,329 @@ +// Copyright 2016 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// Import represents a repository import request. +type Import struct { + // The URL of the originating repository. + VCSURL *string `json:"vcs_url,omitempty"` + // The originating VCS type. Can be one of 'subversion', 'git', + // 'mercurial', or 'tfvc'. Without this parameter, the import job will + // take additional time to detect the VCS type before beginning the + // import. This detection step will be reflected in the response. + VCS *string `json:"vcs,omitempty"` + // VCSUsername and VCSPassword are only used for StartImport calls that + // are importing a password-protected repository. + VCSUsername *string `json:"vcs_username,omitempty"` + VCSPassword *string `json:"vcs_password,omitempty"` + // For a tfvc import, the name of the project that is being imported. + TFVCProject *string `json:"tfvc_project,omitempty"` + + // LFS related fields that may be preset in the Import Progress response + + // Describes whether the import has been opted in or out of using Git + // LFS. The value can be 'opt_in', 'opt_out', or 'undecided' if no + // action has been taken. + UseLFS *string `json:"use_lfs,omitempty"` + // Describes whether files larger than 100MB were found during the + // importing step. + HasLargeFiles *bool `json:"has_large_files,omitempty"` + // The total size in gigabytes of files larger than 100MB found in the + // originating repository. + LargeFilesSize *int `json:"large_files_size,omitempty"` + // The total number of files larger than 100MB found in the originating + // repository. To see a list of these files, call LargeFiles. + LargeFilesCount *int `json:"large_files_count,omitempty"` + + // Identifies the current status of an import. An import that does not + // have errors will progress through these steps: + // + // detecting - the "detection" step of the import is in progress + // because the request did not include a VCS parameter. The + // import is identifying the type of source control present at + // the URL. + // importing - the "raw" step of the import is in progress. This is + // where commit data is fetched from the original repository. + // The import progress response will include CommitCount (the + // total number of raw commits that will be imported) and + // Percent (0 - 100, the current progress through the import). + // mapping - the "rewrite" step of the import is in progress. This + // is where SVN branches are converted to Git branches, and + // where author updates are applied. The import progress + // response does not include progress information. + // pushing - the "push" step of the import is in progress. This is + // where the importer updates the repository on GitHub. The + // import progress response will include PushPercent, which is + // the percent value reported by git push when it is "Writing + // objects". + // complete - the import is complete, and the repository is ready + // on GitHub. + // + // If there are problems, you will see one of these in the status field: + // + // auth_failed - the import requires authentication in order to + // connect to the original repository. Make an UpdateImport + // request, and include VCSUsername and VCSPassword. + // error - the import encountered an error. The import progress + // response will include the FailedStep and an error message. + // Contact GitHub support for more information. + // detection_needs_auth - the importer requires authentication for + // the originating repository to continue detection. Make an + // UpdatImport request, and include VCSUsername and + // VCSPassword. + // detection_found_nothing - the importer didn't recognize any + // source control at the URL. + // detection_found_multiple - the importer found several projects + // or repositories at the provided URL. When this is the case, + // the Import Progress response will also include a + // ProjectChoices field with the possible project choices as + // values. Make an UpdateImport request, and include VCS and + // (if applicable) TFVCProject. + Status *string `json:"status,omitempty"` + CommitCount *int `json:"commit_count,omitempty"` + StatusText *string `json:"status_text,omitempty"` + AuthorsCount *int `json:"authors_count,omitempty"` + Percent *int `json:"percent,omitempty"` + PushPercent *int `json:"push_percent,omitempty"` + URL *string `json:"url,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` + AuthorsURL *string `json:"authors_url,omitempty"` + RepositoryURL *string `json:"repository_url,omitempty"` + Message *string `json:"message,omitempty"` + FailedStep *string `json:"failed_step,omitempty"` + + // Human readable display name, provided when the Import appears as + // part of ProjectChoices. + HumanName *string `json:"human_name,omitempty"` + + // When the importer finds several projects or repositories at the + // provided URLs, this will identify the available choices. Call + // UpdateImport with the selected Import value. + ProjectChoices []Import `json:"project_choices,omitempty"` +} + +func (i Import) String() string { + return Stringify(i) +} + +// SourceImportAuthor identifies an author imported from a source repository. +// +// GitHub API docs: https://developer.github.com/v3/migration/source_imports/#get-commit-authors +type SourceImportAuthor struct { + ID *int64 `json:"id,omitempty"` + RemoteID *string `json:"remote_id,omitempty"` + RemoteName *string `json:"remote_name,omitempty"` + Email *string `json:"email,omitempty"` + Name *string `json:"name,omitempty"` + URL *string `json:"url,omitempty"` + ImportURL *string `json:"import_url,omitempty"` +} + +func (a SourceImportAuthor) String() string { + return Stringify(a) +} + +// LargeFile identifies a file larger than 100MB found during a repository import. +// +// GitHub API docs: https://developer.github.com/v3/migration/source_imports/#get-large-files +type LargeFile struct { + RefName *string `json:"ref_name,omitempty"` + Path *string `json:"path,omitempty"` + OID *string `json:"oid,omitempty"` + Size *int `json:"size,omitempty"` +} + +func (f LargeFile) String() string { + return Stringify(f) +} + +// StartImport initiates a repository import. +// +// GitHub API docs: https://developer.github.com/v3/migration/source_imports/#start-an-import +func (s *MigrationService) StartImport(ctx context.Context, owner, repo string, in *Import) (*Import, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/import", owner, repo) + req, err := s.client.NewRequest("PUT", u, in) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypeImportPreview) + + out := new(Import) + resp, err := s.client.Do(ctx, req, out) + if err != nil { + return nil, resp, err + } + + return out, resp, nil +} + +// ImportProgress queries for the status and progress of an ongoing repository import. +// +// GitHub API docs: https://developer.github.com/v3/migration/source_imports/#get-import-progress +func (s *MigrationService) ImportProgress(ctx context.Context, owner, repo string) (*Import, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/import", owner, repo) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypeImportPreview) + + out := new(Import) + resp, err := s.client.Do(ctx, req, out) + if err != nil { + return nil, resp, err + } + + return out, resp, nil +} + +// UpdateImport initiates a repository import. +// +// GitHub API docs: https://developer.github.com/v3/migration/source_imports/#update-existing-import +func (s *MigrationService) UpdateImport(ctx context.Context, owner, repo string, in *Import) (*Import, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/import", owner, repo) + req, err := s.client.NewRequest("PATCH", u, in) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypeImportPreview) + + out := new(Import) + resp, err := s.client.Do(ctx, req, out) + if err != nil { + return nil, resp, err + } + + return out, resp, nil +} + +// CommitAuthors gets the authors mapped from the original repository. +// +// Each type of source control system represents authors in a different way. +// For example, a Git commit author has a display name and an email address, +// but a Subversion commit author just has a username. The GitHub Importer will +// make the author information valid, but the author might not be correct. For +// example, it will change the bare Subversion username "hubot" into something +// like "hubot ". +// +// This method and MapCommitAuthor allow you to provide correct Git author +// information. +// +// GitHub API docs: https://developer.github.com/v3/migration/source_imports/#get-commit-authors +func (s *MigrationService) CommitAuthors(ctx context.Context, owner, repo string) ([]*SourceImportAuthor, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/import/authors", owner, repo) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypeImportPreview) + + var authors []*SourceImportAuthor + resp, err := s.client.Do(ctx, req, &authors) + if err != nil { + return nil, resp, err + } + + return authors, resp, nil +} + +// MapCommitAuthor updates an author's identity for the import. Your +// application can continue updating authors any time before you push new +// commits to the repository. +// +// GitHub API docs: https://developer.github.com/v3/migration/source_imports/#map-a-commit-author +func (s *MigrationService) MapCommitAuthor(ctx context.Context, owner, repo string, id int64, author *SourceImportAuthor) (*SourceImportAuthor, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/import/authors/%v", owner, repo, id) + req, err := s.client.NewRequest("PATCH", u, author) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypeImportPreview) + + out := new(SourceImportAuthor) + resp, err := s.client.Do(ctx, req, out) + if err != nil { + return nil, resp, err + } + + return out, resp, nil +} + +// SetLFSPreference sets whether imported repositories should use Git LFS for +// files larger than 100MB. Only the UseLFS field on the provided Import is +// used. +// +// GitHub API docs: https://developer.github.com/v3/migration/source_imports/#set-git-lfs-preference +func (s *MigrationService) SetLFSPreference(ctx context.Context, owner, repo string, in *Import) (*Import, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/import/lfs", owner, repo) + req, err := s.client.NewRequest("PATCH", u, in) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypeImportPreview) + + out := new(Import) + resp, err := s.client.Do(ctx, req, out) + if err != nil { + return nil, resp, err + } + + return out, resp, nil +} + +// LargeFiles lists files larger than 100MB found during the import. +// +// GitHub API docs: https://developer.github.com/v3/migration/source_imports/#get-large-files +func (s *MigrationService) LargeFiles(ctx context.Context, owner, repo string) ([]*LargeFile, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/import/large_files", owner, repo) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypeImportPreview) + + var files []*LargeFile + resp, err := s.client.Do(ctx, req, &files) + if err != nil { + return nil, resp, err + } + + return files, resp, nil +} + +// CancelImport stops an import for a repository. +// +// GitHub API docs: https://developer.github.com/v3/migration/source_imports/#cancel-an-import +func (s *MigrationService) CancelImport(ctx context.Context, owner, repo string) (*Response, error) { + u := fmt.Sprintf("repos/%v/%v/import", owner, repo) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypeImportPreview) + + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/misc.go b/vendor/github.com/google/go-github/github/misc.go new file mode 100644 index 00000000..e9b0ea22 --- /dev/null +++ b/vendor/github.com/google/go-github/github/misc.go @@ -0,0 +1,257 @@ +// Copyright 2014 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "bytes" + "context" + "fmt" + "net/url" +) + +// MarkdownOptions specifies optional parameters to the Markdown method. +type MarkdownOptions struct { + // Mode identifies the rendering mode. Possible values are: + // markdown - render a document as plain Markdown, just like + // README files are rendered. + // + // gfm - to render a document as user-content, e.g. like user + // comments or issues are rendered. In GFM mode, hard line breaks are + // always taken into account, and issue and user mentions are linked + // accordingly. + // + // Default is "markdown". + Mode string + + // Context identifies the repository context. Only taken into account + // when rendering as "gfm". + Context string +} + +type markdownRequest struct { + Text *string `json:"text,omitempty"` + Mode *string `json:"mode,omitempty"` + Context *string `json:"context,omitempty"` +} + +// Markdown renders an arbitrary Markdown document. +// +// GitHub API docs: https://developer.github.com/v3/markdown/ +func (c *Client) Markdown(ctx context.Context, text string, opt *MarkdownOptions) (string, *Response, error) { + request := &markdownRequest{Text: String(text)} + if opt != nil { + if opt.Mode != "" { + request.Mode = String(opt.Mode) + } + if opt.Context != "" { + request.Context = String(opt.Context) + } + } + + req, err := c.NewRequest("POST", "markdown", request) + if err != nil { + return "", nil, err + } + + buf := new(bytes.Buffer) + resp, err := c.Do(ctx, req, buf) + if err != nil { + return "", resp, err + } + + return buf.String(), resp, nil +} + +// ListEmojis returns the emojis available to use on GitHub. +// +// GitHub API docs: https://developer.github.com/v3/emojis/ +func (c *Client) ListEmojis(ctx context.Context) (map[string]string, *Response, error) { + req, err := c.NewRequest("GET", "emojis", nil) + if err != nil { + return nil, nil, err + } + + var emoji map[string]string + resp, err := c.Do(ctx, req, &emoji) + if err != nil { + return nil, resp, err + } + + return emoji, resp, nil +} + +// CodeOfConduct represents a code of conduct. +type CodeOfConduct struct { + Name *string `json:"name,omitempty"` + Key *string `json:"key,omitempty"` + URL *string `json:"url,omitempty"` + Body *string `json:"body,omitempty"` +} + +func (c *CodeOfConduct) String() string { + return Stringify(c) +} + +// ListCodesOfConduct returns all codes of conduct. +// +// GitHub API docs: https://developer.github.com/v3/codes_of_conduct/#list-all-codes-of-conduct +func (c *Client) ListCodesOfConduct(ctx context.Context) ([]*CodeOfConduct, *Response, error) { + req, err := c.NewRequest("GET", "codes_of_conduct", nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeCodesOfConductPreview) + + var cs []*CodeOfConduct + resp, err := c.Do(ctx, req, &cs) + if err != nil { + return nil, resp, err + } + + return cs, resp, nil +} + +// GetCodeOfConduct returns an individual code of conduct. +// +// https://developer.github.com/v3/codes_of_conduct/#get-an-individual-code-of-conduct +func (c *Client) GetCodeOfConduct(ctx context.Context, key string) (*CodeOfConduct, *Response, error) { + u := fmt.Sprintf("codes_of_conduct/%s", key) + req, err := c.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeCodesOfConductPreview) + + coc := new(CodeOfConduct) + resp, err := c.Do(ctx, req, coc) + if err != nil { + return nil, resp, err + } + + return coc, resp, nil +} + +// APIMeta represents metadata about the GitHub API. +type APIMeta struct { + // An Array of IP addresses in CIDR format specifying the addresses + // that incoming service hooks will originate from on GitHub.com. + Hooks []string `json:"hooks,omitempty"` + + // An Array of IP addresses in CIDR format specifying the Git servers + // for GitHub.com. + Git []string `json:"git,omitempty"` + + // Whether authentication with username and password is supported. + // (GitHub Enterprise instances using CAS or OAuth for authentication + // will return false. Features like Basic Authentication with a + // username and password, sudo mode, and two-factor authentication are + // not supported on these servers.) + VerifiablePasswordAuthentication *bool `json:"verifiable_password_authentication,omitempty"` + + // An array of IP addresses in CIDR format specifying the addresses + // which serve GitHub Pages websites. + Pages []string `json:"pages,omitempty"` + + // An Array of IP addresses specifying the addresses that source imports + // will originate from on GitHub.com. + Importer []string `json:"importer,omitempty"` +} + +// APIMeta returns information about GitHub.com, the service. Or, if you access +// this endpoint on your organization’s GitHub Enterprise installation, this +// endpoint provides information about that installation. +// +// GitHub API docs: https://developer.github.com/v3/meta/ +func (c *Client) APIMeta(ctx context.Context) (*APIMeta, *Response, error) { + req, err := c.NewRequest("GET", "meta", nil) + if err != nil { + return nil, nil, err + } + + meta := new(APIMeta) + resp, err := c.Do(ctx, req, meta) + if err != nil { + return nil, resp, err + } + + return meta, resp, nil +} + +// Octocat returns an ASCII art octocat with the specified message in a speech +// bubble. If message is empty, a random zen phrase is used. +func (c *Client) Octocat(ctx context.Context, message string) (string, *Response, error) { + u := "octocat" + if message != "" { + u = fmt.Sprintf("%s?s=%s", u, url.QueryEscape(message)) + } + + req, err := c.NewRequest("GET", u, nil) + if err != nil { + return "", nil, err + } + + buf := new(bytes.Buffer) + resp, err := c.Do(ctx, req, buf) + if err != nil { + return "", resp, err + } + + return buf.String(), resp, nil +} + +// Zen returns a random line from The Zen of GitHub. +// +// see also: http://warpspire.com/posts/taste/ +func (c *Client) Zen(ctx context.Context) (string, *Response, error) { + req, err := c.NewRequest("GET", "zen", nil) + if err != nil { + return "", nil, err + } + + buf := new(bytes.Buffer) + resp, err := c.Do(ctx, req, buf) + if err != nil { + return "", resp, err + } + + return buf.String(), resp, nil +} + +// ServiceHook represents a hook that has configuration settings, a list of +// available events, and default events. +type ServiceHook struct { + Name *string `json:"name,omitempty"` + Events []string `json:"events,omitempty"` + SupportedEvents []string `json:"supported_events,omitempty"` + Schema [][]string `json:"schema,omitempty"` +} + +func (s *ServiceHook) String() string { + return Stringify(s) +} + +// ListServiceHooks lists all of the available service hooks. +// +// GitHub API docs: https://developer.github.com/webhooks/#services +func (c *Client) ListServiceHooks(ctx context.Context) ([]*ServiceHook, *Response, error) { + u := "hooks" + req, err := c.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var hooks []*ServiceHook + resp, err := c.Do(ctx, req, &hooks) + if err != nil { + return nil, resp, err + } + + return hooks, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/orgs.go b/vendor/github.com/google/go-github/github/orgs.go new file mode 100644 index 00000000..78320535 --- /dev/null +++ b/vendor/github.com/google/go-github/github/orgs.go @@ -0,0 +1,212 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" + "time" +) + +// OrganizationsService provides access to the organization related functions +// in the GitHub API. +// +// GitHub API docs: https://developer.github.com/v3/orgs/ +type OrganizationsService service + +// Organization represents a GitHub organization account. +type Organization struct { + Login *string `json:"login,omitempty"` + ID *int64 `json:"id,omitempty"` + AvatarURL *string `json:"avatar_url,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` + Name *string `json:"name,omitempty"` + Company *string `json:"company,omitempty"` + Blog *string `json:"blog,omitempty"` + Location *string `json:"location,omitempty"` + Email *string `json:"email,omitempty"` + Description *string `json:"description,omitempty"` + PublicRepos *int `json:"public_repos,omitempty"` + PublicGists *int `json:"public_gists,omitempty"` + Followers *int `json:"followers,omitempty"` + Following *int `json:"following,omitempty"` + CreatedAt *time.Time `json:"created_at,omitempty"` + UpdatedAt *time.Time `json:"updated_at,omitempty"` + TotalPrivateRepos *int `json:"total_private_repos,omitempty"` + OwnedPrivateRepos *int `json:"owned_private_repos,omitempty"` + PrivateGists *int `json:"private_gists,omitempty"` + DiskUsage *int `json:"disk_usage,omitempty"` + Collaborators *int `json:"collaborators,omitempty"` + BillingEmail *string `json:"billing_email,omitempty"` + Type *string `json:"type,omitempty"` + Plan *Plan `json:"plan,omitempty"` + NodeID *string `json:"node_id,omitempty"` + + // API URLs + URL *string `json:"url,omitempty"` + EventsURL *string `json:"events_url,omitempty"` + HooksURL *string `json:"hooks_url,omitempty"` + IssuesURL *string `json:"issues_url,omitempty"` + MembersURL *string `json:"members_url,omitempty"` + PublicMembersURL *string `json:"public_members_url,omitempty"` + ReposURL *string `json:"repos_url,omitempty"` +} + +func (o Organization) String() string { + return Stringify(o) +} + +// Plan represents the payment plan for an account. See plans at https://github.com/plans. +type Plan struct { + Name *string `json:"name,omitempty"` + Space *int `json:"space,omitempty"` + Collaborators *int `json:"collaborators,omitempty"` + PrivateRepos *int `json:"private_repos,omitempty"` +} + +func (p Plan) String() string { + return Stringify(p) +} + +// OrganizationsListOptions specifies the optional parameters to the +// OrganizationsService.ListAll method. +type OrganizationsListOptions struct { + // Since filters Organizations by ID. + Since int64 `url:"since,omitempty"` + + // Note: Pagination is powered exclusively by the Since parameter, + // ListOptions.Page has no effect. + // ListOptions.PerPage controls an undocumented GitHub API parameter. + ListOptions +} + +// ListAll lists all organizations, in the order that they were created on GitHub. +// +// Note: Pagination is powered exclusively by the since parameter. To continue +// listing the next set of organizations, use the ID of the last-returned organization +// as the opts.Since parameter for the next call. +// +// GitHub API docs: https://developer.github.com/v3/orgs/#list-all-organizations +func (s *OrganizationsService) ListAll(ctx context.Context, opt *OrganizationsListOptions) ([]*Organization, *Response, error) { + u, err := addOptions("organizations", opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + orgs := []*Organization{} + resp, err := s.client.Do(ctx, req, &orgs) + if err != nil { + return nil, resp, err + } + return orgs, resp, nil +} + +// List the organizations for a user. Passing the empty string will list +// organizations for the authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/orgs/#list-user-organizations +func (s *OrganizationsService) List(ctx context.Context, user string, opt *ListOptions) ([]*Organization, *Response, error) { + var u string + if user != "" { + u = fmt.Sprintf("users/%v/orgs", user) + } else { + u = "user/orgs" + } + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + var orgs []*Organization + resp, err := s.client.Do(ctx, req, &orgs) + if err != nil { + return nil, resp, err + } + + return orgs, resp, nil +} + +// Get fetches an organization by name. +// +// GitHub API docs: https://developer.github.com/v3/orgs/#get-an-organization +func (s *OrganizationsService) Get(ctx context.Context, org string) (*Organization, *Response, error) { + u := fmt.Sprintf("orgs/%v", org) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + organization := new(Organization) + resp, err := s.client.Do(ctx, req, organization) + if err != nil { + return nil, resp, err + } + + return organization, resp, nil +} + +// GetByID fetches an organization. +// +// Note: GetByID uses the undocumented GitHub API endpoint /organizations/:id. +func (s *OrganizationsService) GetByID(ctx context.Context, id int64) (*Organization, *Response, error) { + u := fmt.Sprintf("organizations/%d", id) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + organization := new(Organization) + resp, err := s.client.Do(ctx, req, organization) + if err != nil { + return nil, resp, err + } + + return organization, resp, nil +} + +// Edit an organization. +// +// GitHub API docs: https://developer.github.com/v3/orgs/#edit-an-organization +func (s *OrganizationsService) Edit(ctx context.Context, name string, org *Organization) (*Organization, *Response, error) { + u := fmt.Sprintf("orgs/%v", name) + req, err := s.client.NewRequest("PATCH", u, org) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + o := new(Organization) + resp, err := s.client.Do(ctx, req, o) + if err != nil { + return nil, resp, err + } + + return o, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/orgs_hooks.go b/vendor/github.com/google/go-github/github/orgs_hooks.go new file mode 100644 index 00000000..ab1d02da --- /dev/null +++ b/vendor/github.com/google/go-github/github/orgs_hooks.go @@ -0,0 +1,107 @@ +// Copyright 2015 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// ListHooks lists all Hooks for the specified organization. +// +// GitHub API docs: https://developer.github.com/v3/orgs/hooks/#list-hooks +func (s *OrganizationsService) ListHooks(ctx context.Context, org string, opt *ListOptions) ([]*Hook, *Response, error) { + u := fmt.Sprintf("orgs/%v/hooks", org) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var hooks []*Hook + resp, err := s.client.Do(ctx, req, &hooks) + if err != nil { + return nil, resp, err + } + + return hooks, resp, nil +} + +// GetHook returns a single specified Hook. +// +// GitHub API docs: https://developer.github.com/v3/orgs/hooks/#get-single-hook +func (s *OrganizationsService) GetHook(ctx context.Context, org string, id int64) (*Hook, *Response, error) { + u := fmt.Sprintf("orgs/%v/hooks/%d", org, id) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + hook := new(Hook) + resp, err := s.client.Do(ctx, req, hook) + return hook, resp, err +} + +// CreateHook creates a Hook for the specified org. +// Name and Config are required fields. +// +// GitHub API docs: https://developer.github.com/v3/orgs/hooks/#create-a-hook +func (s *OrganizationsService) CreateHook(ctx context.Context, org string, hook *Hook) (*Hook, *Response, error) { + u := fmt.Sprintf("orgs/%v/hooks", org) + req, err := s.client.NewRequest("POST", u, hook) + if err != nil { + return nil, nil, err + } + + h := new(Hook) + resp, err := s.client.Do(ctx, req, h) + if err != nil { + return nil, resp, err + } + + return h, resp, nil +} + +// EditHook updates a specified Hook. +// +// GitHub API docs: https://developer.github.com/v3/orgs/hooks/#edit-a-hook +func (s *OrganizationsService) EditHook(ctx context.Context, org string, id int64, hook *Hook) (*Hook, *Response, error) { + u := fmt.Sprintf("orgs/%v/hooks/%d", org, id) + req, err := s.client.NewRequest("PATCH", u, hook) + if err != nil { + return nil, nil, err + } + h := new(Hook) + resp, err := s.client.Do(ctx, req, h) + return h, resp, err +} + +// PingHook triggers a 'ping' event to be sent to the Hook. +// +// GitHub API docs: https://developer.github.com/v3/orgs/hooks/#ping-a-hook +func (s *OrganizationsService) PingHook(ctx context.Context, org string, id int64) (*Response, error) { + u := fmt.Sprintf("orgs/%v/hooks/%d/pings", org, id) + req, err := s.client.NewRequest("POST", u, nil) + if err != nil { + return nil, err + } + return s.client.Do(ctx, req, nil) +} + +// DeleteHook deletes a specified Hook. +// +// GitHub API docs: https://developer.github.com/v3/orgs/hooks/#delete-a-hook +func (s *OrganizationsService) DeleteHook(ctx context.Context, org string, id int64) (*Response, error) { + u := fmt.Sprintf("orgs/%v/hooks/%d", org, id) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/orgs_members.go b/vendor/github.com/google/go-github/github/orgs_members.go new file mode 100644 index 00000000..98e138e7 --- /dev/null +++ b/vendor/github.com/google/go-github/github/orgs_members.go @@ -0,0 +1,370 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// Membership represents the status of a user's membership in an organization or team. +type Membership struct { + URL *string `json:"url,omitempty"` + + // State is the user's status within the organization or team. + // Possible values are: "active", "pending" + State *string `json:"state,omitempty"` + + // Role identifies the user's role within the organization or team. + // Possible values for organization membership: + // member - non-owner organization member + // admin - organization owner + // + // Possible values for team membership are: + // member - a normal member of the team + // maintainer - a team maintainer. Able to add/remove other team + // members, promote other team members to team + // maintainer, and edit the team’s name and description + Role *string `json:"role,omitempty"` + + // For organization membership, the API URL of the organization. + OrganizationURL *string `json:"organization_url,omitempty"` + + // For organization membership, the organization the membership is for. + Organization *Organization `json:"organization,omitempty"` + + // For organization membership, the user the membership is for. + User *User `json:"user,omitempty"` +} + +func (m Membership) String() string { + return Stringify(m) +} + +// ListMembersOptions specifies optional parameters to the +// OrganizationsService.ListMembers method. +type ListMembersOptions struct { + // If true (or if the authenticated user is not an owner of the + // organization), list only publicly visible members. + PublicOnly bool `url:"-"` + + // Filter members returned in the list. Possible values are: + // 2fa_disabled, all. Default is "all". + Filter string `url:"filter,omitempty"` + + // Role filters members returned by their role in the organization. + // Possible values are: + // all - all members of the organization, regardless of role + // admin - organization owners + // member - non-organization members + // + // Default is "all". + Role string `url:"role,omitempty"` + + ListOptions +} + +// ListMembers lists the members for an organization. If the authenticated +// user is an owner of the organization, this will return both concealed and +// public members, otherwise it will only return public members. +// +// GitHub API docs: https://developer.github.com/v3/orgs/members/#members-list +func (s *OrganizationsService) ListMembers(ctx context.Context, org string, opt *ListMembersOptions) ([]*User, *Response, error) { + var u string + if opt != nil && opt.PublicOnly { + u = fmt.Sprintf("orgs/%v/public_members", org) + } else { + u = fmt.Sprintf("orgs/%v/members", org) + } + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var members []*User + resp, err := s.client.Do(ctx, req, &members) + if err != nil { + return nil, resp, err + } + + return members, resp, nil +} + +// IsMember checks if a user is a member of an organization. +// +// GitHub API docs: https://developer.github.com/v3/orgs/members/#check-membership +func (s *OrganizationsService) IsMember(ctx context.Context, org, user string) (bool, *Response, error) { + u := fmt.Sprintf("orgs/%v/members/%v", org, user) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return false, nil, err + } + + resp, err := s.client.Do(ctx, req, nil) + member, err := parseBoolResponse(err) + return member, resp, err +} + +// IsPublicMember checks if a user is a public member of an organization. +// +// GitHub API docs: https://developer.github.com/v3/orgs/members/#check-public-membership +func (s *OrganizationsService) IsPublicMember(ctx context.Context, org, user string) (bool, *Response, error) { + u := fmt.Sprintf("orgs/%v/public_members/%v", org, user) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return false, nil, err + } + + resp, err := s.client.Do(ctx, req, nil) + member, err := parseBoolResponse(err) + return member, resp, err +} + +// RemoveMember removes a user from all teams of an organization. +// +// GitHub API docs: https://developer.github.com/v3/orgs/members/#remove-a-member +func (s *OrganizationsService) RemoveMember(ctx context.Context, org, user string) (*Response, error) { + u := fmt.Sprintf("orgs/%v/members/%v", org, user) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +// PublicizeMembership publicizes a user's membership in an organization. (A +// user cannot publicize the membership for another user.) +// +// GitHub API docs: https://developer.github.com/v3/orgs/members/#publicize-a-users-membership +func (s *OrganizationsService) PublicizeMembership(ctx context.Context, org, user string) (*Response, error) { + u := fmt.Sprintf("orgs/%v/public_members/%v", org, user) + req, err := s.client.NewRequest("PUT", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +// ConcealMembership conceals a user's membership in an organization. +// +// GitHub API docs: https://developer.github.com/v3/orgs/members/#conceal-a-users-membership +func (s *OrganizationsService) ConcealMembership(ctx context.Context, org, user string) (*Response, error) { + u := fmt.Sprintf("orgs/%v/public_members/%v", org, user) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +// ListOrgMembershipsOptions specifies optional parameters to the +// OrganizationsService.ListOrgMemberships method. +type ListOrgMembershipsOptions struct { + // Filter memberships to include only those with the specified state. + // Possible values are: "active", "pending". + State string `url:"state,omitempty"` + + ListOptions +} + +// ListOrgMemberships lists the organization memberships for the authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/orgs/members/#list-your-organization-memberships +func (s *OrganizationsService) ListOrgMemberships(ctx context.Context, opt *ListOrgMembershipsOptions) ([]*Membership, *Response, error) { + u := "user/memberships/orgs" + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var memberships []*Membership + resp, err := s.client.Do(ctx, req, &memberships) + if err != nil { + return nil, resp, err + } + + return memberships, resp, nil +} + +// GetOrgMembership gets the membership for a user in a specified organization. +// Passing an empty string for user will get the membership for the +// authenticated user. +// +// GitHub API docs: +// https://developer.github.com/v3/orgs/members/#get-organization-membership +// https://developer.github.com/v3/orgs/members/#get-your-organization-membership +func (s *OrganizationsService) GetOrgMembership(ctx context.Context, user, org string) (*Membership, *Response, error) { + var u string + if user != "" { + u = fmt.Sprintf("orgs/%v/memberships/%v", org, user) + } else { + u = fmt.Sprintf("user/memberships/orgs/%v", org) + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + membership := new(Membership) + resp, err := s.client.Do(ctx, req, membership) + if err != nil { + return nil, resp, err + } + + return membership, resp, nil +} + +// EditOrgMembership edits the membership for user in specified organization. +// Passing an empty string for user will edit the membership for the +// authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/orgs/members/#add-or-update-organization-membership +// GitHub API docs: https://developer.github.com/v3/orgs/members/#edit-your-organization-membership +func (s *OrganizationsService) EditOrgMembership(ctx context.Context, user, org string, membership *Membership) (*Membership, *Response, error) { + var u, method string + if user != "" { + u = fmt.Sprintf("orgs/%v/memberships/%v", org, user) + method = "PUT" + } else { + u = fmt.Sprintf("user/memberships/orgs/%v", org) + method = "PATCH" + } + + req, err := s.client.NewRequest(method, u, membership) + if err != nil { + return nil, nil, err + } + + m := new(Membership) + resp, err := s.client.Do(ctx, req, m) + if err != nil { + return nil, resp, err + } + + return m, resp, nil +} + +// RemoveOrgMembership removes user from the specified organization. If the +// user has been invited to the organization, this will cancel their invitation. +// +// GitHub API docs: https://developer.github.com/v3/orgs/members/#remove-organization-membership +func (s *OrganizationsService) RemoveOrgMembership(ctx context.Context, user, org string) (*Response, error) { + u := fmt.Sprintf("orgs/%v/memberships/%v", org, user) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +// ListPendingOrgInvitations returns a list of pending invitations. +// +// GitHub API docs: https://developer.github.com/v3/orgs/members/#list-pending-organization-invitations +func (s *OrganizationsService) ListPendingOrgInvitations(ctx context.Context, org string, opt *ListOptions) ([]*Invitation, *Response, error) { + u := fmt.Sprintf("orgs/%v/invitations", org) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var pendingInvitations []*Invitation + resp, err := s.client.Do(ctx, req, &pendingInvitations) + if err != nil { + return nil, resp, err + } + return pendingInvitations, resp, nil +} + +// CreateOrgInvitationOptions specifies the parameters to the OrganizationService.Invite +// method. +type CreateOrgInvitationOptions struct { + // GitHub user ID for the person you are inviting. Not required if you provide Email. + InviteeID *int64 `json:"invitee_id,omitempty"` + // Email address of the person you are inviting, which can be an existing GitHub user. + // Not required if you provide InviteeID + Email *string `json:"email,omitempty"` + // Specify role for new member. Can be one of: + // * admin - Organization owners with full administrative rights to the + // organization and complete access to all repositories and teams. + // * direct_member - Non-owner organization members with ability to see + // other members and join teams by invitation. + // * billing_manager - Non-owner organization members with ability to + // manage the billing settings of your organization. + // Default is "direct_member". + Role *string `json:"role"` + TeamID []int64 `json:"team_ids"` +} + +// CreateOrgInvitation invites people to an organization by using their GitHub user ID or their email address. +// In order to create invitations in an organization, +// the authenticated user must be an organization owner. +// +// https://developer.github.com/v3/orgs/members/#create-organization-invitation +func (s *OrganizationsService) CreateOrgInvitation(ctx context.Context, org string, opt *CreateOrgInvitationOptions) (*Invitation, *Response, error) { + u := fmt.Sprintf("orgs/%v/invitations", org) + + req, err := s.client.NewRequest("POST", u, opt) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeOrganizationInvitationPreview) + + var invitation *Invitation + resp, err := s.client.Do(ctx, req, &invitation) + if err != nil { + return nil, resp, err + } + return invitation, resp, nil +} + +// ListOrgInvitationTeams lists all teams associated with an invitation. In order to see invitations in an organization, +// the authenticated user must be an organization owner. +// +// GitHub API docs: https://developer.github.com/v3/orgs/members/#list-organization-invitation-teams +func (s *OrganizationsService) ListOrgInvitationTeams(ctx context.Context, org, invitationID string, opt *ListOptions) ([]*Team, *Response, error) { + u := fmt.Sprintf("orgs/%v/invitations/%v/teams", org, invitationID) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeOrganizationInvitationPreview) + + var orgInvitationTeams []*Team + resp, err := s.client.Do(ctx, req, &orgInvitationTeams) + if err != nil { + return nil, resp, err + } + return orgInvitationTeams, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/orgs_outside_collaborators.go b/vendor/github.com/google/go-github/github/orgs_outside_collaborators.go new file mode 100644 index 00000000..85ffd05f --- /dev/null +++ b/vendor/github.com/google/go-github/github/orgs_outside_collaborators.go @@ -0,0 +1,81 @@ +// Copyright 2017 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// ListOutsideCollaboratorsOptions specifies optional parameters to the +// OrganizationsService.ListOutsideCollaborators method. +type ListOutsideCollaboratorsOptions struct { + // Filter outside collaborators returned in the list. Possible values are: + // 2fa_disabled, all. Default is "all". + Filter string `url:"filter,omitempty"` + + ListOptions +} + +// ListOutsideCollaborators lists outside collaborators of organization's repositories. +// This will only work if the authenticated +// user is an owner of the organization. +// +// Warning: The API may change without advance notice during the preview period. +// Preview features are not supported for production use. +// +// GitHub API docs: https://developer.github.com/v3/orgs/outside_collaborators/#list-outside-collaborators +func (s *OrganizationsService) ListOutsideCollaborators(ctx context.Context, org string, opt *ListOutsideCollaboratorsOptions) ([]*User, *Response, error) { + u := fmt.Sprintf("orgs/%v/outside_collaborators", org) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var members []*User + resp, err := s.client.Do(ctx, req, &members) + if err != nil { + return nil, resp, err + } + + return members, resp, nil +} + +// RemoveOutsideCollaborator removes a user from the list of outside collaborators; +// consequently, removing them from all the organization's repositories. +// +// GitHub API docs: https://developer.github.com/v3/orgs/outside_collaborators/#remove-outside-collaborator +func (s *OrganizationsService) RemoveOutsideCollaborator(ctx context.Context, org string, user string) (*Response, error) { + u := fmt.Sprintf("orgs/%v/outside_collaborators/%v", org, user) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +// ConvertMemberToOutsideCollaborator reduces the permission level of a member of the +// organization to that of an outside collaborator. Therefore, they will only +// have access to the repositories that their current team membership allows. +// Responses for converting a non-member or the last owner to an outside collaborator +// are listed in GitHub API docs. +// +// GitHub API docs: https://developer.github.com/v3/orgs/outside_collaborators/#convert-member-to-outside-collaborator +func (s *OrganizationsService) ConvertMemberToOutsideCollaborator(ctx context.Context, org string, user string) (*Response, error) { + u := fmt.Sprintf("orgs/%v/outside_collaborators/%v", org, user) + req, err := s.client.NewRequest("PUT", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/orgs_projects.go b/vendor/github.com/google/go-github/github/orgs_projects.go new file mode 100644 index 00000000..e57cba97 --- /dev/null +++ b/vendor/github.com/google/go-github/github/orgs_projects.go @@ -0,0 +1,60 @@ +// Copyright 2017 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// ListProjects lists the projects for an organization. +// +// GitHub API docs: https://developer.github.com/v3/projects/#list-organization-projects +func (s *OrganizationsService) ListProjects(ctx context.Context, org string, opt *ProjectListOptions) ([]*Project, *Response, error) { + u := fmt.Sprintf("orgs/%v/projects", org) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeProjectsPreview) + + var projects []*Project + resp, err := s.client.Do(ctx, req, &projects) + if err != nil { + return nil, resp, err + } + + return projects, resp, nil +} + +// CreateProject creates a GitHub Project for the specified organization. +// +// GitHub API docs: https://developer.github.com/v3/projects/#create-an-organization-project +func (s *OrganizationsService) CreateProject(ctx context.Context, org string, opt *ProjectOptions) (*Project, *Response, error) { + u := fmt.Sprintf("orgs/%v/projects", org) + req, err := s.client.NewRequest("POST", u, opt) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeProjectsPreview) + + project := &Project{} + resp, err := s.client.Do(ctx, req, project) + if err != nil { + return nil, resp, err + } + + return project, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/orgs_teams.go b/vendor/github.com/google/go-github/github/orgs_teams.go new file mode 100644 index 00000000..b3cc9f07 --- /dev/null +++ b/vendor/github.com/google/go-github/github/orgs_teams.go @@ -0,0 +1,514 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" + "strings" + "time" +) + +// Team represents a team within a GitHub organization. Teams are used to +// manage access to an organization's repositories. +type Team struct { + ID *int64 `json:"id,omitempty"` + Name *string `json:"name,omitempty"` + Description *string `json:"description,omitempty"` + URL *string `json:"url,omitempty"` + Slug *string `json:"slug,omitempty"` + + // Permission specifies the default permission for repositories owned by the team. + Permission *string `json:"permission,omitempty"` + + // Privacy identifies the level of privacy this team should have. + // Possible values are: + // secret - only visible to organization owners and members of this team + // closed - visible to all members of this organization + // Default is "secret". + Privacy *string `json:"privacy,omitempty"` + + MembersCount *int `json:"members_count,omitempty"` + ReposCount *int `json:"repos_count,omitempty"` + Organization *Organization `json:"organization,omitempty"` + MembersURL *string `json:"members_url,omitempty"` + RepositoriesURL *string `json:"repositories_url,omitempty"` + Parent *Team `json:"parent,omitempty"` + + // LDAPDN is only available in GitHub Enterprise and when the team + // membership is synchronized with LDAP. + LDAPDN *string `json:"ldap_dn,omitempty"` +} + +func (t Team) String() string { + return Stringify(t) +} + +// Invitation represents a team member's invitation status. +type Invitation struct { + ID *int64 `json:"id,omitempty"` + Login *string `json:"login,omitempty"` + Email *string `json:"email,omitempty"` + // Role can be one of the values - 'direct_member', 'admin', 'billing_manager', 'hiring_manager', or 'reinstate'. + Role *string `json:"role,omitempty"` + CreatedAt *time.Time `json:"created_at,omitempty"` + Inviter *User `json:"inviter,omitempty"` + TeamCount *int `json:"team_count,omitempty"` + InvitationTeamURL *string `json:"invitation_team_url,omitempty"` +} + +func (i Invitation) String() string { + return Stringify(i) +} + +// ListTeams lists all of the teams for an organization. +// +// GitHub API docs: https://developer.github.com/v3/orgs/teams/#list-teams +func (s *OrganizationsService) ListTeams(ctx context.Context, org string, opt *ListOptions) ([]*Team, *Response, error) { + u := fmt.Sprintf("orgs/%v/teams", org) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeNestedTeamsPreview) + + var teams []*Team + resp, err := s.client.Do(ctx, req, &teams) + if err != nil { + return nil, resp, err + } + + return teams, resp, nil +} + +// GetTeam fetches a team by ID. +// +// GitHub API docs: https://developer.github.com/v3/orgs/teams/#get-team +func (s *OrganizationsService) GetTeam(ctx context.Context, team int64) (*Team, *Response, error) { + u := fmt.Sprintf("teams/%v", team) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeNestedTeamsPreview) + + t := new(Team) + resp, err := s.client.Do(ctx, req, t) + if err != nil { + return nil, resp, err + } + + return t, resp, nil +} + +// NewTeam represents a team to be created or modified. +type NewTeam struct { + Name string `json:"name"` // Name of the team. (Required.) + Description *string `json:"description,omitempty"` + Maintainers []string `json:"maintainers,omitempty"` + RepoNames []string `json:"repo_names,omitempty"` + ParentTeamID *int64 `json:"parent_team_id,omitempty"` + + // Deprecated: Permission is deprecated when creating or editing a team in an org + // using the new GitHub permission model. It no longer identifies the + // permission a team has on its repos, but only specifies the default + // permission a repo is initially added with. Avoid confusion by + // specifying a permission value when calling AddTeamRepo. + Permission *string `json:"permission,omitempty"` + + // Privacy identifies the level of privacy this team should have. + // Possible values are: + // secret - only visible to organization owners and members of this team + // closed - visible to all members of this organization + // Default is "secret". + Privacy *string `json:"privacy,omitempty"` + + // LDAPDN may be used in GitHub Enterprise when the team membership + // is synchronized with LDAP. + LDAPDN *string `json:"ldap_dn,omitempty"` +} + +func (s NewTeam) String() string { + return Stringify(s) +} + +// CreateTeam creates a new team within an organization. +// +// GitHub API docs: https://developer.github.com/v3/orgs/teams/#create-team +func (s *OrganizationsService) CreateTeam(ctx context.Context, org string, team *NewTeam) (*Team, *Response, error) { + u := fmt.Sprintf("orgs/%v/teams", org) + req, err := s.client.NewRequest("POST", u, team) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeNestedTeamsPreview) + + t := new(Team) + resp, err := s.client.Do(ctx, req, t) + if err != nil { + return nil, resp, err + } + + return t, resp, nil +} + +// EditTeam edits a team. +// +// GitHub API docs: https://developer.github.com/v3/orgs/teams/#edit-team +func (s *OrganizationsService) EditTeam(ctx context.Context, id int64, team *NewTeam) (*Team, *Response, error) { + u := fmt.Sprintf("teams/%v", id) + req, err := s.client.NewRequest("PATCH", u, team) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeNestedTeamsPreview) + + t := new(Team) + resp, err := s.client.Do(ctx, req, t) + if err != nil { + return nil, resp, err + } + + return t, resp, nil +} + +// DeleteTeam deletes a team. +// +// GitHub API docs: https://developer.github.com/v3/orgs/teams/#delete-team +func (s *OrganizationsService) DeleteTeam(ctx context.Context, team int64) (*Response, error) { + u := fmt.Sprintf("teams/%v", team) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + req.Header.Set("Accept", mediaTypeNestedTeamsPreview) + + return s.client.Do(ctx, req, nil) +} + +// OrganizationListTeamMembersOptions specifies the optional parameters to the +// OrganizationsService.ListTeamMembers method. +type OrganizationListTeamMembersOptions struct { + // Role filters members returned by their role in the team. Possible + // values are "all", "member", "maintainer". Default is "all". + Role string `url:"role,omitempty"` + + ListOptions +} + +// ListChildTeams lists child teams for a team. +// +// GitHub API docs: https://developer.github.com/v3/orgs/teams/#list-child-teams +func (s *OrganizationsService) ListChildTeams(ctx context.Context, teamID int64, opt *ListOptions) ([]*Team, *Response, error) { + u := fmt.Sprintf("teams/%v/teams", teamID) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + req.Header.Set("Accept", mediaTypeNestedTeamsPreview) + + var teams []*Team + resp, err := s.client.Do(ctx, req, &teams) + if err != nil { + return nil, resp, err + } + + return teams, resp, nil +} + +// ListTeamMembers lists all of the users who are members of the specified +// team. +// +// GitHub API docs: https://developer.github.com/v3/orgs/teams/#list-team-members +func (s *OrganizationsService) ListTeamMembers(ctx context.Context, team int64, opt *OrganizationListTeamMembersOptions) ([]*User, *Response, error) { + u := fmt.Sprintf("teams/%v/members", team) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + req.Header.Set("Accept", mediaTypeNestedTeamsPreview) + + var members []*User + resp, err := s.client.Do(ctx, req, &members) + if err != nil { + return nil, resp, err + } + + return members, resp, nil +} + +// IsTeamMember checks if a user is a member of the specified team. +// +// GitHub API docs: https://developer.github.com/v3/orgs/teams/#get-team-member +// +// Deprecated: This API has been marked as deprecated in the Github API docs, +// OrganizationsService.GetTeamMembership method should be used instead. +func (s *OrganizationsService) IsTeamMember(ctx context.Context, team int64, user string) (bool, *Response, error) { + u := fmt.Sprintf("teams/%v/members/%v", team, user) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return false, nil, err + } + + resp, err := s.client.Do(ctx, req, nil) + member, err := parseBoolResponse(err) + return member, resp, err +} + +// ListTeamRepos lists the repositories that the specified team has access to. +// +// GitHub API docs: https://developer.github.com/v3/orgs/teams/#list-team-repos +func (s *OrganizationsService) ListTeamRepos(ctx context.Context, team int64, opt *ListOptions) ([]*Repository, *Response, error) { + u := fmt.Sprintf("teams/%v/repos", team) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when topics API fully launches. + headers := []string{mediaTypeTopicsPreview, mediaTypeNestedTeamsPreview} + req.Header.Set("Accept", strings.Join(headers, ", ")) + + var repos []*Repository + resp, err := s.client.Do(ctx, req, &repos) + if err != nil { + return nil, resp, err + } + + return repos, resp, nil +} + +// IsTeamRepo checks if a team manages the specified repository. If the +// repository is managed by team, a Repository is returned which includes the +// permissions team has for that repo. +// +// GitHub API docs: https://developer.github.com/v3/orgs/teams/#check-if-a-team-manages-a-repository +func (s *OrganizationsService) IsTeamRepo(ctx context.Context, team int64, owner string, repo string) (*Repository, *Response, error) { + u := fmt.Sprintf("teams/%v/repos/%v/%v", team, owner, repo) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + headers := []string{mediaTypeOrgPermissionRepo, mediaTypeNestedTeamsPreview} + req.Header.Set("Accept", strings.Join(headers, ", ")) + + repository := new(Repository) + resp, err := s.client.Do(ctx, req, repository) + if err != nil { + return nil, resp, err + } + + return repository, resp, nil +} + +// OrganizationAddTeamRepoOptions specifies the optional parameters to the +// OrganizationsService.AddTeamRepo method. +type OrganizationAddTeamRepoOptions struct { + // Permission specifies the permission to grant the team on this repository. + // Possible values are: + // pull - team members can pull, but not push to or administer this repository + // push - team members can pull and push, but not administer this repository + // admin - team members can pull, push and administer this repository + // + // If not specified, the team's permission attribute will be used. + Permission string `json:"permission,omitempty"` +} + +// AddTeamRepo adds a repository to be managed by the specified team. The +// specified repository must be owned by the organization to which the team +// belongs, or a direct fork of a repository owned by the organization. +// +// GitHub API docs: https://developer.github.com/v3/orgs/teams/#add-team-repo +func (s *OrganizationsService) AddTeamRepo(ctx context.Context, team int64, owner string, repo string, opt *OrganizationAddTeamRepoOptions) (*Response, error) { + u := fmt.Sprintf("teams/%v/repos/%v/%v", team, owner, repo) + req, err := s.client.NewRequest("PUT", u, opt) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +// RemoveTeamRepo removes a repository from being managed by the specified +// team. Note that this does not delete the repository, it just removes it +// from the team. +// +// GitHub API docs: https://developer.github.com/v3/orgs/teams/#remove-team-repo +func (s *OrganizationsService) RemoveTeamRepo(ctx context.Context, team int64, owner string, repo string) (*Response, error) { + u := fmt.Sprintf("teams/%v/repos/%v/%v", team, owner, repo) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +// ListUserTeams lists a user's teams +// GitHub API docs: https://developer.github.com/v3/orgs/teams/#list-user-teams +func (s *OrganizationsService) ListUserTeams(ctx context.Context, opt *ListOptions) ([]*Team, *Response, error) { + u := "user/teams" + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeNestedTeamsPreview) + + var teams []*Team + resp, err := s.client.Do(ctx, req, &teams) + if err != nil { + return nil, resp, err + } + + return teams, resp, nil +} + +// GetTeamMembership returns the membership status for a user in a team. +// +// GitHub API docs: https://developer.github.com/v3/orgs/teams/#get-team-membership +func (s *OrganizationsService) GetTeamMembership(ctx context.Context, team int64, user string) (*Membership, *Response, error) { + u := fmt.Sprintf("teams/%v/memberships/%v", team, user) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + req.Header.Set("Accept", mediaTypeNestedTeamsPreview) + + t := new(Membership) + resp, err := s.client.Do(ctx, req, t) + if err != nil { + return nil, resp, err + } + + return t, resp, nil +} + +// OrganizationAddTeamMembershipOptions does stuff specifies the optional +// parameters to the OrganizationsService.AddTeamMembership method. +type OrganizationAddTeamMembershipOptions struct { + // Role specifies the role the user should have in the team. Possible + // values are: + // member - a normal member of the team + // maintainer - a team maintainer. Able to add/remove other team + // members, promote other team members to team + // maintainer, and edit the team’s name and description + // + // Default value is "member". + Role string `json:"role,omitempty"` +} + +// AddTeamMembership adds or invites a user to a team. +// +// In order to add a membership between a user and a team, the authenticated +// user must have 'admin' permissions to the team or be an owner of the +// organization that the team is associated with. +// +// If the user is already a part of the team's organization (meaning they're on +// at least one other team in the organization), this endpoint will add the +// user to the team. +// +// If the user is completely unaffiliated with the team's organization (meaning +// they're on none of the organization's teams), this endpoint will send an +// invitation to the user via email. This newly-created membership will be in +// the "pending" state until the user accepts the invitation, at which point +// the membership will transition to the "active" state and the user will be +// added as a member of the team. +// +// GitHub API docs: https://developer.github.com/v3/orgs/teams/#add-team-membership +func (s *OrganizationsService) AddTeamMembership(ctx context.Context, team int64, user string, opt *OrganizationAddTeamMembershipOptions) (*Membership, *Response, error) { + u := fmt.Sprintf("teams/%v/memberships/%v", team, user) + req, err := s.client.NewRequest("PUT", u, opt) + if err != nil { + return nil, nil, err + } + + t := new(Membership) + resp, err := s.client.Do(ctx, req, t) + if err != nil { + return nil, resp, err + } + + return t, resp, nil +} + +// RemoveTeamMembership removes a user from a team. +// +// GitHub API docs: https://developer.github.com/v3/orgs/teams/#remove-team-membership +func (s *OrganizationsService) RemoveTeamMembership(ctx context.Context, team int64, user string) (*Response, error) { + u := fmt.Sprintf("teams/%v/memberships/%v", team, user) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +// ListPendingTeamInvitations get pending invitaion list in team. +// Warning: The API may change without advance notice during the preview period. +// Preview features are not supported for production use. +// +// GitHub API docs: https://developer.github.com/v3/orgs/teams/#list-pending-team-invitations +func (s *OrganizationsService) ListPendingTeamInvitations(ctx context.Context, team int64, opt *ListOptions) ([]*Invitation, *Response, error) { + u := fmt.Sprintf("teams/%v/invitations", team) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var pendingInvitations []*Invitation + resp, err := s.client.Do(ctx, req, &pendingInvitations) + if err != nil { + return nil, resp, err + } + + return pendingInvitations, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/orgs_users_blocking.go b/vendor/github.com/google/go-github/github/orgs_users_blocking.go new file mode 100644 index 00000000..b1aecf44 --- /dev/null +++ b/vendor/github.com/google/go-github/github/orgs_users_blocking.go @@ -0,0 +1,91 @@ +// Copyright 2017 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// ListBlockedUsers lists all the users blocked by an organization. +// +// GitHub API docs: https://developer.github.com/v3/orgs/blocking/#list-blocked-users +func (s *OrganizationsService) ListBlockedUsers(ctx context.Context, org string, opt *ListOptions) ([]*User, *Response, error) { + u := fmt.Sprintf("orgs/%v/blocks", org) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeBlockUsersPreview) + + var blockedUsers []*User + resp, err := s.client.Do(ctx, req, &blockedUsers) + if err != nil { + return nil, resp, err + } + + return blockedUsers, resp, nil +} + +// IsBlocked reports whether specified user is blocked from an organization. +// +// GitHub API docs: https://developer.github.com/v3/orgs/blocking/#check-whether-a-user-is-blocked-from-an-organization +func (s *OrganizationsService) IsBlocked(ctx context.Context, org string, user string) (bool, *Response, error) { + u := fmt.Sprintf("orgs/%v/blocks/%v", org, user) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return false, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeBlockUsersPreview) + + resp, err := s.client.Do(ctx, req, nil) + isBlocked, err := parseBoolResponse(err) + return isBlocked, resp, err +} + +// BlockUser blocks specified user from an organization. +// +// GitHub API docs: https://developer.github.com/v3/orgs/blocking/#block-a-user +func (s *OrganizationsService) BlockUser(ctx context.Context, org string, user string) (*Response, error) { + u := fmt.Sprintf("orgs/%v/blocks/%v", org, user) + + req, err := s.client.NewRequest("PUT", u, nil) + if err != nil { + return nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeBlockUsersPreview) + + return s.client.Do(ctx, req, nil) +} + +// UnblockUser unblocks specified user from an organization. +// +// GitHub API docs: https://developer.github.com/v3/orgs/blocking/#unblock-a-user +func (s *OrganizationsService) UnblockUser(ctx context.Context, org string, user string) (*Response, error) { + u := fmt.Sprintf("orgs/%v/blocks/%v", org, user) + + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeBlockUsersPreview) + + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/projects.go b/vendor/github.com/google/go-github/github/projects.go new file mode 100644 index 00000000..409ed4a2 --- /dev/null +++ b/vendor/github.com/google/go-github/github/projects.go @@ -0,0 +1,445 @@ +// Copyright 2016 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" + "strings" +) + +// ProjectsService provides access to the projects functions in the +// GitHub API. +// +// GitHub API docs: https://developer.github.com/v3/projects/ +type ProjectsService service + +// Project represents a GitHub Project. +type Project struct { + ID *int64 `json:"id,omitempty"` + URL *string `json:"url,omitempty"` + OwnerURL *string `json:"owner_url,omitempty"` + Name *string `json:"name,omitempty"` + Body *string `json:"body,omitempty"` + Number *int `json:"number,omitempty"` + CreatedAt *Timestamp `json:"created_at,omitempty"` + UpdatedAt *Timestamp `json:"updated_at,omitempty"` + NodeID *string `json:"node_id,omitempty"` + + // The User object that generated the project. + Creator *User `json:"creator,omitempty"` +} + +func (p Project) String() string { + return Stringify(p) +} + +// GetProject gets a GitHub Project for a repo. +// +// GitHub API docs: https://developer.github.com/v3/projects/#get-a-project +func (s *ProjectsService) GetProject(ctx context.Context, id int64) (*Project, *Response, error) { + u := fmt.Sprintf("projects/%v", id) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + project := &Project{} + resp, err := s.client.Do(ctx, req, project) + if err != nil { + return nil, resp, err + } + + return project, resp, nil +} + +// ProjectOptions specifies the parameters to the +// RepositoriesService.CreateProject and +// ProjectsService.UpdateProject methods. +type ProjectOptions struct { + // The name of the project. (Required for creation; optional for update.) + Name string `json:"name,omitempty"` + // The body of the project. (Optional.) + Body string `json:"body,omitempty"` + + // The following field(s) are only applicable for update. + // They should be left with zero values for creation. + + // State of the project. Either "open" or "closed". (Optional.) + State string `json:"state,omitempty"` +} + +// UpdateProject updates a repository project. +// +// GitHub API docs: https://developer.github.com/v3/projects/#update-a-project +func (s *ProjectsService) UpdateProject(ctx context.Context, id int64, opt *ProjectOptions) (*Project, *Response, error) { + u := fmt.Sprintf("projects/%v", id) + req, err := s.client.NewRequest("PATCH", u, opt) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + project := &Project{} + resp, err := s.client.Do(ctx, req, project) + if err != nil { + return nil, resp, err + } + + return project, resp, nil +} + +// DeleteProject deletes a GitHub Project from a repository. +// +// GitHub API docs: https://developer.github.com/v3/projects/#delete-a-project +func (s *ProjectsService) DeleteProject(ctx context.Context, id int64) (*Response, error) { + u := fmt.Sprintf("projects/%v", id) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeProjectsPreview) + + return s.client.Do(ctx, req, nil) +} + +// ProjectColumn represents a column of a GitHub Project. +// +// GitHub API docs: https://developer.github.com/v3/repos/projects/ +type ProjectColumn struct { + ID *int64 `json:"id,omitempty"` + Name *string `json:"name,omitempty"` + ProjectURL *string `json:"project_url,omitempty"` + CreatedAt *Timestamp `json:"created_at,omitempty"` + UpdatedAt *Timestamp `json:"updated_at,omitempty"` + NodeID *string `json:"node_id,omitempty"` +} + +// ListProjectColumns lists the columns of a GitHub Project for a repo. +// +// GitHub API docs: https://developer.github.com/v3/projects/columns/#list-project-columns +func (s *ProjectsService) ListProjectColumns(ctx context.Context, projectID int64, opt *ListOptions) ([]*ProjectColumn, *Response, error) { + u := fmt.Sprintf("projects/%v/columns", projectID) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + columns := []*ProjectColumn{} + resp, err := s.client.Do(ctx, req, &columns) + if err != nil { + return nil, resp, err + } + + return columns, resp, nil +} + +// GetProjectColumn gets a column of a GitHub Project for a repo. +// +// GitHub API docs: https://developer.github.com/v3/projects/columns/#get-a-project-column +func (s *ProjectsService) GetProjectColumn(ctx context.Context, id int64) (*ProjectColumn, *Response, error) { + u := fmt.Sprintf("projects/columns/%v", id) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + column := &ProjectColumn{} + resp, err := s.client.Do(ctx, req, column) + if err != nil { + return nil, resp, err + } + + return column, resp, nil +} + +// ProjectColumnOptions specifies the parameters to the +// ProjectsService.CreateProjectColumn and +// ProjectsService.UpdateProjectColumn methods. +type ProjectColumnOptions struct { + // The name of the project column. (Required for creation and update.) + Name string `json:"name"` +} + +// CreateProjectColumn creates a column for the specified (by number) project. +// +// GitHub API docs: https://developer.github.com/v3/projects/columns/#create-a-project-column +func (s *ProjectsService) CreateProjectColumn(ctx context.Context, projectID int64, opt *ProjectColumnOptions) (*ProjectColumn, *Response, error) { + u := fmt.Sprintf("projects/%v/columns", projectID) + req, err := s.client.NewRequest("POST", u, opt) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + column := &ProjectColumn{} + resp, err := s.client.Do(ctx, req, column) + if err != nil { + return nil, resp, err + } + + return column, resp, nil +} + +// UpdateProjectColumn updates a column of a GitHub Project. +// +// GitHub API docs: https://developer.github.com/v3/projects/columns/#update-a-project-column +func (s *ProjectsService) UpdateProjectColumn(ctx context.Context, columnID int64, opt *ProjectColumnOptions) (*ProjectColumn, *Response, error) { + u := fmt.Sprintf("projects/columns/%v", columnID) + req, err := s.client.NewRequest("PATCH", u, opt) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + column := &ProjectColumn{} + resp, err := s.client.Do(ctx, req, column) + if err != nil { + return nil, resp, err + } + + return column, resp, nil +} + +// DeleteProjectColumn deletes a column from a GitHub Project. +// +// GitHub API docs: https://developer.github.com/v3/projects/columns/#delete-a-project-column +func (s *ProjectsService) DeleteProjectColumn(ctx context.Context, columnID int64) (*Response, error) { + u := fmt.Sprintf("projects/columns/%v", columnID) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeProjectsPreview) + + return s.client.Do(ctx, req, nil) +} + +// ProjectColumnMoveOptions specifies the parameters to the +// ProjectsService.MoveProjectColumn method. +type ProjectColumnMoveOptions struct { + // Position can be one of "first", "last", or "after:", where + // is the ID of a column in the same project. (Required.) + Position string `json:"position"` +} + +// MoveProjectColumn moves a column within a GitHub Project. +// +// GitHub API docs: https://developer.github.com/v3/projects/columns/#move-a-project-column +func (s *ProjectsService) MoveProjectColumn(ctx context.Context, columnID int64, opt *ProjectColumnMoveOptions) (*Response, error) { + u := fmt.Sprintf("projects/columns/%v/moves", columnID) + req, err := s.client.NewRequest("POST", u, opt) + if err != nil { + return nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeProjectsPreview) + + return s.client.Do(ctx, req, nil) +} + +// ProjectCard represents a card in a column of a GitHub Project. +// +// GitHub API docs: https://developer.github.com/v3/projects/cards/#get-a-project-card +type ProjectCard struct { + URL *string `json:"url,omitempty"` + ColumnURL *string `json:"column_url,omitempty"` + ContentURL *string `json:"content_url,omitempty"` + ID *int64 `json:"id,omitempty"` + Note *string `json:"note,omitempty"` + Creator *User `json:"creator,omitempty"` + CreatedAt *Timestamp `json:"created_at,omitempty"` + UpdatedAt *Timestamp `json:"updated_at,omitempty"` + NodeID *string `json:"node_id,omitempty"` + + // The following fields are only populated by Webhook events. + ColumnID *int64 `json:"column_id,omitempty"` +} + +// ListProjectCards lists the cards in a column of a GitHub Project. +// +// GitHub API docs: https://developer.github.com/v3/projects/cards/#list-project-cards +func (s *ProjectsService) ListProjectCards(ctx context.Context, columnID int64, opt *ListOptions) ([]*ProjectCard, *Response, error) { + u := fmt.Sprintf("projects/columns/%v/cards", columnID) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + cards := []*ProjectCard{} + resp, err := s.client.Do(ctx, req, &cards) + if err != nil { + return nil, resp, err + } + + return cards, resp, nil +} + +// GetProjectCard gets a card in a column of a GitHub Project. +// +// GitHub API docs: https://developer.github.com/v3/projects/cards/#get-a-project-card +func (s *ProjectsService) GetProjectCard(ctx context.Context, columnID int64) (*ProjectCard, *Response, error) { + u := fmt.Sprintf("projects/columns/cards/%v", columnID) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + card := &ProjectCard{} + resp, err := s.client.Do(ctx, req, card) + if err != nil { + return nil, resp, err + } + + return card, resp, nil +} + +// ProjectCardOptions specifies the parameters to the +// ProjectsService.CreateProjectCard and +// ProjectsService.UpdateProjectCard methods. +type ProjectCardOptions struct { + // The note of the card. Note and ContentID are mutually exclusive. + Note string `json:"note,omitempty"` + // The ID (not Number) of the Issue to associate with this card. + // Note and ContentID are mutually exclusive. + ContentID int64 `json:"content_id,omitempty"` + // The type of content to associate with this card. Possible values are: "Issue". + ContentType string `json:"content_type,omitempty"` +} + +// CreateProjectCard creates a card in the specified column of a GitHub Project. +// +// GitHub API docs: https://developer.github.com/v3/projects/cards/#create-a-project-card +func (s *ProjectsService) CreateProjectCard(ctx context.Context, columnID int64, opt *ProjectCardOptions) (*ProjectCard, *Response, error) { + u := fmt.Sprintf("projects/columns/%v/cards", columnID) + req, err := s.client.NewRequest("POST", u, opt) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + card := &ProjectCard{} + resp, err := s.client.Do(ctx, req, card) + if err != nil { + return nil, resp, err + } + + return card, resp, nil +} + +// UpdateProjectCard updates a card of a GitHub Project. +// +// GitHub API docs: https://developer.github.com/v3/projects/cards/#update-a-project-card +func (s *ProjectsService) UpdateProjectCard(ctx context.Context, cardID int64, opt *ProjectCardOptions) (*ProjectCard, *Response, error) { + u := fmt.Sprintf("projects/columns/cards/%v", cardID) + req, err := s.client.NewRequest("PATCH", u, opt) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + card := &ProjectCard{} + resp, err := s.client.Do(ctx, req, card) + if err != nil { + return nil, resp, err + } + + return card, resp, nil +} + +// DeleteProjectCard deletes a card from a GitHub Project. +// +// GitHub API docs: https://developer.github.com/v3/projects/cards/#delete-a-project-card +func (s *ProjectsService) DeleteProjectCard(ctx context.Context, cardID int64) (*Response, error) { + u := fmt.Sprintf("projects/columns/cards/%v", cardID) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeProjectsPreview) + + return s.client.Do(ctx, req, nil) +} + +// ProjectCardMoveOptions specifies the parameters to the +// ProjectsService.MoveProjectCard method. +type ProjectCardMoveOptions struct { + // Position can be one of "top", "bottom", or "after:", where + // is the ID of a card in the same project. + Position string `json:"position"` + // ColumnID is the ID of a column in the same project. Note that ColumnID + // is required when using Position "after:" when that card is in + // another column; otherwise it is optional. + ColumnID int64 `json:"column_id,omitempty"` +} + +// MoveProjectCard moves a card within a GitHub Project. +// +// GitHub API docs: https://developer.github.com/v3/projects/cards/#move-a-project-card +func (s *ProjectsService) MoveProjectCard(ctx context.Context, cardID int64, opt *ProjectCardMoveOptions) (*Response, error) { + u := fmt.Sprintf("projects/columns/cards/%v/moves", cardID) + req, err := s.client.NewRequest("POST", u, opt) + if err != nil { + return nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeProjectsPreview) + + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/pulls.go b/vendor/github.com/google/go-github/github/pulls.go new file mode 100644 index 00000000..1f344690 --- /dev/null +++ b/vendor/github.com/google/go-github/github/pulls.go @@ -0,0 +1,380 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "bytes" + "context" + "fmt" + "strings" + "time" +) + +// PullRequestsService handles communication with the pull request related +// methods of the GitHub API. +// +// GitHub API docs: https://developer.github.com/v3/pulls/ +type PullRequestsService service + +// PullRequest represents a GitHub pull request on a repository. +type PullRequest struct { + ID *int64 `json:"id,omitempty"` + Number *int `json:"number,omitempty"` + State *string `json:"state,omitempty"` + Title *string `json:"title,omitempty"` + Body *string `json:"body,omitempty"` + CreatedAt *time.Time `json:"created_at,omitempty"` + UpdatedAt *time.Time `json:"updated_at,omitempty"` + ClosedAt *time.Time `json:"closed_at,omitempty"` + MergedAt *time.Time `json:"merged_at,omitempty"` + Labels []*Label `json:"labels,omitempty"` + User *User `json:"user,omitempty"` + Merged *bool `json:"merged,omitempty"` + Mergeable *bool `json:"mergeable,omitempty"` + MergeableState *string `json:"mergeable_state,omitempty"` + MergedBy *User `json:"merged_by,omitempty"` + MergeCommitSHA *string `json:"merge_commit_sha,omitempty"` + Comments *int `json:"comments,omitempty"` + Commits *int `json:"commits,omitempty"` + Additions *int `json:"additions,omitempty"` + Deletions *int `json:"deletions,omitempty"` + ChangedFiles *int `json:"changed_files,omitempty"` + URL *string `json:"url,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` + IssueURL *string `json:"issue_url,omitempty"` + StatusesURL *string `json:"statuses_url,omitempty"` + DiffURL *string `json:"diff_url,omitempty"` + PatchURL *string `json:"patch_url,omitempty"` + CommitsURL *string `json:"commits_url,omitempty"` + CommentsURL *string `json:"comments_url,omitempty"` + ReviewCommentsURL *string `json:"review_comments_url,omitempty"` + ReviewCommentURL *string `json:"review_comment_url,omitempty"` + Assignee *User `json:"assignee,omitempty"` + Assignees []*User `json:"assignees,omitempty"` + Milestone *Milestone `json:"milestone,omitempty"` + MaintainerCanModify *bool `json:"maintainer_can_modify,omitempty"` + AuthorAssociation *string `json:"author_association,omitempty"` + NodeID *string `json:"node_id,omitempty"` + RequestedReviewers []*User `json:"requested_reviewers,omitempty"` + + Head *PullRequestBranch `json:"head,omitempty"` + Base *PullRequestBranch `json:"base,omitempty"` +} + +func (p PullRequest) String() string { + return Stringify(p) +} + +// PullRequestBranch represents a base or head branch in a GitHub pull request. +type PullRequestBranch struct { + Label *string `json:"label,omitempty"` + Ref *string `json:"ref,omitempty"` + SHA *string `json:"sha,omitempty"` + Repo *Repository `json:"repo,omitempty"` + User *User `json:"user,omitempty"` +} + +// PullRequestListOptions specifies the optional parameters to the +// PullRequestsService.List method. +type PullRequestListOptions struct { + // State filters pull requests based on their state. Possible values are: + // open, closed. Default is "open". + State string `url:"state,omitempty"` + + // Head filters pull requests by head user and branch name in the format of: + // "user:ref-name". + Head string `url:"head,omitempty"` + + // Base filters pull requests by base branch name. + Base string `url:"base,omitempty"` + + // Sort specifies how to sort pull requests. Possible values are: created, + // updated, popularity, long-running. Default is "created". + Sort string `url:"sort,omitempty"` + + // Direction in which to sort pull requests. Possible values are: asc, desc. + // If Sort is "created" or not specified, Default is "desc", otherwise Default + // is "asc" + Direction string `url:"direction,omitempty"` + + ListOptions +} + +// List the pull requests for the specified repository. +// +// GitHub API docs: https://developer.github.com/v3/pulls/#list-pull-requests +func (s *PullRequestsService) List(ctx context.Context, owner string, repo string, opt *PullRequestListOptions) ([]*PullRequest, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pulls", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + var pulls []*PullRequest + resp, err := s.client.Do(ctx, req, &pulls) + if err != nil { + return nil, resp, err + } + + return pulls, resp, nil +} + +// Get a single pull request. +// +// GitHub API docs: https://developer.github.com/v3/pulls/#get-a-single-pull-request +func (s *PullRequestsService) Get(ctx context.Context, owner string, repo string, number int) (*PullRequest, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pulls/%d", owner, repo, number) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + pull := new(PullRequest) + resp, err := s.client.Do(ctx, req, pull) + if err != nil { + return nil, resp, err + } + + return pull, resp, nil +} + +// GetRaw gets a single pull request in raw (diff or patch) format. +func (s *PullRequestsService) GetRaw(ctx context.Context, owner string, repo string, number int, opt RawOptions) (string, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pulls/%d", owner, repo, number) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return "", nil, err + } + + switch opt.Type { + case Diff: + req.Header.Set("Accept", mediaTypeV3Diff) + case Patch: + req.Header.Set("Accept", mediaTypeV3Patch) + default: + return "", nil, fmt.Errorf("unsupported raw type %d", opt.Type) + } + + var buf bytes.Buffer + resp, err := s.client.Do(ctx, req, &buf) + if err != nil { + return "", resp, err + } + + return buf.String(), resp, nil +} + +// NewPullRequest represents a new pull request to be created. +type NewPullRequest struct { + Title *string `json:"title,omitempty"` + Head *string `json:"head,omitempty"` + Base *string `json:"base,omitempty"` + Body *string `json:"body,omitempty"` + Issue *int `json:"issue,omitempty"` + MaintainerCanModify *bool `json:"maintainer_can_modify,omitempty"` +} + +// Create a new pull request on the specified repository. +// +// GitHub API docs: https://developer.github.com/v3/pulls/#create-a-pull-request +func (s *PullRequestsService) Create(ctx context.Context, owner string, repo string, pull *NewPullRequest) (*PullRequest, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pulls", owner, repo) + req, err := s.client.NewRequest("POST", u, pull) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + p := new(PullRequest) + resp, err := s.client.Do(ctx, req, p) + if err != nil { + return nil, resp, err + } + + return p, resp, nil +} + +type pullRequestUpdate struct { + Title *string `json:"title,omitempty"` + Body *string `json:"body,omitempty"` + State *string `json:"state,omitempty"` + Base *string `json:"base,omitempty"` + MaintainerCanModify *bool `json:"maintainer_can_modify,omitempty"` +} + +// Edit a pull request. +// pull must not be nil. +// +// The following fields are editable: Title, Body, State, Base.Ref and MaintainerCanModify. +// Base.Ref updates the base branch of the pull request. +// +// GitHub API docs: https://developer.github.com/v3/pulls/#update-a-pull-request +func (s *PullRequestsService) Edit(ctx context.Context, owner string, repo string, number int, pull *PullRequest) (*PullRequest, *Response, error) { + if pull == nil { + return nil, nil, fmt.Errorf("pull must be provided") + } + + u := fmt.Sprintf("repos/%v/%v/pulls/%d", owner, repo, number) + + update := &pullRequestUpdate{ + Title: pull.Title, + Body: pull.Body, + State: pull.State, + MaintainerCanModify: pull.MaintainerCanModify, + } + if pull.Base != nil { + update.Base = pull.Base.Ref + } + + req, err := s.client.NewRequest("PATCH", u, update) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + p := new(PullRequest) + resp, err := s.client.Do(ctx, req, p) + if err != nil { + return nil, resp, err + } + + return p, resp, nil +} + +// ListCommits lists the commits in a pull request. +// +// GitHub API docs: https://developer.github.com/v3/pulls/#list-commits-on-a-pull-request +func (s *PullRequestsService) ListCommits(ctx context.Context, owner string, repo string, number int, opt *ListOptions) ([]*RepositoryCommit, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pulls/%d/commits", owner, repo, number) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGitSigningPreview) + + var commits []*RepositoryCommit + resp, err := s.client.Do(ctx, req, &commits) + if err != nil { + return nil, resp, err + } + + return commits, resp, nil +} + +// ListFiles lists the files in a pull request. +// +// GitHub API docs: https://developer.github.com/v3/pulls/#list-pull-requests-files +func (s *PullRequestsService) ListFiles(ctx context.Context, owner string, repo string, number int, opt *ListOptions) ([]*CommitFile, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pulls/%d/files", owner, repo, number) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var commitFiles []*CommitFile + resp, err := s.client.Do(ctx, req, &commitFiles) + if err != nil { + return nil, resp, err + } + + return commitFiles, resp, nil +} + +// IsMerged checks if a pull request has been merged. +// +// GitHub API docs: https://developer.github.com/v3/pulls/#get-if-a-pull-request-has-been-merged +func (s *PullRequestsService) IsMerged(ctx context.Context, owner string, repo string, number int) (bool, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pulls/%d/merge", owner, repo, number) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return false, nil, err + } + + resp, err := s.client.Do(ctx, req, nil) + merged, err := parseBoolResponse(err) + return merged, resp, err +} + +// PullRequestMergeResult represents the result of merging a pull request. +type PullRequestMergeResult struct { + SHA *string `json:"sha,omitempty"` + Merged *bool `json:"merged,omitempty"` + Message *string `json:"message,omitempty"` +} + +// PullRequestOptions lets you define how a pull request will be merged. +type PullRequestOptions struct { + CommitTitle string // Extra detail to append to automatic commit message. (Optional.) + SHA string // SHA that pull request head must match to allow merge. (Optional.) + + // The merge method to use. Possible values include: "merge", "squash", and "rebase" with the default being merge. (Optional.) + MergeMethod string +} + +type pullRequestMergeRequest struct { + CommitMessage string `json:"commit_message"` + CommitTitle string `json:"commit_title,omitempty"` + MergeMethod string `json:"merge_method,omitempty"` + SHA string `json:"sha,omitempty"` +} + +// Merge a pull request (Merge Button™). +// commitMessage is the title for the automatic commit message. +// +// GitHub API docs: https://developer.github.com/v3/pulls/#merge-a-pull-request-merge-buttontrade +func (s *PullRequestsService) Merge(ctx context.Context, owner string, repo string, number int, commitMessage string, options *PullRequestOptions) (*PullRequestMergeResult, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pulls/%d/merge", owner, repo, number) + + pullRequestBody := &pullRequestMergeRequest{CommitMessage: commitMessage} + if options != nil { + pullRequestBody.CommitTitle = options.CommitTitle + pullRequestBody.MergeMethod = options.MergeMethod + pullRequestBody.SHA = options.SHA + } + req, err := s.client.NewRequest("PUT", u, pullRequestBody) + if err != nil { + return nil, nil, err + } + + mergeResult := new(PullRequestMergeResult) + resp, err := s.client.Do(ctx, req, mergeResult) + if err != nil { + return nil, resp, err + } + + return mergeResult, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/pulls_comments.go b/vendor/github.com/google/go-github/github/pulls_comments.go new file mode 100644 index 00000000..a7f8ac30 --- /dev/null +++ b/vendor/github.com/google/go-github/github/pulls_comments.go @@ -0,0 +1,162 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" + "time" +) + +// PullRequestComment represents a comment left on a pull request. +type PullRequestComment struct { + ID *int64 `json:"id,omitempty"` + InReplyTo *int64 `json:"in_reply_to,omitempty"` + Body *string `json:"body,omitempty"` + Path *string `json:"path,omitempty"` + DiffHunk *string `json:"diff_hunk,omitempty"` + PullRequestReviewID *int64 `json:"pull_request_review_id,omitempty"` + Position *int `json:"position,omitempty"` + OriginalPosition *int `json:"original_position,omitempty"` + CommitID *string `json:"commit_id,omitempty"` + OriginalCommitID *string `json:"original_commit_id,omitempty"` + User *User `json:"user,omitempty"` + Reactions *Reactions `json:"reactions,omitempty"` + CreatedAt *time.Time `json:"created_at,omitempty"` + UpdatedAt *time.Time `json:"updated_at,omitempty"` + // AuthorAssociation is the comment author's relationship to the pull request's repository. + // Possible values are "COLLABORATOR", "CONTRIBUTOR", "FIRST_TIMER", "FIRST_TIME_CONTRIBUTOR", "MEMBER", "OWNER", or "NONE". + AuthorAssociation *string `json:"author_association,omitempty"` + URL *string `json:"url,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` + PullRequestURL *string `json:"pull_request_url,omitempty"` +} + +func (p PullRequestComment) String() string { + return Stringify(p) +} + +// PullRequestListCommentsOptions specifies the optional parameters to the +// PullRequestsService.ListComments method. +type PullRequestListCommentsOptions struct { + // Sort specifies how to sort comments. Possible values are: created, updated. + Sort string `url:"sort,omitempty"` + + // Direction in which to sort comments. Possible values are: asc, desc. + Direction string `url:"direction,omitempty"` + + // Since filters comments by time. + Since time.Time `url:"since,omitempty"` + + ListOptions +} + +// ListComments lists all comments on the specified pull request. Specifying a +// pull request number of 0 will return all comments on all pull requests for +// the repository. +// +// GitHub API docs: https://developer.github.com/v3/pulls/comments/#list-comments-on-a-pull-request +func (s *PullRequestsService) ListComments(ctx context.Context, owner string, repo string, number int, opt *PullRequestListCommentsOptions) ([]*PullRequestComment, *Response, error) { + var u string + if number == 0 { + u = fmt.Sprintf("repos/%v/%v/pulls/comments", owner, repo) + } else { + u = fmt.Sprintf("repos/%v/%v/pulls/%d/comments", owner, repo, number) + } + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeReactionsPreview) + + var comments []*PullRequestComment + resp, err := s.client.Do(ctx, req, &comments) + if err != nil { + return nil, resp, err + } + + return comments, resp, nil +} + +// GetComment fetches the specified pull request comment. +// +// GitHub API docs: https://developer.github.com/v3/pulls/comments/#get-a-single-comment +func (s *PullRequestsService) GetComment(ctx context.Context, owner string, repo string, commentID int64) (*PullRequestComment, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pulls/comments/%d", owner, repo, commentID) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeReactionsPreview) + + comment := new(PullRequestComment) + resp, err := s.client.Do(ctx, req, comment) + if err != nil { + return nil, resp, err + } + + return comment, resp, nil +} + +// CreateComment creates a new comment on the specified pull request. +// +// GitHub API docs: https://developer.github.com/v3/pulls/comments/#create-a-comment +func (s *PullRequestsService) CreateComment(ctx context.Context, owner string, repo string, number int, comment *PullRequestComment) (*PullRequestComment, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pulls/%d/comments", owner, repo, number) + req, err := s.client.NewRequest("POST", u, comment) + if err != nil { + return nil, nil, err + } + + c := new(PullRequestComment) + resp, err := s.client.Do(ctx, req, c) + if err != nil { + return nil, resp, err + } + + return c, resp, nil +} + +// EditComment updates a pull request comment. +// A non-nil comment.Body must be provided. Other comment fields should be left nil. +// +// GitHub API docs: https://developer.github.com/v3/pulls/comments/#edit-a-comment +func (s *PullRequestsService) EditComment(ctx context.Context, owner string, repo string, commentID int64, comment *PullRequestComment) (*PullRequestComment, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pulls/comments/%d", owner, repo, commentID) + req, err := s.client.NewRequest("PATCH", u, comment) + if err != nil { + return nil, nil, err + } + + c := new(PullRequestComment) + resp, err := s.client.Do(ctx, req, c) + if err != nil { + return nil, resp, err + } + + return c, resp, nil +} + +// DeleteComment deletes a pull request comment. +// +// GitHub API docs: https://developer.github.com/v3/pulls/comments/#delete-a-comment +func (s *PullRequestsService) DeleteComment(ctx context.Context, owner string, repo string, commentID int64) (*Response, error) { + u := fmt.Sprintf("repos/%v/%v/pulls/comments/%d", owner, repo, commentID) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/pulls_reviewers.go b/vendor/github.com/google/go-github/github/pulls_reviewers.go new file mode 100644 index 00000000..a1d78531 --- /dev/null +++ b/vendor/github.com/google/go-github/github/pulls_reviewers.go @@ -0,0 +1,79 @@ +// Copyright 2017 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// ReviewersRequest specifies users and teams for a pull request review request. +type ReviewersRequest struct { + Reviewers []string `json:"reviewers,omitempty"` + TeamReviewers []string `json:"team_reviewers,omitempty"` +} + +// Reviewers represents reviewers of a pull request. +type Reviewers struct { + Users []*User `json:"users,omitempty"` + Teams []*Team `json:"teams,omitempty"` +} + +// RequestReviewers creates a review request for the provided reviewers for the specified pull request. +// +// GitHub API docs: https://developer.github.com/v3/pulls/review_requests/#create-a-review-request +func (s *PullRequestsService) RequestReviewers(ctx context.Context, owner, repo string, number int, reviewers ReviewersRequest) (*PullRequest, *Response, error) { + u := fmt.Sprintf("repos/%s/%s/pulls/%d/requested_reviewers", owner, repo, number) + req, err := s.client.NewRequest("POST", u, &reviewers) + if err != nil { + return nil, nil, err + } + + r := new(PullRequest) + resp, err := s.client.Do(ctx, req, r) + if err != nil { + return nil, resp, err + } + + return r, resp, nil +} + +// ListReviewers lists reviewers whose reviews have been requested on the specified pull request. +// +// GitHub API docs: https://developer.github.com/v3/pulls/review_requests/#list-review-requests +func (s *PullRequestsService) ListReviewers(ctx context.Context, owner, repo string, number int, opt *ListOptions) (*Reviewers, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pulls/%d/requested_reviewers", owner, repo, number) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + reviewers := new(Reviewers) + resp, err := s.client.Do(ctx, req, reviewers) + if err != nil { + return nil, resp, err + } + + return reviewers, resp, nil +} + +// RemoveReviewers removes the review request for the provided reviewers for the specified pull request. +// +// GitHub API docs: https://developer.github.com/v3/pulls/review_requests/#delete-a-review-request +func (s *PullRequestsService) RemoveReviewers(ctx context.Context, owner, repo string, number int, reviewers ReviewersRequest) (*Response, error) { + u := fmt.Sprintf("repos/%s/%s/pulls/%d/requested_reviewers", owner, repo, number) + req, err := s.client.NewRequest("DELETE", u, &reviewers) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/pulls_reviews.go b/vendor/github.com/google/go-github/github/pulls_reviews.go new file mode 100644 index 00000000..57d3c635 --- /dev/null +++ b/vendor/github.com/google/go-github/github/pulls_reviews.go @@ -0,0 +1,236 @@ +// Copyright 2016 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" + "time" +) + +// PullRequestReview represents a review of a pull request. +type PullRequestReview struct { + ID *int64 `json:"id,omitempty"` + User *User `json:"user,omitempty"` + Body *string `json:"body,omitempty"` + SubmittedAt *time.Time `json:"submitted_at,omitempty"` + CommitID *string `json:"commit_id,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` + PullRequestURL *string `json:"pull_request_url,omitempty"` + State *string `json:"state,omitempty"` +} + +func (p PullRequestReview) String() string { + return Stringify(p) +} + +// DraftReviewComment represents a comment part of the review. +type DraftReviewComment struct { + Path *string `json:"path,omitempty"` + Position *int `json:"position,omitempty"` + Body *string `json:"body,omitempty"` +} + +func (c DraftReviewComment) String() string { + return Stringify(c) +} + +// PullRequestReviewRequest represents a request to create a review. +type PullRequestReviewRequest struct { + CommitID *string `json:"commit_id,omitempty"` + Body *string `json:"body,omitempty"` + Event *string `json:"event,omitempty"` + Comments []*DraftReviewComment `json:"comments,omitempty"` +} + +func (r PullRequestReviewRequest) String() string { + return Stringify(r) +} + +// PullRequestReviewDismissalRequest represents a request to dismiss a review. +type PullRequestReviewDismissalRequest struct { + Message *string `json:"message,omitempty"` +} + +func (r PullRequestReviewDismissalRequest) String() string { + return Stringify(r) +} + +// ListReviews lists all reviews on the specified pull request. +// +// TODO: Follow up with GitHub support about an issue with this method's +// returned error format and remove this comment once it's fixed. +// Read more about it here - https://github.com/google/go-github/issues/540 +// +// GitHub API docs: https://developer.github.com/v3/pulls/reviews/#list-reviews-on-a-pull-request +func (s *PullRequestsService) ListReviews(ctx context.Context, owner, repo string, number int, opt *ListOptions) ([]*PullRequestReview, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews", owner, repo, number) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var reviews []*PullRequestReview + resp, err := s.client.Do(ctx, req, &reviews) + if err != nil { + return nil, resp, err + } + + return reviews, resp, nil +} + +// GetReview fetches the specified pull request review. +// +// TODO: Follow up with GitHub support about an issue with this method's +// returned error format and remove this comment once it's fixed. +// Read more about it here - https://github.com/google/go-github/issues/540 +// +// GitHub API docs: https://developer.github.com/v3/pulls/reviews/#get-a-single-review +func (s *PullRequestsService) GetReview(ctx context.Context, owner, repo string, number int, reviewID int64) (*PullRequestReview, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d", owner, repo, number, reviewID) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + review := new(PullRequestReview) + resp, err := s.client.Do(ctx, req, review) + if err != nil { + return nil, resp, err + } + + return review, resp, nil +} + +// DeletePendingReview deletes the specified pull request pending review. +// +// TODO: Follow up with GitHub support about an issue with this method's +// returned error format and remove this comment once it's fixed. +// Read more about it here - https://github.com/google/go-github/issues/540 +// +// GitHub API docs: https://developer.github.com/v3/pulls/reviews/#delete-a-pending-review +func (s *PullRequestsService) DeletePendingReview(ctx context.Context, owner, repo string, number int, reviewID int64) (*PullRequestReview, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d", owner, repo, number, reviewID) + + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, nil, err + } + + review := new(PullRequestReview) + resp, err := s.client.Do(ctx, req, review) + if err != nil { + return nil, resp, err + } + + return review, resp, nil +} + +// ListReviewComments lists all the comments for the specified review. +// +// TODO: Follow up with GitHub support about an issue with this method's +// returned error format and remove this comment once it's fixed. +// Read more about it here - https://github.com/google/go-github/issues/540 +// +// GitHub API docs: https://developer.github.com/v3/pulls/reviews/#get-comments-for-a-single-review +func (s *PullRequestsService) ListReviewComments(ctx context.Context, owner, repo string, number int, reviewID int64, opt *ListOptions) ([]*PullRequestComment, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d/comments", owner, repo, number, reviewID) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var comments []*PullRequestComment + resp, err := s.client.Do(ctx, req, &comments) + if err != nil { + return nil, resp, err + } + + return comments, resp, nil +} + +// CreateReview creates a new review on the specified pull request. +// +// TODO: Follow up with GitHub support about an issue with this method's +// returned error format and remove this comment once it's fixed. +// Read more about it here - https://github.com/google/go-github/issues/540 +// +// GitHub API docs: https://developer.github.com/v3/pulls/reviews/#create-a-pull-request-review +func (s *PullRequestsService) CreateReview(ctx context.Context, owner, repo string, number int, review *PullRequestReviewRequest) (*PullRequestReview, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews", owner, repo, number) + + req, err := s.client.NewRequest("POST", u, review) + if err != nil { + return nil, nil, err + } + + r := new(PullRequestReview) + resp, err := s.client.Do(ctx, req, r) + if err != nil { + return nil, resp, err + } + + return r, resp, nil +} + +// SubmitReview submits a specified review on the specified pull request. +// +// TODO: Follow up with GitHub support about an issue with this method's +// returned error format and remove this comment once it's fixed. +// Read more about it here - https://github.com/google/go-github/issues/540 +// +// GitHub API docs: https://developer.github.com/v3/pulls/reviews/#submit-a-pull-request-review +func (s *PullRequestsService) SubmitReview(ctx context.Context, owner, repo string, number int, reviewID int64, review *PullRequestReviewRequest) (*PullRequestReview, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d/events", owner, repo, number, reviewID) + + req, err := s.client.NewRequest("POST", u, review) + if err != nil { + return nil, nil, err + } + + r := new(PullRequestReview) + resp, err := s.client.Do(ctx, req, r) + if err != nil { + return nil, resp, err + } + + return r, resp, nil +} + +// DismissReview dismisses a specified review on the specified pull request. +// +// TODO: Follow up with GitHub support about an issue with this method's +// returned error format and remove this comment once it's fixed. +// Read more about it here - https://github.com/google/go-github/issues/540 +// +// GitHub API docs: https://developer.github.com/v3/pulls/reviews/#dismiss-a-pull-request-review +func (s *PullRequestsService) DismissReview(ctx context.Context, owner, repo string, number int, reviewID int64, review *PullRequestReviewDismissalRequest) (*PullRequestReview, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d/dismissals", owner, repo, number, reviewID) + + req, err := s.client.NewRequest("PUT", u, review) + if err != nil { + return nil, nil, err + } + + r := new(PullRequestReview) + resp, err := s.client.Do(ctx, req, r) + if err != nil { + return nil, resp, err + } + + return r, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/reactions.go b/vendor/github.com/google/go-github/github/reactions.go new file mode 100644 index 00000000..19b533f3 --- /dev/null +++ b/vendor/github.com/google/go-github/github/reactions.go @@ -0,0 +1,283 @@ +// Copyright 2016 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" + "strings" +) + +// ReactionsService provides access to the reactions-related functions in the +// GitHub API. +// +// GitHub API docs: https://developer.github.com/v3/reactions/ +type ReactionsService service + +// Reaction represents a GitHub reaction. +type Reaction struct { + // ID is the Reaction ID. + ID *int64 `json:"id,omitempty"` + User *User `json:"user,omitempty"` + NodeID *string `json:"node_id,omitempty"` + // Content is the type of reaction. + // Possible values are: + // "+1", "-1", "laugh", "confused", "heart", "hooray". + Content *string `json:"content,omitempty"` +} + +// Reactions represents a summary of GitHub reactions. +type Reactions struct { + TotalCount *int `json:"total_count,omitempty"` + PlusOne *int `json:"+1,omitempty"` + MinusOne *int `json:"-1,omitempty"` + Laugh *int `json:"laugh,omitempty"` + Confused *int `json:"confused,omitempty"` + Heart *int `json:"heart,omitempty"` + Hooray *int `json:"hooray,omitempty"` + URL *string `json:"url,omitempty"` +} + +func (r Reaction) String() string { + return Stringify(r) +} + +// ListCommentReactions lists the reactions for a commit comment. +// +// GitHub API docs: https://developer.github.com/v3/reactions/#list-reactions-for-a-commit-comment +func (s *ReactionsService) ListCommentReactions(ctx context.Context, owner, repo string, id int64, opt *ListOptions) ([]*Reaction, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/comments/%v/reactions", owner, repo, id) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + var m []*Reaction + resp, err := s.client.Do(ctx, req, &m) + if err != nil { + return nil, resp, err + } + + return m, resp, nil +} + +// CreateCommentReaction creates a reaction for a commit comment. +// Note that if you have already created a reaction of type content, the +// previously created reaction will be returned with Status: 200 OK. +// +// GitHub API docs: https://developer.github.com/v3/reactions/#create-reaction-for-a-commit-comment +func (s ReactionsService) CreateCommentReaction(ctx context.Context, owner, repo string, id int64, content string) (*Reaction, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/comments/%v/reactions", owner, repo, id) + + body := &Reaction{Content: String(content)} + req, err := s.client.NewRequest("POST", u, body) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + m := &Reaction{} + resp, err := s.client.Do(ctx, req, m) + if err != nil { + return nil, resp, err + } + + return m, resp, nil +} + +// ListIssueReactions lists the reactions for an issue. +// +// GitHub API docs: https://developer.github.com/v3/reactions/#list-reactions-for-an-issue +func (s *ReactionsService) ListIssueReactions(ctx context.Context, owner, repo string, number int, opt *ListOptions) ([]*Reaction, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/issues/%v/reactions", owner, repo, number) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + var m []*Reaction + resp, err := s.client.Do(ctx, req, &m) + if err != nil { + return nil, resp, err + } + + return m, resp, nil +} + +// CreateIssueReaction creates a reaction for an issue. +// Note that if you have already created a reaction of type content, the +// previously created reaction will be returned with Status: 200 OK. +// +// GitHub API docs: https://developer.github.com/v3/reactions/#create-reaction-for-an-issue +func (s ReactionsService) CreateIssueReaction(ctx context.Context, owner, repo string, number int, content string) (*Reaction, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/issues/%v/reactions", owner, repo, number) + + body := &Reaction{Content: String(content)} + req, err := s.client.NewRequest("POST", u, body) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + m := &Reaction{} + resp, err := s.client.Do(ctx, req, m) + if err != nil { + return nil, resp, err + } + + return m, resp, nil +} + +// ListIssueCommentReactions lists the reactions for an issue comment. +// +// GitHub API docs: https://developer.github.com/v3/reactions/#list-reactions-for-an-issue-comment +func (s *ReactionsService) ListIssueCommentReactions(ctx context.Context, owner, repo string, id int64, opt *ListOptions) ([]*Reaction, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/issues/comments/%v/reactions", owner, repo, id) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + var m []*Reaction + resp, err := s.client.Do(ctx, req, &m) + if err != nil { + return nil, resp, err + } + + return m, resp, nil +} + +// CreateIssueCommentReaction creates a reaction for an issue comment. +// Note that if you have already created a reaction of type content, the +// previously created reaction will be returned with Status: 200 OK. +// +// GitHub API docs: https://developer.github.com/v3/reactions/#create-reaction-for-an-issue-comment +func (s ReactionsService) CreateIssueCommentReaction(ctx context.Context, owner, repo string, id int64, content string) (*Reaction, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/issues/comments/%v/reactions", owner, repo, id) + + body := &Reaction{Content: String(content)} + req, err := s.client.NewRequest("POST", u, body) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + m := &Reaction{} + resp, err := s.client.Do(ctx, req, m) + if err != nil { + return nil, resp, err + } + + return m, resp, nil +} + +// ListPullRequestCommentReactions lists the reactions for a pull request review comment. +// +// GitHub API docs: https://developer.github.com/v3/reactions/#list-reactions-for-an-issue-comment +func (s *ReactionsService) ListPullRequestCommentReactions(ctx context.Context, owner, repo string, id int64, opt *ListOptions) ([]*Reaction, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pulls/comments/%v/reactions", owner, repo, id) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + var m []*Reaction + resp, err := s.client.Do(ctx, req, &m) + if err != nil { + return nil, resp, err + } + + return m, resp, nil +} + +// CreatePullRequestCommentReaction creates a reaction for a pull request review comment. +// Note that if you have already created a reaction of type content, the +// previously created reaction will be returned with Status: 200 OK. +// +// GitHub API docs: https://developer.github.com/v3/reactions/#create-reaction-for-an-issue-comment +func (s ReactionsService) CreatePullRequestCommentReaction(ctx context.Context, owner, repo string, id int64, content string) (*Reaction, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pulls/comments/%v/reactions", owner, repo, id) + + body := &Reaction{Content: String(content)} + req, err := s.client.NewRequest("POST", u, body) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + m := &Reaction{} + resp, err := s.client.Do(ctx, req, m) + if err != nil { + return nil, resp, err + } + + return m, resp, nil +} + +// DeleteReaction deletes a reaction. +// +// GitHub API docs: https://developer.github.com/v3/reaction/reactions/#delete-a-reaction-archive +func (s *ReactionsService) DeleteReaction(ctx context.Context, id int64) (*Response, error) { + u := fmt.Sprintf("reactions/%v", id) + + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeReactionsPreview) + + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/repos.go b/vendor/github.com/google/go-github/github/repos.go new file mode 100644 index 00000000..aa9b6ace --- /dev/null +++ b/vendor/github.com/google/go-github/github/repos.go @@ -0,0 +1,1051 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" + "strings" +) + +// RepositoriesService handles communication with the repository related +// methods of the GitHub API. +// +// GitHub API docs: https://developer.github.com/v3/repos/ +type RepositoriesService service + +// Repository represents a GitHub repository. +type Repository struct { + ID *int64 `json:"id,omitempty"` + Owner *User `json:"owner,omitempty"` + Name *string `json:"name,omitempty"` + FullName *string `json:"full_name,omitempty"` + Description *string `json:"description,omitempty"` + Homepage *string `json:"homepage,omitempty"` + CodeOfConduct *CodeOfConduct `json:"code_of_conduct,omitempty"` + DefaultBranch *string `json:"default_branch,omitempty"` + MasterBranch *string `json:"master_branch,omitempty"` + CreatedAt *Timestamp `json:"created_at,omitempty"` + PushedAt *Timestamp `json:"pushed_at,omitempty"` + UpdatedAt *Timestamp `json:"updated_at,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` + CloneURL *string `json:"clone_url,omitempty"` + GitURL *string `json:"git_url,omitempty"` + MirrorURL *string `json:"mirror_url,omitempty"` + SSHURL *string `json:"ssh_url,omitempty"` + SVNURL *string `json:"svn_url,omitempty"` + Language *string `json:"language,omitempty"` + Fork *bool `json:"fork,omitempty"` + ForksCount *int `json:"forks_count,omitempty"` + NetworkCount *int `json:"network_count,omitempty"` + OpenIssuesCount *int `json:"open_issues_count,omitempty"` + StargazersCount *int `json:"stargazers_count,omitempty"` + SubscribersCount *int `json:"subscribers_count,omitempty"` + WatchersCount *int `json:"watchers_count,omitempty"` + Size *int `json:"size,omitempty"` + AutoInit *bool `json:"auto_init,omitempty"` + Parent *Repository `json:"parent,omitempty"` + Source *Repository `json:"source,omitempty"` + Organization *Organization `json:"organization,omitempty"` + Permissions *map[string]bool `json:"permissions,omitempty"` + AllowRebaseMerge *bool `json:"allow_rebase_merge,omitempty"` + AllowSquashMerge *bool `json:"allow_squash_merge,omitempty"` + AllowMergeCommit *bool `json:"allow_merge_commit,omitempty"` + Topics []string `json:"topics,omitempty"` + + // Only provided when using RepositoriesService.Get while in preview + License *License `json:"license,omitempty"` + + // Additional mutable fields when creating and editing a repository + Private *bool `json:"private,omitempty"` + HasIssues *bool `json:"has_issues,omitempty"` + HasWiki *bool `json:"has_wiki,omitempty"` + HasPages *bool `json:"has_pages,omitempty"` + HasProjects *bool `json:"has_projects,omitempty"` + HasDownloads *bool `json:"has_downloads,omitempty"` + LicenseTemplate *string `json:"license_template,omitempty"` + GitignoreTemplate *string `json:"gitignore_template,omitempty"` + Archived *bool `json:"archived,omitempty"` + + // Creating an organization repository. Required for non-owners. + TeamID *int64 `json:"team_id,omitempty"` + + // API URLs + URL *string `json:"url,omitempty"` + ArchiveURL *string `json:"archive_url,omitempty"` + AssigneesURL *string `json:"assignees_url,omitempty"` + BlobsURL *string `json:"blobs_url,omitempty"` + BranchesURL *string `json:"branches_url,omitempty"` + CollaboratorsURL *string `json:"collaborators_url,omitempty"` + CommentsURL *string `json:"comments_url,omitempty"` + CommitsURL *string `json:"commits_url,omitempty"` + CompareURL *string `json:"compare_url,omitempty"` + ContentsURL *string `json:"contents_url,omitempty"` + ContributorsURL *string `json:"contributors_url,omitempty"` + DeploymentsURL *string `json:"deployments_url,omitempty"` + DownloadsURL *string `json:"downloads_url,omitempty"` + EventsURL *string `json:"events_url,omitempty"` + ForksURL *string `json:"forks_url,omitempty"` + GitCommitsURL *string `json:"git_commits_url,omitempty"` + GitRefsURL *string `json:"git_refs_url,omitempty"` + GitTagsURL *string `json:"git_tags_url,omitempty"` + HooksURL *string `json:"hooks_url,omitempty"` + IssueCommentURL *string `json:"issue_comment_url,omitempty"` + IssueEventsURL *string `json:"issue_events_url,omitempty"` + IssuesURL *string `json:"issues_url,omitempty"` + KeysURL *string `json:"keys_url,omitempty"` + LabelsURL *string `json:"labels_url,omitempty"` + LanguagesURL *string `json:"languages_url,omitempty"` + MergesURL *string `json:"merges_url,omitempty"` + MilestonesURL *string `json:"milestones_url,omitempty"` + NotificationsURL *string `json:"notifications_url,omitempty"` + PullsURL *string `json:"pulls_url,omitempty"` + ReleasesURL *string `json:"releases_url,omitempty"` + StargazersURL *string `json:"stargazers_url,omitempty"` + StatusesURL *string `json:"statuses_url,omitempty"` + SubscribersURL *string `json:"subscribers_url,omitempty"` + SubscriptionURL *string `json:"subscription_url,omitempty"` + TagsURL *string `json:"tags_url,omitempty"` + TreesURL *string `json:"trees_url,omitempty"` + TeamsURL *string `json:"teams_url,omitempty"` + + // TextMatches is only populated from search results that request text matches + // See: search.go and https://developer.github.com/v3/search/#text-match-metadata + TextMatches []TextMatch `json:"text_matches,omitempty"` +} + +func (r Repository) String() string { + return Stringify(r) +} + +// RepositoryListOptions specifies the optional parameters to the +// RepositoriesService.List method. +type RepositoryListOptions struct { + // Visibility of repositories to list. Can be one of all, public, or private. + // Default: all + Visibility string `url:"visibility,omitempty"` + + // List repos of given affiliation[s]. + // Comma-separated list of values. Can include: + // * owner: Repositories that are owned by the authenticated user. + // * collaborator: Repositories that the user has been added to as a + // collaborator. + // * organization_member: Repositories that the user has access to through + // being a member of an organization. This includes every repository on + // every team that the user is on. + // Default: owner,collaborator,organization_member + Affiliation string `url:"affiliation,omitempty"` + + // Type of repositories to list. + // Can be one of all, owner, public, private, member. Default: all + // Will cause a 422 error if used in the same request as visibility or + // affiliation. + Type string `url:"type,omitempty"` + + // How to sort the repository list. Can be one of created, updated, pushed, + // full_name. Default: full_name + Sort string `url:"sort,omitempty"` + + // Direction in which to sort repositories. Can be one of asc or desc. + // Default: when using full_name: asc; otherwise desc + Direction string `url:"direction,omitempty"` + + ListOptions +} + +// List the repositories for a user. Passing the empty string will list +// repositories for the authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/repos/#list-user-repositories +func (s *RepositoriesService) List(ctx context.Context, user string, opt *RepositoryListOptions) ([]*Repository, *Response, error) { + var u string + if user != "" { + u = fmt.Sprintf("users/%v/repos", user) + } else { + u = "user/repos" + } + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeLicensesPreview, mediaTypeCodesOfConductPreview, mediaTypeTopicsPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + var repos []*Repository + resp, err := s.client.Do(ctx, req, &repos) + if err != nil { + return nil, resp, err + } + + return repos, resp, nil +} + +// RepositoryListByOrgOptions specifies the optional parameters to the +// RepositoriesService.ListByOrg method. +type RepositoryListByOrgOptions struct { + // Type of repositories to list. Possible values are: all, public, private, + // forks, sources, member. Default is "all". + Type string `url:"type,omitempty"` + + ListOptions +} + +// ListByOrg lists the repositories for an organization. +// +// GitHub API docs: https://developer.github.com/v3/repos/#list-organization-repositories +func (s *RepositoriesService) ListByOrg(ctx context.Context, org string, opt *RepositoryListByOrgOptions) ([]*Repository, *Response, error) { + u := fmt.Sprintf("orgs/%v/repos", org) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeLicensesPreview, mediaTypeCodesOfConductPreview, mediaTypeTopicsPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + var repos []*Repository + resp, err := s.client.Do(ctx, req, &repos) + if err != nil { + return nil, resp, err + } + + return repos, resp, nil +} + +// RepositoryListAllOptions specifies the optional parameters to the +// RepositoriesService.ListAll method. +type RepositoryListAllOptions struct { + // ID of the last repository seen + Since int64 `url:"since,omitempty"` +} + +// ListAll lists all GitHub repositories in the order that they were created. +// +// GitHub API docs: https://developer.github.com/v3/repos/#list-all-public-repositories +func (s *RepositoriesService) ListAll(ctx context.Context, opt *RepositoryListAllOptions) ([]*Repository, *Response, error) { + u, err := addOptions("repositories", opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var repos []*Repository + resp, err := s.client.Do(ctx, req, &repos) + if err != nil { + return nil, resp, err + } + + return repos, resp, nil +} + +// Create a new repository. If an organization is specified, the new +// repository will be created under that org. If the empty string is +// specified, it will be created for the authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/repos/#create +func (s *RepositoriesService) Create(ctx context.Context, org string, repo *Repository) (*Repository, *Response, error) { + var u string + if org != "" { + u = fmt.Sprintf("orgs/%v/repos", org) + } else { + u = "user/repos" + } + + req, err := s.client.NewRequest("POST", u, repo) + if err != nil { + return nil, nil, err + } + + r := new(Repository) + resp, err := s.client.Do(ctx, req, r) + if err != nil { + return nil, resp, err + } + + return r, resp, nil +} + +// Get fetches a repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/#get +func (s *RepositoriesService) Get(ctx context.Context, owner, repo string) (*Repository, *Response, error) { + u := fmt.Sprintf("repos/%v/%v", owner, repo) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when the license support fully launches + // https://developer.github.com/v3/licenses/#get-a-repositorys-license + acceptHeaders := []string{mediaTypeLicensesPreview, mediaTypeCodesOfConductPreview, mediaTypeTopicsPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + repository := new(Repository) + resp, err := s.client.Do(ctx, req, repository) + if err != nil { + return nil, resp, err + } + + return repository, resp, nil +} + +// GetCodeOfConduct gets the contents of a repository's code of conduct. +// +// GitHub API docs: https://developer.github.com/v3/codes_of_conduct/#get-the-contents-of-a-repositorys-code-of-conduct +func (s *RepositoriesService) GetCodeOfConduct(ctx context.Context, owner, repo string) (*CodeOfConduct, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/community/code_of_conduct", owner, repo) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeCodesOfConductPreview) + + coc := new(CodeOfConduct) + resp, err := s.client.Do(ctx, req, coc) + if err != nil { + return nil, resp, err + } + + return coc, resp, nil +} + +// GetByID fetches a repository. +// +// Note: GetByID uses the undocumented GitHub API endpoint /repositories/:id. +func (s *RepositoriesService) GetByID(ctx context.Context, id int64) (*Repository, *Response, error) { + u := fmt.Sprintf("repositories/%d", id) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when the license support fully launches + // https://developer.github.com/v3/licenses/#get-a-repositorys-license + req.Header.Set("Accept", mediaTypeLicensesPreview) + + repository := new(Repository) + resp, err := s.client.Do(ctx, req, repository) + if err != nil { + return nil, resp, err + } + + return repository, resp, nil +} + +// Edit updates a repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/#edit +func (s *RepositoriesService) Edit(ctx context.Context, owner, repo string, repository *Repository) (*Repository, *Response, error) { + u := fmt.Sprintf("repos/%v/%v", owner, repo) + req, err := s.client.NewRequest("PATCH", u, repository) + if err != nil { + return nil, nil, err + } + + r := new(Repository) + resp, err := s.client.Do(ctx, req, r) + if err != nil { + return nil, resp, err + } + + return r, resp, nil +} + +// Delete a repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/#delete-a-repository +func (s *RepositoriesService) Delete(ctx context.Context, owner, repo string) (*Response, error) { + u := fmt.Sprintf("repos/%v/%v", owner, repo) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +// Contributor represents a repository contributor +type Contributor struct { + Login *string `json:"login,omitempty"` + ID *int64 `json:"id,omitempty"` + AvatarURL *string `json:"avatar_url,omitempty"` + GravatarID *string `json:"gravatar_id,omitempty"` + URL *string `json:"url,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` + FollowersURL *string `json:"followers_url,omitempty"` + FollowingURL *string `json:"following_url,omitempty"` + GistsURL *string `json:"gists_url,omitempty"` + StarredURL *string `json:"starred_url,omitempty"` + SubscriptionsURL *string `json:"subscriptions_url,omitempty"` + OrganizationsURL *string `json:"organizations_url,omitempty"` + ReposURL *string `json:"repos_url,omitempty"` + EventsURL *string `json:"events_url,omitempty"` + ReceivedEventsURL *string `json:"received_events_url,omitempty"` + Type *string `json:"type,omitempty"` + SiteAdmin *bool `json:"site_admin,omitempty"` + Contributions *int `json:"contributions,omitempty"` +} + +// ListContributorsOptions specifies the optional parameters to the +// RepositoriesService.ListContributors method. +type ListContributorsOptions struct { + // Include anonymous contributors in results or not + Anon string `url:"anon,omitempty"` + + ListOptions +} + +// ListContributors lists contributors for a repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/#list-contributors +func (s *RepositoriesService) ListContributors(ctx context.Context, owner string, repository string, opt *ListContributorsOptions) ([]*Contributor, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/contributors", owner, repository) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var contributor []*Contributor + resp, err := s.client.Do(ctx, req, &contributor) + if err != nil { + return nil, nil, err + } + + return contributor, resp, nil +} + +// ListLanguages lists languages for the specified repository. The returned map +// specifies the languages and the number of bytes of code written in that +// language. For example: +// +// { +// "C": 78769, +// "Python": 7769 +// } +// +// GitHub API docs: https://developer.github.com/v3/repos/#list-languages +func (s *RepositoriesService) ListLanguages(ctx context.Context, owner string, repo string) (map[string]int, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/languages", owner, repo) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + languages := make(map[string]int) + resp, err := s.client.Do(ctx, req, &languages) + if err != nil { + return nil, resp, err + } + + return languages, resp, nil +} + +// ListTeams lists the teams for the specified repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/#list-teams +func (s *RepositoriesService) ListTeams(ctx context.Context, owner string, repo string, opt *ListOptions) ([]*Team, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/teams", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + req.Header.Set("Accept", mediaTypeNestedTeamsPreview) + + var teams []*Team + resp, err := s.client.Do(ctx, req, &teams) + if err != nil { + return nil, resp, err + } + + return teams, resp, nil +} + +// RepositoryTag represents a repository tag. +type RepositoryTag struct { + Name *string `json:"name,omitempty"` + Commit *Commit `json:"commit,omitempty"` + ZipballURL *string `json:"zipball_url,omitempty"` + TarballURL *string `json:"tarball_url,omitempty"` +} + +// ListTags lists tags for the specified repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/#list-tags +func (s *RepositoriesService) ListTags(ctx context.Context, owner string, repo string, opt *ListOptions) ([]*RepositoryTag, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/tags", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var tags []*RepositoryTag + resp, err := s.client.Do(ctx, req, &tags) + if err != nil { + return nil, resp, err + } + + return tags, resp, nil +} + +// Branch represents a repository branch +type Branch struct { + Name *string `json:"name,omitempty"` + Commit *RepositoryCommit `json:"commit,omitempty"` + Protected *bool `json:"protected,omitempty"` +} + +// Protection represents a repository branch's protection. +type Protection struct { + RequiredStatusChecks *RequiredStatusChecks `json:"required_status_checks"` + RequiredPullRequestReviews *PullRequestReviewsEnforcement `json:"required_pull_request_reviews"` + EnforceAdmins *AdminEnforcement `json:"enforce_admins"` + Restrictions *BranchRestrictions `json:"restrictions"` +} + +// ProtectionRequest represents a request to create/edit a branch's protection. +type ProtectionRequest struct { + RequiredStatusChecks *RequiredStatusChecks `json:"required_status_checks"` + RequiredPullRequestReviews *PullRequestReviewsEnforcementRequest `json:"required_pull_request_reviews"` + EnforceAdmins bool `json:"enforce_admins"` + Restrictions *BranchRestrictionsRequest `json:"restrictions"` +} + +// RequiredStatusChecks represents the protection status of a individual branch. +type RequiredStatusChecks struct { + // Require branches to be up to date before merging. (Required.) + Strict bool `json:"strict"` + // The list of status checks to require in order to merge into this + // branch. (Required; use []string{} instead of nil for empty list.) + Contexts []string `json:"contexts"` +} + +// PullRequestReviewsEnforcement represents the pull request reviews enforcement of a protected branch. +type PullRequestReviewsEnforcement struct { + // Specifies which users and teams can dismiss pull request reviews. + DismissalRestrictions DismissalRestrictions `json:"dismissal_restrictions"` + // Specifies if approved reviews are dismissed automatically, when a new commit is pushed. + DismissStaleReviews bool `json:"dismiss_stale_reviews"` + // RequireCodeOwnerReviews specifies if an approved review is required in pull requests including files with a designated code owner. + RequireCodeOwnerReviews bool `json:"require_code_owner_reviews"` +} + +// PullRequestReviewsEnforcementRequest represents request to set the pull request review +// enforcement of a protected branch. It is separate from PullRequestReviewsEnforcement above +// because the request structure is different from the response structure. +type PullRequestReviewsEnforcementRequest struct { + // Specifies which users and teams should be allowed to dismiss pull request reviews. + // User and team dismissal restrictions are only available for + // organization-owned repositories. Must be nil for personal repositories. + DismissalRestrictionsRequest *DismissalRestrictionsRequest `json:"dismissal_restrictions,omitempty"` + // Specifies if approved reviews can be dismissed automatically, when a new commit is pushed. (Required) + DismissStaleReviews bool `json:"dismiss_stale_reviews"` + // RequireCodeOwnerReviews specifies if an approved review is required in pull requests including files with a designated code owner. + RequireCodeOwnerReviews bool `json:"require_code_owner_reviews"` +} + +// PullRequestReviewsEnforcementUpdate represents request to patch the pull request review +// enforcement of a protected branch. It is separate from PullRequestReviewsEnforcementRequest above +// because the patch request does not require all fields to be initialized. +type PullRequestReviewsEnforcementUpdate struct { + // Specifies which users and teams can dismiss pull request reviews. Can be omitted. + DismissalRestrictionsRequest *DismissalRestrictionsRequest `json:"dismissal_restrictions,omitempty"` + // Specifies if approved reviews can be dismissed automatically, when a new commit is pushed. Can be omitted. + DismissStaleReviews *bool `json:"dismiss_stale_reviews,omitempty"` + // RequireCodeOwnerReviews specifies if an approved review is required in pull requests including files with a designated code owner. + RequireCodeOwnerReviews bool `json:"require_code_owner_reviews,omitempty"` +} + +// AdminEnforcement represents the configuration to enforce required status checks for repository administrators. +type AdminEnforcement struct { + URL *string `json:"url,omitempty"` + Enabled bool `json:"enabled"` +} + +// BranchRestrictions represents the restriction that only certain users or +// teams may push to a branch. +type BranchRestrictions struct { + // The list of user logins with push access. + Users []*User `json:"users"` + // The list of team slugs with push access. + Teams []*Team `json:"teams"` +} + +// BranchRestrictionsRequest represents the request to create/edit the +// restriction that only certain users or teams may push to a branch. It is +// separate from BranchRestrictions above because the request structure is +// different from the response structure. +type BranchRestrictionsRequest struct { + // The list of user logins with push access. (Required; use []string{} instead of nil for empty list.) + Users []string `json:"users"` + // The list of team slugs with push access. (Required; use []string{} instead of nil for empty list.) + Teams []string `json:"teams"` +} + +// DismissalRestrictions specifies which users and teams can dismiss pull request reviews. +type DismissalRestrictions struct { + // The list of users who can dimiss pull request reviews. + Users []*User `json:"users"` + // The list of teams which can dismiss pull request reviews. + Teams []*Team `json:"teams"` +} + +// DismissalRestrictionsRequest represents the request to create/edit the +// restriction to allows only specific users or teams to dimiss pull request reviews. It is +// separate from DismissalRestrictions above because the request structure is +// different from the response structure. +// Note: Both Users and Teams must be nil, or both must be non-nil. +type DismissalRestrictionsRequest struct { + // The list of user logins who can dismiss pull request reviews. (Required; use nil to disable dismissal_restrictions or &[]string{} otherwise.) + Users *[]string `json:"users,omitempty"` + // The list of team slugs which can dismiss pull request reviews. (Required; use nil to disable dismissal_restrictions or &[]string{} otherwise.) + Teams *[]string `json:"teams,omitempty"` +} + +// ListBranches lists branches for the specified repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/#list-branches +func (s *RepositoriesService) ListBranches(ctx context.Context, owner string, repo string, opt *ListOptions) ([]*Branch, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/branches", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypeProtectedBranchesPreview) + + var branches []*Branch + resp, err := s.client.Do(ctx, req, &branches) + if err != nil { + return nil, resp, err + } + + return branches, resp, nil +} + +// GetBranch gets the specified branch for a repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/#get-branch +func (s *RepositoriesService) GetBranch(ctx context.Context, owner, repo, branch string) (*Branch, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/branches/%v", owner, repo, branch) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypeProtectedBranchesPreview) + + b := new(Branch) + resp, err := s.client.Do(ctx, req, b) + if err != nil { + return nil, resp, err + } + + return b, resp, nil +} + +// GetBranchProtection gets the protection of a given branch. +// +// GitHub API docs: https://developer.github.com/v3/repos/branches/#get-branch-protection +func (s *RepositoriesService) GetBranchProtection(ctx context.Context, owner, repo, branch string) (*Protection, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/branches/%v/protection", owner, repo, branch) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypeProtectedBranchesPreview) + + p := new(Protection) + resp, err := s.client.Do(ctx, req, p) + if err != nil { + return nil, resp, err + } + + return p, resp, nil +} + +// GetRequiredStatusChecks gets the required status checks for a given protected branch. +// +// GitHub API docs: https://developer.github.com/v3/repos/branches/#get-required-status-checks-of-protected-branch +func (s *RepositoriesService) GetRequiredStatusChecks(ctx context.Context, owner, repo, branch string) (*RequiredStatusChecks, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_status_checks", owner, repo, branch) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypeProtectedBranchesPreview) + + p := new(RequiredStatusChecks) + resp, err := s.client.Do(ctx, req, p) + if err != nil { + return nil, resp, err + } + + return p, resp, nil +} + +// ListRequiredStatusChecksContexts lists the required status checks contexts for a given protected branch. +// +// GitHub API docs: https://developer.github.com/v3/repos/branches/#list-required-status-checks-contexts-of-protected-branch +func (s *RepositoriesService) ListRequiredStatusChecksContexts(ctx context.Context, owner, repo, branch string) (contexts []string, resp *Response, err error) { + u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_status_checks/contexts", owner, repo, branch) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypeProtectedBranchesPreview) + + resp, err = s.client.Do(ctx, req, &contexts) + if err != nil { + return nil, resp, err + } + + return contexts, resp, nil +} + +// UpdateBranchProtection updates the protection of a given branch. +// +// GitHub API docs: https://developer.github.com/v3/repos/branches/#update-branch-protection +func (s *RepositoriesService) UpdateBranchProtection(ctx context.Context, owner, repo, branch string, preq *ProtectionRequest) (*Protection, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/branches/%v/protection", owner, repo, branch) + req, err := s.client.NewRequest("PUT", u, preq) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypeProtectedBranchesPreview) + + p := new(Protection) + resp, err := s.client.Do(ctx, req, p) + if err != nil { + return nil, resp, err + } + + return p, resp, nil +} + +// RemoveBranchProtection removes the protection of a given branch. +// +// GitHub API docs: https://developer.github.com/v3/repos/branches/#remove-branch-protection +func (s *RepositoriesService) RemoveBranchProtection(ctx context.Context, owner, repo, branch string) (*Response, error) { + u := fmt.Sprintf("repos/%v/%v/branches/%v/protection", owner, repo, branch) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypeProtectedBranchesPreview) + + return s.client.Do(ctx, req, nil) +} + +// License gets the contents of a repository's license if one is detected. +// +// GitHub API docs: https://developer.github.com/v3/licenses/#get-the-contents-of-a-repositorys-license +func (s *RepositoriesService) License(ctx context.Context, owner, repo string) (*RepositoryLicense, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/license", owner, repo) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + r := &RepositoryLicense{} + resp, err := s.client.Do(ctx, req, r) + if err != nil { + return nil, resp, err + } + + return r, resp, nil +} + +// GetPullRequestReviewEnforcement gets pull request review enforcement of a protected branch. +// +// GitHub API docs: https://developer.github.com/v3/repos/branches/#get-pull-request-review-enforcement-of-protected-branch +func (s *RepositoriesService) GetPullRequestReviewEnforcement(ctx context.Context, owner, repo, branch string) (*PullRequestReviewsEnforcement, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_pull_request_reviews", owner, repo, branch) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypeProtectedBranchesPreview) + + r := new(PullRequestReviewsEnforcement) + resp, err := s.client.Do(ctx, req, r) + if err != nil { + return nil, resp, err + } + + return r, resp, nil +} + +// UpdatePullRequestReviewEnforcement patches pull request review enforcement of a protected branch. +// It requires admin access and branch protection to be enabled. +// +// GitHub API docs: https://developer.github.com/v3/repos/branches/#update-pull-request-review-enforcement-of-protected-branch +func (s *RepositoriesService) UpdatePullRequestReviewEnforcement(ctx context.Context, owner, repo, branch string, patch *PullRequestReviewsEnforcementUpdate) (*PullRequestReviewsEnforcement, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_pull_request_reviews", owner, repo, branch) + req, err := s.client.NewRequest("PATCH", u, patch) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypeProtectedBranchesPreview) + + r := new(PullRequestReviewsEnforcement) + resp, err := s.client.Do(ctx, req, r) + if err != nil { + return nil, resp, err + } + + return r, resp, err +} + +// DisableDismissalRestrictions disables dismissal restrictions of a protected branch. +// It requires admin access and branch protection to be enabled. +// +// GitHub API docs: https://developer.github.com/v3/repos/branches/#update-pull-request-review-enforcement-of-protected-branch +func (s *RepositoriesService) DisableDismissalRestrictions(ctx context.Context, owner, repo, branch string) (*PullRequestReviewsEnforcement, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_pull_request_reviews", owner, repo, branch) + + data := struct { + R []interface{} `json:"dismissal_restrictions"` + }{[]interface{}{}} + + req, err := s.client.NewRequest("PATCH", u, data) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypeProtectedBranchesPreview) + + r := new(PullRequestReviewsEnforcement) + resp, err := s.client.Do(ctx, req, r) + if err != nil { + return nil, resp, err + } + + return r, resp, err +} + +// RemovePullRequestReviewEnforcement removes pull request enforcement of a protected branch. +// +// GitHub API docs: https://developer.github.com/v3/repos/branches/#remove-pull-request-review-enforcement-of-protected-branch +func (s *RepositoriesService) RemovePullRequestReviewEnforcement(ctx context.Context, owner, repo, branch string) (*Response, error) { + u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_pull_request_reviews", owner, repo, branch) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypeProtectedBranchesPreview) + + return s.client.Do(ctx, req, nil) +} + +// GetAdminEnforcement gets admin enforcement information of a protected branch. +// +// GitHub API docs: https://developer.github.com/v3/repos/branches/#get-admin-enforcement-of-protected-branch +func (s *RepositoriesService) GetAdminEnforcement(ctx context.Context, owner, repo, branch string) (*AdminEnforcement, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/enforce_admins", owner, repo, branch) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypeProtectedBranchesPreview) + + r := new(AdminEnforcement) + resp, err := s.client.Do(ctx, req, r) + if err != nil { + return nil, resp, err + } + + return r, resp, nil +} + +// AddAdminEnforcement adds admin enforcement to a protected branch. +// It requires admin access and branch protection to be enabled. +// +// GitHub API docs: https://developer.github.com/v3/repos/branches/#add-admin-enforcement-of-protected-branch +func (s *RepositoriesService) AddAdminEnforcement(ctx context.Context, owner, repo, branch string) (*AdminEnforcement, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/enforce_admins", owner, repo, branch) + req, err := s.client.NewRequest("POST", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypeProtectedBranchesPreview) + + r := new(AdminEnforcement) + resp, err := s.client.Do(ctx, req, r) + if err != nil { + return nil, resp, err + } + + return r, resp, err +} + +// RemoveAdminEnforcement removes admin enforcement from a protected branch. +// +// GitHub API docs: https://developer.github.com/v3/repos/branches/#remove-admin-enforcement-of-protected-branch +func (s *RepositoriesService) RemoveAdminEnforcement(ctx context.Context, owner, repo, branch string) (*Response, error) { + u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/enforce_admins", owner, repo, branch) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypeProtectedBranchesPreview) + + return s.client.Do(ctx, req, nil) +} + +// repositoryTopics represents a collection of repository topics. +type repositoryTopics struct { + Names []string `json:"names"` +} + +// ListAllTopics lists topics for a repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/#list-all-topics-for-a-repository +func (s *RepositoriesService) ListAllTopics(ctx context.Context, owner, repo string) ([]string, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/topics", owner, repo) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeTopicsPreview) + + topics := new(repositoryTopics) + resp, err := s.client.Do(ctx, req, topics) + if err != nil { + return nil, resp, err + } + + return topics.Names, resp, nil +} + +// ReplaceAllTopics replaces topics for a repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/#replace-all-topics-for-a-repository +func (s *RepositoriesService) ReplaceAllTopics(ctx context.Context, owner, repo string, topics []string) ([]string, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/topics", owner, repo) + t := &repositoryTopics{ + Names: topics, + } + if t.Names == nil { + t.Names = []string{} + } + req, err := s.client.NewRequest("PUT", u, t) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeTopicsPreview) + + t = new(repositoryTopics) + resp, err := s.client.Do(ctx, req, t) + if err != nil { + return nil, resp, err + } + + return t.Names, resp, nil +} + +// TransferRequest represents a request to transfer a repository. +type TransferRequest struct { + NewOwner string `json:"new_owner"` + TeamID []int64 `json:"team_id,omitempty"` +} + +// Transfer transfers a repository from one account or organization to another. +// +// This method might return an *AcceptedError and a status code of +// 202. This is because this is the status that GitHub returns to signify that +// it has now scheduled the transfer of the repository in a background task. +// A follow up request, after a delay of a second or so, should result +// in a successful request. +// +// GitHub API docs: https://developer.github.com/v3/repos/#transfer-a-repository +func (s *RepositoriesService) Transfer(ctx context.Context, owner, repo string, transfer TransferRequest) (*Repository, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/transfer", owner, repo) + + req, err := s.client.NewRequest("POST", u, &transfer) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeRepositoryTransferPreview) + + r := new(Repository) + resp, err := s.client.Do(ctx, req, r) + if err != nil { + return nil, resp, err + } + + return r, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/repos_collaborators.go b/vendor/github.com/google/go-github/github/repos_collaborators.go new file mode 100644 index 00000000..61ee9d39 --- /dev/null +++ b/vendor/github.com/google/go-github/github/repos_collaborators.go @@ -0,0 +1,140 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// ListCollaboratorsOptions specifies the optional parameters to the +// RepositoriesService.ListCollaborators method. +type ListCollaboratorsOptions struct { + // Affiliation specifies how collaborators should be filtered by their affiliation. + // Possible values are: + // outside - All outside collaborators of an organization-owned repository + // direct - All collaborators with permissions to an organization-owned repository, + // regardless of organization membership status + // all - All collaborators the authenticated user can see + // + // Default value is "all". + Affiliation string `url:"affiliation,omitempty"` + + ListOptions +} + +// ListCollaborators lists the GitHub users that have access to the repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/collaborators/#list-collaborators +func (s *RepositoriesService) ListCollaborators(ctx context.Context, owner, repo string, opt *ListCollaboratorsOptions) ([]*User, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/collaborators", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + req.Header.Set("Accept", mediaTypeNestedTeamsPreview) + + var users []*User + resp, err := s.client.Do(ctx, req, &users) + if err != nil { + return nil, resp, err + } + + return users, resp, nil +} + +// IsCollaborator checks whether the specified GitHub user has collaborator +// access to the given repo. +// Note: This will return false if the user is not a collaborator OR the user +// is not a GitHub user. +// +// GitHub API docs: https://developer.github.com/v3/repos/collaborators/#get +func (s *RepositoriesService) IsCollaborator(ctx context.Context, owner, repo, user string) (bool, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/collaborators/%v", owner, repo, user) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return false, nil, err + } + + resp, err := s.client.Do(ctx, req, nil) + isCollab, err := parseBoolResponse(err) + return isCollab, resp, err +} + +// RepositoryPermissionLevel represents the permission level an organization +// member has for a given repository. +type RepositoryPermissionLevel struct { + // Possible values: "admin", "write", "read", "none" + Permission *string `json:"permission,omitempty"` + + User *User `json:"user,omitempty"` +} + +// GetPermissionLevel retrieves the specific permission level a collaborator has for a given repository. +// GitHub API docs: https://developer.github.com/v3/repos/collaborators/#review-a-users-permission-level +func (s *RepositoriesService) GetPermissionLevel(ctx context.Context, owner, repo, user string) (*RepositoryPermissionLevel, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/collaborators/%v/permission", owner, repo, user) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + rpl := new(RepositoryPermissionLevel) + resp, err := s.client.Do(ctx, req, rpl) + if err != nil { + return nil, resp, err + } + return rpl, resp, nil +} + +// RepositoryAddCollaboratorOptions specifies the optional parameters to the +// RepositoriesService.AddCollaborator method. +type RepositoryAddCollaboratorOptions struct { + // Permission specifies the permission to grant the user on this repository. + // Possible values are: + // pull - team members can pull, but not push to or administer this repository + // push - team members can pull and push, but not administer this repository + // admin - team members can pull, push and administer this repository + // + // Default value is "push". This option is only valid for organization-owned repositories. + Permission string `json:"permission,omitempty"` +} + +// AddCollaborator sends an invitation to the specified GitHub user +// to become a collaborator to the given repo. +// +// GitHub API docs: https://developer.github.com/v3/repos/collaborators/#add-user-as-a-collaborator +func (s *RepositoriesService) AddCollaborator(ctx context.Context, owner, repo, user string, opt *RepositoryAddCollaboratorOptions) (*Response, error) { + u := fmt.Sprintf("repos/%v/%v/collaborators/%v", owner, repo, user) + req, err := s.client.NewRequest("PUT", u, opt) + if err != nil { + return nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeRepositoryInvitationsPreview) + + return s.client.Do(ctx, req, nil) +} + +// RemoveCollaborator removes the specified GitHub user as collaborator from the given repo. +// Note: Does not return error if a valid user that is not a collaborator is removed. +// +// GitHub API docs: https://developer.github.com/v3/repos/collaborators/#remove-collaborator +func (s *RepositoriesService) RemoveCollaborator(ctx context.Context, owner, repo, user string) (*Response, error) { + u := fmt.Sprintf("repos/%v/%v/collaborators/%v", owner, repo, user) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/repos_comments.go b/vendor/github.com/google/go-github/github/repos_comments.go new file mode 100644 index 00000000..fa2377d4 --- /dev/null +++ b/vendor/github.com/google/go-github/github/repos_comments.go @@ -0,0 +1,161 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" + "time" +) + +// RepositoryComment represents a comment for a commit, file, or line in a repository. +type RepositoryComment struct { + HTMLURL *string `json:"html_url,omitempty"` + URL *string `json:"url,omitempty"` + ID *int64 `json:"id,omitempty"` + CommitID *string `json:"commit_id,omitempty"` + User *User `json:"user,omitempty"` + Reactions *Reactions `json:"reactions,omitempty"` + CreatedAt *time.Time `json:"created_at,omitempty"` + UpdatedAt *time.Time `json:"updated_at,omitempty"` + + // User-mutable fields + Body *string `json:"body"` + // User-initialized fields + Path *string `json:"path,omitempty"` + Position *int `json:"position,omitempty"` +} + +func (r RepositoryComment) String() string { + return Stringify(r) +} + +// ListComments lists all the comments for the repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/comments/#list-commit-comments-for-a-repository +func (s *RepositoriesService) ListComments(ctx context.Context, owner, repo string, opt *ListOptions) ([]*RepositoryComment, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/comments", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeReactionsPreview) + + var comments []*RepositoryComment + resp, err := s.client.Do(ctx, req, &comments) + if err != nil { + return nil, resp, err + } + + return comments, resp, nil +} + +// ListCommitComments lists all the comments for a given commit SHA. +// +// GitHub API docs: https://developer.github.com/v3/repos/comments/#list-comments-for-a-single-commit +func (s *RepositoriesService) ListCommitComments(ctx context.Context, owner, repo, sha string, opt *ListOptions) ([]*RepositoryComment, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/commits/%v/comments", owner, repo, sha) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeReactionsPreview) + + var comments []*RepositoryComment + resp, err := s.client.Do(ctx, req, &comments) + if err != nil { + return nil, resp, err + } + + return comments, resp, nil +} + +// CreateComment creates a comment for the given commit. +// Note: GitHub allows for comments to be created for non-existing files and positions. +// +// GitHub API docs: https://developer.github.com/v3/repos/comments/#create-a-commit-comment +func (s *RepositoriesService) CreateComment(ctx context.Context, owner, repo, sha string, comment *RepositoryComment) (*RepositoryComment, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/commits/%v/comments", owner, repo, sha) + req, err := s.client.NewRequest("POST", u, comment) + if err != nil { + return nil, nil, err + } + + c := new(RepositoryComment) + resp, err := s.client.Do(ctx, req, c) + if err != nil { + return nil, resp, err + } + + return c, resp, nil +} + +// GetComment gets a single comment from a repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/comments/#get-a-single-commit-comment +func (s *RepositoriesService) GetComment(ctx context.Context, owner, repo string, id int64) (*RepositoryComment, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/comments/%v", owner, repo, id) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeReactionsPreview) + + c := new(RepositoryComment) + resp, err := s.client.Do(ctx, req, c) + if err != nil { + return nil, resp, err + } + + return c, resp, nil +} + +// UpdateComment updates the body of a single comment. +// +// GitHub API docs: https://developer.github.com/v3/repos/comments/#update-a-commit-comment +func (s *RepositoriesService) UpdateComment(ctx context.Context, owner, repo string, id int64, comment *RepositoryComment) (*RepositoryComment, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/comments/%v", owner, repo, id) + req, err := s.client.NewRequest("PATCH", u, comment) + if err != nil { + return nil, nil, err + } + + c := new(RepositoryComment) + resp, err := s.client.Do(ctx, req, c) + if err != nil { + return nil, resp, err + } + + return c, resp, nil +} + +// DeleteComment deletes a single comment from a repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/comments/#delete-a-commit-comment +func (s *RepositoriesService) DeleteComment(ctx context.Context, owner, repo string, id int64) (*Response, error) { + u := fmt.Sprintf("repos/%v/%v/comments/%v", owner, repo, id) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/repos_commits.go b/vendor/github.com/google/go-github/github/repos_commits.go new file mode 100644 index 00000000..04847373 --- /dev/null +++ b/vendor/github.com/google/go-github/github/repos_commits.go @@ -0,0 +1,237 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "bytes" + "context" + "fmt" + "time" +) + +// RepositoryCommit represents a commit in a repo. +// Note that it's wrapping a Commit, so author/committer information is in two places, +// but contain different details about them: in RepositoryCommit "github details", in Commit - "git details". +type RepositoryCommit struct { + SHA *string `json:"sha,omitempty"` + Commit *Commit `json:"commit,omitempty"` + Author *User `json:"author,omitempty"` + Committer *User `json:"committer,omitempty"` + Parents []Commit `json:"parents,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` + URL *string `json:"url,omitempty"` + CommentsURL *string `json:"comments_url,omitempty"` + + // Details about how many changes were made in this commit. Only filled in during GetCommit! + Stats *CommitStats `json:"stats,omitempty"` + // Details about which files, and how this commit touched. Only filled in during GetCommit! + Files []CommitFile `json:"files,omitempty"` +} + +func (r RepositoryCommit) String() string { + return Stringify(r) +} + +// CommitStats represents the number of additions / deletions from a file in a given RepositoryCommit or GistCommit. +type CommitStats struct { + Additions *int `json:"additions,omitempty"` + Deletions *int `json:"deletions,omitempty"` + Total *int `json:"total,omitempty"` +} + +func (c CommitStats) String() string { + return Stringify(c) +} + +// CommitFile represents a file modified in a commit. +type CommitFile struct { + SHA *string `json:"sha,omitempty"` + Filename *string `json:"filename,omitempty"` + Additions *int `json:"additions,omitempty"` + Deletions *int `json:"deletions,omitempty"` + Changes *int `json:"changes,omitempty"` + Status *string `json:"status,omitempty"` + Patch *string `json:"patch,omitempty"` + BlobURL *string `json:"blob_url,omitempty"` + RawURL *string `json:"raw_url,omitempty"` + ContentsURL *string `json:"contents_url,omitempty"` +} + +func (c CommitFile) String() string { + return Stringify(c) +} + +// CommitsComparison is the result of comparing two commits. +// See CompareCommits() for details. +type CommitsComparison struct { + BaseCommit *RepositoryCommit `json:"base_commit,omitempty"` + MergeBaseCommit *RepositoryCommit `json:"merge_base_commit,omitempty"` + + // Head can be 'behind' or 'ahead' + Status *string `json:"status,omitempty"` + AheadBy *int `json:"ahead_by,omitempty"` + BehindBy *int `json:"behind_by,omitempty"` + TotalCommits *int `json:"total_commits,omitempty"` + + Commits []RepositoryCommit `json:"commits,omitempty"` + + Files []CommitFile `json:"files,omitempty"` + + HTMLURL *string `json:"html_url,omitempty"` + PermalinkURL *string `json:"permalink_url,omitempty"` + DiffURL *string `json:"diff_url,omitempty"` + PatchURL *string `json:"patch_url,omitempty"` + URL *string `json:"url,omitempty"` // API URL. +} + +func (c CommitsComparison) String() string { + return Stringify(c) +} + +// CommitsListOptions specifies the optional parameters to the +// RepositoriesService.ListCommits method. +type CommitsListOptions struct { + // SHA or branch to start listing Commits from. + SHA string `url:"sha,omitempty"` + + // Path that should be touched by the returned Commits. + Path string `url:"path,omitempty"` + + // Author of by which to filter Commits. + Author string `url:"author,omitempty"` + + // Since when should Commits be included in the response. + Since time.Time `url:"since,omitempty"` + + // Until when should Commits be included in the response. + Until time.Time `url:"until,omitempty"` + + ListOptions +} + +// ListCommits lists the commits of a repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/commits/#list +func (s *RepositoriesService) ListCommits(ctx context.Context, owner, repo string, opt *CommitsListOptions) ([]*RepositoryCommit, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/commits", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGitSigningPreview) + + var commits []*RepositoryCommit + resp, err := s.client.Do(ctx, req, &commits) + if err != nil { + return nil, resp, err + } + + return commits, resp, nil +} + +// GetCommit fetches the specified commit, including all details about it. +// +// GitHub API docs: https://developer.github.com/v3/repos/commits/#get-a-single-commit +// See also: https://developer.github.com/v3/git/commits/#get-a-single-commit provides the same functionality +func (s *RepositoriesService) GetCommit(ctx context.Context, owner, repo, sha string) (*RepositoryCommit, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/commits/%v", owner, repo, sha) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGitSigningPreview) + + commit := new(RepositoryCommit) + resp, err := s.client.Do(ctx, req, commit) + if err != nil { + return nil, resp, err + } + + return commit, resp, nil +} + +// GetCommitRaw fetches the specified commit in raw (diff or patch) format. +func (s *RepositoriesService) GetCommitRaw(ctx context.Context, owner string, repo string, sha string, opt RawOptions) (string, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/commits/%v", owner, repo, sha) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return "", nil, err + } + + switch opt.Type { + case Diff: + req.Header.Set("Accept", mediaTypeV3Diff) + case Patch: + req.Header.Set("Accept", mediaTypeV3Patch) + default: + return "", nil, fmt.Errorf("unsupported raw type %d", opt.Type) + } + + var buf bytes.Buffer + resp, err := s.client.Do(ctx, req, &buf) + if err != nil { + return "", resp, err + } + + return buf.String(), resp, nil +} + +// GetCommitSHA1 gets the SHA-1 of a commit reference. If a last-known SHA1 is +// supplied and no new commits have occurred, a 304 Unmodified response is returned. +// +// GitHub API docs: https://developer.github.com/v3/repos/commits/#get-the-sha-1-of-a-commit-reference +func (s *RepositoriesService) GetCommitSHA1(ctx context.Context, owner, repo, ref, lastSHA string) (string, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/commits/%v", owner, repo, ref) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return "", nil, err + } + if lastSHA != "" { + req.Header.Set("If-None-Match", `"`+lastSHA+`"`) + } + + req.Header.Set("Accept", mediaTypeV3SHA) + + var buf bytes.Buffer + resp, err := s.client.Do(ctx, req, &buf) + if err != nil { + return "", resp, err + } + + return buf.String(), resp, nil +} + +// CompareCommits compares a range of commits with each other. +// todo: support media formats - https://github.com/google/go-github/issues/6 +// +// GitHub API docs: https://developer.github.com/v3/repos/commits/index.html#compare-two-commits +func (s *RepositoriesService) CompareCommits(ctx context.Context, owner, repo string, base, head string) (*CommitsComparison, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/compare/%v...%v", owner, repo, base, head) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + comp := new(CommitsComparison) + resp, err := s.client.Do(ctx, req, comp) + if err != nil { + return nil, resp, err + } + + return comp, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/repos_community_health.go b/vendor/github.com/google/go-github/github/repos_community_health.go new file mode 100644 index 00000000..b5c75d6f --- /dev/null +++ b/vendor/github.com/google/go-github/github/repos_community_health.go @@ -0,0 +1,57 @@ +// Copyright 2017 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" + "time" +) + +// Metric represents the different fields for one file in community health files. +type Metric struct { + Name *string `json:"name"` + Key *string `json:"key"` + URL *string `json:"url"` + HTMLURL *string `json:"html_url"` +} + +// CommunityHealthFiles represents the different files in the community health metrics response. +type CommunityHealthFiles struct { + CodeOfConduct *Metric `json:"code_of_conduct"` + Contributing *Metric `json:"contributing"` + License *Metric `json:"license"` + Readme *Metric `json:"readme"` +} + +// CommunityHealthMetrics represents a response containing the community metrics of a repository. +type CommunityHealthMetrics struct { + HealthPercentage *int `json:"health_percentage"` + Files *CommunityHealthFiles `json:"files"` + UpdatedAt *time.Time `json:"updated_at"` +} + +// GetCommunityHealthMetrics retrieves all the community health metrics for a repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/community/#retrieve-community-health-metrics +func (s *RepositoriesService) GetCommunityHealthMetrics(ctx context.Context, owner, repo string) (*CommunityHealthMetrics, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/community/profile", owner, repo) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeRepositoryCommunityHealthMetricsPreview) + + metrics := &CommunityHealthMetrics{} + resp, err := s.client.Do(ctx, req, metrics) + if err != nil { + return nil, resp, err + } + + return metrics, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/repos_contents.go b/vendor/github.com/google/go-github/github/repos_contents.go new file mode 100644 index 00000000..ffb56b90 --- /dev/null +++ b/vendor/github.com/google/go-github/github/repos_contents.go @@ -0,0 +1,266 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Repository contents API methods. +// GitHub API docs: https://developer.github.com/v3/repos/contents/ + +package github + +import ( + "context" + "encoding/base64" + "encoding/json" + "fmt" + "io" + "net/http" + "net/url" + "path" +) + +// RepositoryContent represents a file or directory in a github repository. +type RepositoryContent struct { + Type *string `json:"type,omitempty"` + Encoding *string `json:"encoding,omitempty"` + Size *int `json:"size,omitempty"` + Name *string `json:"name,omitempty"` + Path *string `json:"path,omitempty"` + // Content contains the actual file content, which may be encoded. + // Callers should call GetContent which will decode the content if + // necessary. + Content *string `json:"content,omitempty"` + SHA *string `json:"sha,omitempty"` + URL *string `json:"url,omitempty"` + GitURL *string `json:"git_url,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` + DownloadURL *string `json:"download_url,omitempty"` +} + +// RepositoryContentResponse holds the parsed response from CreateFile, UpdateFile, and DeleteFile. +type RepositoryContentResponse struct { + Content *RepositoryContent `json:"content,omitempty"` + Commit `json:"commit,omitempty"` +} + +// RepositoryContentFileOptions specifies optional parameters for CreateFile, UpdateFile, and DeleteFile. +type RepositoryContentFileOptions struct { + Message *string `json:"message,omitempty"` + Content []byte `json:"content,omitempty"` // unencoded + SHA *string `json:"sha,omitempty"` + Branch *string `json:"branch,omitempty"` + Author *CommitAuthor `json:"author,omitempty"` + Committer *CommitAuthor `json:"committer,omitempty"` +} + +// RepositoryContentGetOptions represents an optional ref parameter, which can be a SHA, +// branch, or tag +type RepositoryContentGetOptions struct { + Ref string `url:"ref,omitempty"` +} + +// String converts RepositoryContent to a string. It's primarily for testing. +func (r RepositoryContent) String() string { + return Stringify(r) +} + +// GetContent returns the content of r, decoding it if necessary. +func (r *RepositoryContent) GetContent() (string, error) { + var encoding string + if r.Encoding != nil { + encoding = *r.Encoding + } + + switch encoding { + case "base64": + c, err := base64.StdEncoding.DecodeString(*r.Content) + return string(c), err + case "": + if r.Content == nil { + return "", nil + } + return *r.Content, nil + default: + return "", fmt.Errorf("unsupported content encoding: %v", encoding) + } +} + +// GetReadme gets the Readme file for the repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/contents/#get-the-readme +func (s *RepositoriesService) GetReadme(ctx context.Context, owner, repo string, opt *RepositoryContentGetOptions) (*RepositoryContent, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/readme", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + readme := new(RepositoryContent) + resp, err := s.client.Do(ctx, req, readme) + if err != nil { + return nil, resp, err + } + return readme, resp, nil +} + +// DownloadContents returns an io.ReadCloser that reads the contents of the +// specified file. This function will work with files of any size, as opposed +// to GetContents which is limited to 1 Mb files. It is the caller's +// responsibility to close the ReadCloser. +func (s *RepositoriesService) DownloadContents(ctx context.Context, owner, repo, filepath string, opt *RepositoryContentGetOptions) (io.ReadCloser, error) { + dir := path.Dir(filepath) + filename := path.Base(filepath) + _, dirContents, _, err := s.GetContents(ctx, owner, repo, dir, opt) + if err != nil { + return nil, err + } + for _, contents := range dirContents { + if *contents.Name == filename { + if contents.DownloadURL == nil || *contents.DownloadURL == "" { + return nil, fmt.Errorf("No download link found for %s", filepath) + } + resp, err := s.client.client.Get(*contents.DownloadURL) + if err != nil { + return nil, err + } + return resp.Body, nil + } + } + return nil, fmt.Errorf("No file named %s found in %s", filename, dir) +} + +// GetContents can return either the metadata and content of a single file +// (when path references a file) or the metadata of all the files and/or +// subdirectories of a directory (when path references a directory). To make it +// easy to distinguish between both result types and to mimic the API as much +// as possible, both result types will be returned but only one will contain a +// value and the other will be nil. +// +// GitHub API docs: https://developer.github.com/v3/repos/contents/#get-contents +func (s *RepositoriesService) GetContents(ctx context.Context, owner, repo, path string, opt *RepositoryContentGetOptions) (fileContent *RepositoryContent, directoryContent []*RepositoryContent, resp *Response, err error) { + escapedPath := (&url.URL{Path: path}).String() + u := fmt.Sprintf("repos/%s/%s/contents/%s", owner, repo, escapedPath) + u, err = addOptions(u, opt) + if err != nil { + return nil, nil, nil, err + } + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, nil, err + } + var rawJSON json.RawMessage + resp, err = s.client.Do(ctx, req, &rawJSON) + if err != nil { + return nil, nil, resp, err + } + fileUnmarshalError := json.Unmarshal(rawJSON, &fileContent) + if fileUnmarshalError == nil { + return fileContent, nil, resp, nil + } + directoryUnmarshalError := json.Unmarshal(rawJSON, &directoryContent) + if directoryUnmarshalError == nil { + return nil, directoryContent, resp, nil + } + return nil, nil, resp, fmt.Errorf("unmarshalling failed for both file and directory content: %s and %s", fileUnmarshalError, directoryUnmarshalError) +} + +// CreateFile creates a new file in a repository at the given path and returns +// the commit and file metadata. +// +// GitHub API docs: https://developer.github.com/v3/repos/contents/#create-a-file +func (s *RepositoriesService) CreateFile(ctx context.Context, owner, repo, path string, opt *RepositoryContentFileOptions) (*RepositoryContentResponse, *Response, error) { + u := fmt.Sprintf("repos/%s/%s/contents/%s", owner, repo, path) + req, err := s.client.NewRequest("PUT", u, opt) + if err != nil { + return nil, nil, err + } + createResponse := new(RepositoryContentResponse) + resp, err := s.client.Do(ctx, req, createResponse) + if err != nil { + return nil, resp, err + } + return createResponse, resp, nil +} + +// UpdateFile updates a file in a repository at the given path and returns the +// commit and file metadata. Requires the blob SHA of the file being updated. +// +// GitHub API docs: https://developer.github.com/v3/repos/contents/#update-a-file +func (s *RepositoriesService) UpdateFile(ctx context.Context, owner, repo, path string, opt *RepositoryContentFileOptions) (*RepositoryContentResponse, *Response, error) { + u := fmt.Sprintf("repos/%s/%s/contents/%s", owner, repo, path) + req, err := s.client.NewRequest("PUT", u, opt) + if err != nil { + return nil, nil, err + } + updateResponse := new(RepositoryContentResponse) + resp, err := s.client.Do(ctx, req, updateResponse) + if err != nil { + return nil, resp, err + } + return updateResponse, resp, nil +} + +// DeleteFile deletes a file from a repository and returns the commit. +// Requires the blob SHA of the file to be deleted. +// +// GitHub API docs: https://developer.github.com/v3/repos/contents/#delete-a-file +func (s *RepositoriesService) DeleteFile(ctx context.Context, owner, repo, path string, opt *RepositoryContentFileOptions) (*RepositoryContentResponse, *Response, error) { + u := fmt.Sprintf("repos/%s/%s/contents/%s", owner, repo, path) + req, err := s.client.NewRequest("DELETE", u, opt) + if err != nil { + return nil, nil, err + } + deleteResponse := new(RepositoryContentResponse) + resp, err := s.client.Do(ctx, req, deleteResponse) + if err != nil { + return nil, resp, err + } + return deleteResponse, resp, nil +} + +// archiveFormat is used to define the archive type when calling GetArchiveLink. +type archiveFormat string + +const ( + // Tarball specifies an archive in gzipped tar format. + Tarball archiveFormat = "tarball" + + // Zipball specifies an archive in zip format. + Zipball archiveFormat = "zipball" +) + +// GetArchiveLink returns an URL to download a tarball or zipball archive for a +// repository. The archiveFormat can be specified by either the github.Tarball +// or github.Zipball constant. +// +// GitHub API docs: https://developer.github.com/v3/repos/contents/#get-archive-link +func (s *RepositoriesService) GetArchiveLink(ctx context.Context, owner, repo string, archiveformat archiveFormat, opt *RepositoryContentGetOptions) (*url.URL, *Response, error) { + u := fmt.Sprintf("repos/%s/%s/%s", owner, repo, archiveformat) + if opt != nil && opt.Ref != "" { + u += fmt.Sprintf("/%s", opt.Ref) + } + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + var resp *http.Response + // Use http.DefaultTransport if no custom Transport is configured + req = withContext(ctx, req) + if s.client.client.Transport == nil { + resp, err = http.DefaultTransport.RoundTrip(req) + } else { + resp, err = s.client.client.Transport.RoundTrip(req) + } + if err != nil { + return nil, nil, err + } + resp.Body.Close() + if resp.StatusCode != http.StatusFound { + return nil, newResponse(resp), fmt.Errorf("unexpected status code: %s", resp.Status) + } + parsedURL, err := url.Parse(resp.Header.Get("Location")) + return parsedURL, newResponse(resp), err +} diff --git a/vendor/github.com/google/go-github/github/repos_deployments.go b/vendor/github.com/google/go-github/github/repos_deployments.go new file mode 100644 index 00000000..1300f05e --- /dev/null +++ b/vendor/github.com/google/go-github/github/repos_deployments.go @@ -0,0 +1,237 @@ +// Copyright 2014 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "encoding/json" + "fmt" + "strings" +) + +// Deployment represents a deployment in a repo +type Deployment struct { + URL *string `json:"url,omitempty"` + ID *int64 `json:"id,omitempty"` + SHA *string `json:"sha,omitempty"` + Ref *string `json:"ref,omitempty"` + Task *string `json:"task,omitempty"` + Payload json.RawMessage `json:"payload,omitempty"` + Environment *string `json:"environment,omitempty"` + Description *string `json:"description,omitempty"` + Creator *User `json:"creator,omitempty"` + CreatedAt *Timestamp `json:"created_at,omitempty"` + UpdatedAt *Timestamp `json:"updated_at,omitempty"` + StatusesURL *string `json:"statuses_url,omitempty"` + RepositoryURL *string `json:"repository_url,omitempty"` + NodeID *string `json:"node_id,omitempty"` +} + +// DeploymentRequest represents a deployment request +type DeploymentRequest struct { + Ref *string `json:"ref,omitempty"` + Task *string `json:"task,omitempty"` + AutoMerge *bool `json:"auto_merge,omitempty"` + RequiredContexts *[]string `json:"required_contexts,omitempty"` + Payload *string `json:"payload,omitempty"` + Environment *string `json:"environment,omitempty"` + Description *string `json:"description,omitempty"` + TransientEnvironment *bool `json:"transient_environment,omitempty"` + ProductionEnvironment *bool `json:"production_environment,omitempty"` +} + +// DeploymentsListOptions specifies the optional parameters to the +// RepositoriesService.ListDeployments method. +type DeploymentsListOptions struct { + // SHA of the Deployment. + SHA string `url:"sha,omitempty"` + + // List deployments for a given ref. + Ref string `url:"ref,omitempty"` + + // List deployments for a given task. + Task string `url:"task,omitempty"` + + // List deployments for a given environment. + Environment string `url:"environment,omitempty"` + + ListOptions +} + +// ListDeployments lists the deployments of a repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/deployments/#list-deployments +func (s *RepositoriesService) ListDeployments(ctx context.Context, owner, repo string, opt *DeploymentsListOptions) ([]*Deployment, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/deployments", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + var deployments []*Deployment + resp, err := s.client.Do(ctx, req, &deployments) + if err != nil { + return nil, resp, err + } + + return deployments, resp, nil +} + +// GetDeployment returns a single deployment of a repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/deployments/#get-a-single-deployment +func (s *RepositoriesService) GetDeployment(ctx context.Context, owner, repo string, deploymentID int64) (*Deployment, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/deployments/%v", owner, repo, deploymentID) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + deployment := new(Deployment) + resp, err := s.client.Do(ctx, req, deployment) + if err != nil { + return nil, resp, err + } + + return deployment, resp, nil +} + +// CreateDeployment creates a new deployment for a repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/deployments/#create-a-deployment +func (s *RepositoriesService) CreateDeployment(ctx context.Context, owner, repo string, request *DeploymentRequest) (*Deployment, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/deployments", owner, repo) + + req, err := s.client.NewRequest("POST", u, request) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeDeploymentStatusPreview, mediaTypeGraphQLNodeIDPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + d := new(Deployment) + resp, err := s.client.Do(ctx, req, d) + if err != nil { + return nil, resp, err + } + + return d, resp, nil +} + +// DeploymentStatus represents the status of a +// particular deployment. +type DeploymentStatus struct { + ID *int64 `json:"id,omitempty"` + // State is the deployment state. + // Possible values are: "pending", "success", "failure", "error", "inactive". + State *string `json:"state,omitempty"` + Creator *User `json:"creator,omitempty"` + Description *string `json:"description,omitempty"` + TargetURL *string `json:"target_url,omitempty"` + CreatedAt *Timestamp `json:"created_at,omitempty"` + UpdatedAt *Timestamp `json:"updated_at,omitempty"` + DeploymentURL *string `json:"deployment_url,omitempty"` + RepositoryURL *string `json:"repository_url,omitempty"` + NodeID *string `json:"node_id,omitempty"` +} + +// DeploymentStatusRequest represents a deployment request +type DeploymentStatusRequest struct { + State *string `json:"state,omitempty"` + LogURL *string `json:"log_url,omitempty"` + Description *string `json:"description,omitempty"` + EnvironmentURL *string `json:"environment_url,omitempty"` + AutoInactive *bool `json:"auto_inactive,omitempty"` +} + +// ListDeploymentStatuses lists the statuses of a given deployment of a repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/deployments/#list-deployment-statuses +func (s *RepositoriesService) ListDeploymentStatuses(ctx context.Context, owner, repo string, deployment int64, opt *ListOptions) ([]*DeploymentStatus, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/deployments/%v/statuses", owner, repo, deployment) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + var statuses []*DeploymentStatus + resp, err := s.client.Do(ctx, req, &statuses) + if err != nil { + return nil, resp, err + } + + return statuses, resp, nil +} + +// GetDeploymentStatus returns a single deployment status of a repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/deployments/#get-a-single-deployment-status +func (s *RepositoriesService) GetDeploymentStatus(ctx context.Context, owner, repo string, deploymentID, deploymentStatusID int64) (*DeploymentStatus, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/deployments/%v/statuses/%v", owner, repo, deploymentID, deploymentStatusID) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeDeploymentStatusPreview, mediaTypeGraphQLNodeIDPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + d := new(DeploymentStatus) + resp, err := s.client.Do(ctx, req, d) + if err != nil { + return nil, resp, err + } + + return d, resp, nil +} + +// CreateDeploymentStatus creates a new status for a deployment. +// +// GitHub API docs: https://developer.github.com/v3/repos/deployments/#create-a-deployment-status +func (s *RepositoriesService) CreateDeploymentStatus(ctx context.Context, owner, repo string, deployment int64, request *DeploymentStatusRequest) (*DeploymentStatus, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/deployments/%v/statuses", owner, repo, deployment) + + req, err := s.client.NewRequest("POST", u, request) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeDeploymentStatusPreview, mediaTypeGraphQLNodeIDPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + d := new(DeploymentStatus) + resp, err := s.client.Do(ctx, req, d) + if err != nil { + return nil, resp, err + } + + return d, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/repos_forks.go b/vendor/github.com/google/go-github/github/repos_forks.go new file mode 100644 index 00000000..d0bff544 --- /dev/null +++ b/vendor/github.com/google/go-github/github/repos_forks.go @@ -0,0 +1,89 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// RepositoryListForksOptions specifies the optional parameters to the +// RepositoriesService.ListForks method. +type RepositoryListForksOptions struct { + // How to sort the forks list. Possible values are: newest, oldest, + // watchers. Default is "newest". + Sort string `url:"sort,omitempty"` + + ListOptions +} + +// ListForks lists the forks of the specified repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/forks/#list-forks +func (s *RepositoriesService) ListForks(ctx context.Context, owner, repo string, opt *RepositoryListForksOptions) ([]*Repository, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/forks", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when topics API fully launches. + req.Header.Set("Accept", mediaTypeTopicsPreview) + + var repos []*Repository + resp, err := s.client.Do(ctx, req, &repos) + if err != nil { + return nil, resp, err + } + + return repos, resp, nil +} + +// RepositoryCreateForkOptions specifies the optional parameters to the +// RepositoriesService.CreateFork method. +type RepositoryCreateForkOptions struct { + // The organization to fork the repository into. + Organization string `url:"organization,omitempty"` +} + +// CreateFork creates a fork of the specified repository. +// +// This method might return an *AcceptedError and a status code of +// 202. This is because this is the status that GitHub returns to signify that +// it is now computing creating the fork in a background task. In this event, +// the Repository value will be returned, which includes the details about the pending fork. +// A follow up request, after a delay of a second or so, should result +// in a successful request. +// +// GitHub API docs: https://developer.github.com/v3/repos/forks/#create-a-fork +func (s *RepositoriesService) CreateFork(ctx context.Context, owner, repo string, opt *RepositoryCreateForkOptions) (*Repository, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/forks", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("POST", u, nil) + if err != nil { + return nil, nil, err + } + + fork := new(Repository) + resp, err := s.client.Do(ctx, req, fork) + if _, ok := err.(*AcceptedError); ok { + return fork, resp, err + } + if err != nil { + return nil, resp, err + } + + return fork, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/repos_hooks.go b/vendor/github.com/google/go-github/github/repos_hooks.go new file mode 100644 index 00000000..f7ab3a13 --- /dev/null +++ b/vendor/github.com/google/go-github/github/repos_hooks.go @@ -0,0 +1,192 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" + "time" +) + +// WebHookPayload represents the data that is received from GitHub when a push +// event hook is triggered. The format of these payloads pre-date most of the +// GitHub v3 API, so there are lots of minor incompatibilities with the types +// defined in the rest of the API. Therefore, several types are duplicated +// here to account for these differences. +// +// GitHub API docs: https://help.github.com/articles/post-receive-hooks +type WebHookPayload struct { + After *string `json:"after,omitempty"` + Before *string `json:"before,omitempty"` + Commits []WebHookCommit `json:"commits,omitempty"` + Compare *string `json:"compare,omitempty"` + Created *bool `json:"created,omitempty"` + Deleted *bool `json:"deleted,omitempty"` + Forced *bool `json:"forced,omitempty"` + HeadCommit *WebHookCommit `json:"head_commit,omitempty"` + Pusher *User `json:"pusher,omitempty"` + Ref *string `json:"ref,omitempty"` + Repo *Repository `json:"repository,omitempty"` + Sender *User `json:"sender,omitempty"` +} + +func (w WebHookPayload) String() string { + return Stringify(w) +} + +// WebHookCommit represents the commit variant we receive from GitHub in a +// WebHookPayload. +type WebHookCommit struct { + Added []string `json:"added,omitempty"` + Author *WebHookAuthor `json:"author,omitempty"` + Committer *WebHookAuthor `json:"committer,omitempty"` + Distinct *bool `json:"distinct,omitempty"` + ID *string `json:"id,omitempty"` + Message *string `json:"message,omitempty"` + Modified []string `json:"modified,omitempty"` + Removed []string `json:"removed,omitempty"` + Timestamp *time.Time `json:"timestamp,omitempty"` +} + +func (w WebHookCommit) String() string { + return Stringify(w) +} + +// WebHookAuthor represents the author or committer of a commit, as specified +// in a WebHookCommit. The commit author may not correspond to a GitHub User. +type WebHookAuthor struct { + Email *string `json:"email,omitempty"` + Name *string `json:"name,omitempty"` + Username *string `json:"username,omitempty"` +} + +func (w WebHookAuthor) String() string { + return Stringify(w) +} + +// Hook represents a GitHub (web and service) hook for a repository. +type Hook struct { + CreatedAt *time.Time `json:"created_at,omitempty"` + UpdatedAt *time.Time `json:"updated_at,omitempty"` + Name *string `json:"name,omitempty"` + URL *string `json:"url,omitempty"` + Events []string `json:"events,omitempty"` + Active *bool `json:"active,omitempty"` + Config map[string]interface{} `json:"config,omitempty"` + ID *int64 `json:"id,omitempty"` +} + +func (h Hook) String() string { + return Stringify(h) +} + +// CreateHook creates a Hook for the specified repository. +// Name and Config are required fields. +// +// GitHub API docs: https://developer.github.com/v3/repos/hooks/#create-a-hook +func (s *RepositoriesService) CreateHook(ctx context.Context, owner, repo string, hook *Hook) (*Hook, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/hooks", owner, repo) + req, err := s.client.NewRequest("POST", u, hook) + if err != nil { + return nil, nil, err + } + + h := new(Hook) + resp, err := s.client.Do(ctx, req, h) + if err != nil { + return nil, resp, err + } + + return h, resp, nil +} + +// ListHooks lists all Hooks for the specified repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/hooks/#list +func (s *RepositoriesService) ListHooks(ctx context.Context, owner, repo string, opt *ListOptions) ([]*Hook, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/hooks", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var hooks []*Hook + resp, err := s.client.Do(ctx, req, &hooks) + if err != nil { + return nil, resp, err + } + + return hooks, resp, nil +} + +// GetHook returns a single specified Hook. +// +// GitHub API docs: https://developer.github.com/v3/repos/hooks/#get-single-hook +func (s *RepositoriesService) GetHook(ctx context.Context, owner, repo string, id int64) (*Hook, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/hooks/%d", owner, repo, id) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + hook := new(Hook) + resp, err := s.client.Do(ctx, req, hook) + return hook, resp, err +} + +// EditHook updates a specified Hook. +// +// GitHub API docs: https://developer.github.com/v3/repos/hooks/#edit-a-hook +func (s *RepositoriesService) EditHook(ctx context.Context, owner, repo string, id int64, hook *Hook) (*Hook, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/hooks/%d", owner, repo, id) + req, err := s.client.NewRequest("PATCH", u, hook) + if err != nil { + return nil, nil, err + } + h := new(Hook) + resp, err := s.client.Do(ctx, req, h) + return h, resp, err +} + +// DeleteHook deletes a specified Hook. +// +// GitHub API docs: https://developer.github.com/v3/repos/hooks/#delete-a-hook +func (s *RepositoriesService) DeleteHook(ctx context.Context, owner, repo string, id int64) (*Response, error) { + u := fmt.Sprintf("repos/%v/%v/hooks/%d", owner, repo, id) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + return s.client.Do(ctx, req, nil) +} + +// PingHook triggers a 'ping' event to be sent to the Hook. +// +// GitHub API docs: https://developer.github.com/v3/repos/hooks/#ping-a-hook +func (s *RepositoriesService) PingHook(ctx context.Context, owner, repo string, id int64) (*Response, error) { + u := fmt.Sprintf("repos/%v/%v/hooks/%d/pings", owner, repo, id) + req, err := s.client.NewRequest("POST", u, nil) + if err != nil { + return nil, err + } + return s.client.Do(ctx, req, nil) +} + +// TestHook triggers a test Hook by github. +// +// GitHub API docs: https://developer.github.com/v3/repos/hooks/#test-a-push-hook +func (s *RepositoriesService) TestHook(ctx context.Context, owner, repo string, id int64) (*Response, error) { + u := fmt.Sprintf("repos/%v/%v/hooks/%d/tests", owner, repo, id) + req, err := s.client.NewRequest("POST", u, nil) + if err != nil { + return nil, err + } + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/repos_invitations.go b/vendor/github.com/google/go-github/github/repos_invitations.go new file mode 100644 index 00000000..34bf3830 --- /dev/null +++ b/vendor/github.com/google/go-github/github/repos_invitations.go @@ -0,0 +1,98 @@ +// Copyright 2016 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// RepositoryInvitation represents an invitation to collaborate on a repo. +type RepositoryInvitation struct { + ID *int64 `json:"id,omitempty"` + Repo *Repository `json:"repository,omitempty"` + Invitee *User `json:"invitee,omitempty"` + Inviter *User `json:"inviter,omitempty"` + + // Permissions represents the permissions that the associated user will have + // on the repository. Possible values are: "read", "write", "admin". + Permissions *string `json:"permissions,omitempty"` + CreatedAt *Timestamp `json:"created_at,omitempty"` + URL *string `json:"url,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` +} + +// ListInvitations lists all currently-open repository invitations. +// +// GitHub API docs: https://developer.github.com/v3/repos/invitations/#list-invitations-for-a-repository +func (s *RepositoriesService) ListInvitations(ctx context.Context, owner, repo string, opt *ListOptions) ([]*RepositoryInvitation, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/invitations", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeRepositoryInvitationsPreview) + + invites := []*RepositoryInvitation{} + resp, err := s.client.Do(ctx, req, &invites) + if err != nil { + return nil, resp, err + } + + return invites, resp, nil +} + +// DeleteInvitation deletes a repository invitation. +// +// GitHub API docs: https://developer.github.com/v3/repos/invitations/#delete-a-repository-invitation +func (s *RepositoriesService) DeleteInvitation(ctx context.Context, owner, repo string, invitationID int64) (*Response, error) { + u := fmt.Sprintf("repos/%v/%v/invitations/%v", owner, repo, invitationID) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeRepositoryInvitationsPreview) + + return s.client.Do(ctx, req, nil) +} + +// UpdateInvitation updates the permissions associated with a repository +// invitation. +// +// permissions represents the permissions that the associated user will have +// on the repository. Possible values are: "read", "write", "admin". +// +// GitHub API docs: https://developer.github.com/v3/repos/invitations/#update-a-repository-invitation +func (s *RepositoriesService) UpdateInvitation(ctx context.Context, owner, repo string, invitationID int64, permissions string) (*RepositoryInvitation, *Response, error) { + opts := &struct { + Permissions string `json:"permissions"` + }{Permissions: permissions} + u := fmt.Sprintf("repos/%v/%v/invitations/%v", owner, repo, invitationID) + req, err := s.client.NewRequest("PATCH", u, opts) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeRepositoryInvitationsPreview) + + invite := &RepositoryInvitation{} + resp, err := s.client.Do(ctx, req, invite) + if err != nil { + return nil, resp, err + } + + return invite, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/repos_keys.go b/vendor/github.com/google/go-github/github/repos_keys.go new file mode 100644 index 00000000..b484f844 --- /dev/null +++ b/vendor/github.com/google/go-github/github/repos_keys.go @@ -0,0 +1,111 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// The Key type is defined in users_keys.go + +// ListKeys lists the deploy keys for a repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/keys/#list +func (s *RepositoriesService) ListKeys(ctx context.Context, owner string, repo string, opt *ListOptions) ([]*Key, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/keys", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var keys []*Key + resp, err := s.client.Do(ctx, req, &keys) + if err != nil { + return nil, resp, err + } + + return keys, resp, nil +} + +// GetKey fetches a single deploy key. +// +// GitHub API docs: https://developer.github.com/v3/repos/keys/#get +func (s *RepositoriesService) GetKey(ctx context.Context, owner string, repo string, id int64) (*Key, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/keys/%v", owner, repo, id) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + key := new(Key) + resp, err := s.client.Do(ctx, req, key) + if err != nil { + return nil, resp, err + } + + return key, resp, nil +} + +// CreateKey adds a deploy key for a repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/keys/#create +func (s *RepositoriesService) CreateKey(ctx context.Context, owner string, repo string, key *Key) (*Key, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/keys", owner, repo) + + req, err := s.client.NewRequest("POST", u, key) + if err != nil { + return nil, nil, err + } + + k := new(Key) + resp, err := s.client.Do(ctx, req, k) + if err != nil { + return nil, resp, err + } + + return k, resp, nil +} + +// EditKey edits a deploy key. +// +// GitHub API docs: https://developer.github.com/v3/repos/keys/#edit +func (s *RepositoriesService) EditKey(ctx context.Context, owner string, repo string, id int64, key *Key) (*Key, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/keys/%v", owner, repo, id) + + req, err := s.client.NewRequest("PATCH", u, key) + if err != nil { + return nil, nil, err + } + + k := new(Key) + resp, err := s.client.Do(ctx, req, k) + if err != nil { + return nil, resp, err + } + + return k, resp, nil +} + +// DeleteKey deletes a deploy key. +// +// GitHub API docs: https://developer.github.com/v3/repos/keys/#delete +func (s *RepositoriesService) DeleteKey(ctx context.Context, owner string, repo string, id int64) (*Response, error) { + u := fmt.Sprintf("repos/%v/%v/keys/%v", owner, repo, id) + + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/repos_merging.go b/vendor/github.com/google/go-github/github/repos_merging.go new file mode 100644 index 00000000..04383c1a --- /dev/null +++ b/vendor/github.com/google/go-github/github/repos_merging.go @@ -0,0 +1,38 @@ +// Copyright 2014 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// RepositoryMergeRequest represents a request to merge a branch in a +// repository. +type RepositoryMergeRequest struct { + Base *string `json:"base,omitempty"` + Head *string `json:"head,omitempty"` + CommitMessage *string `json:"commit_message,omitempty"` +} + +// Merge a branch in the specified repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/merging/#perform-a-merge +func (s *RepositoriesService) Merge(ctx context.Context, owner, repo string, request *RepositoryMergeRequest) (*RepositoryCommit, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/merges", owner, repo) + req, err := s.client.NewRequest("POST", u, request) + if err != nil { + return nil, nil, err + } + + commit := new(RepositoryCommit) + resp, err := s.client.Do(ctx, req, commit) + if err != nil { + return nil, resp, err + } + + return commit, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/repos_pages.go b/vendor/github.com/google/go-github/github/repos_pages.go new file mode 100644 index 00000000..94a95f2b --- /dev/null +++ b/vendor/github.com/google/go-github/github/repos_pages.go @@ -0,0 +1,143 @@ +// Copyright 2014 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// Pages represents a GitHub Pages site configuration. +type Pages struct { + URL *string `json:"url,omitempty"` + Status *string `json:"status,omitempty"` + CNAME *string `json:"cname,omitempty"` + Custom404 *bool `json:"custom_404,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` +} + +// PagesError represents a build error for a GitHub Pages site. +type PagesError struct { + Message *string `json:"message,omitempty"` +} + +// PagesBuild represents the build information for a GitHub Pages site. +type PagesBuild struct { + URL *string `json:"url,omitempty"` + Status *string `json:"status,omitempty"` + Error *PagesError `json:"error,omitempty"` + Pusher *User `json:"pusher,omitempty"` + Commit *string `json:"commit,omitempty"` + Duration *int `json:"duration,omitempty"` + CreatedAt *Timestamp `json:"created_at,omitempty"` + UpdatedAt *Timestamp `json:"updated_at,omitempty"` +} + +// GetPagesInfo fetches information about a GitHub Pages site. +// +// GitHub API docs: https://developer.github.com/v3/repos/pages/#get-information-about-a-pages-site +func (s *RepositoriesService) GetPagesInfo(ctx context.Context, owner, repo string) (*Pages, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pages", owner, repo) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypePagesPreview) + + site := new(Pages) + resp, err := s.client.Do(ctx, req, site) + if err != nil { + return nil, resp, err + } + + return site, resp, nil +} + +// ListPagesBuilds lists the builds for a GitHub Pages site. +// +// GitHub API docs: https://developer.github.com/v3/repos/pages/#list-pages-builds +func (s *RepositoriesService) ListPagesBuilds(ctx context.Context, owner, repo string, opt *ListOptions) ([]*PagesBuild, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pages/builds", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var pages []*PagesBuild + resp, err := s.client.Do(ctx, req, &pages) + if err != nil { + return nil, resp, err + } + + return pages, resp, nil +} + +// GetLatestPagesBuild fetches the latest build information for a GitHub pages site. +// +// GitHub API docs: https://developer.github.com/v3/repos/pages/#list-latest-pages-build +func (s *RepositoriesService) GetLatestPagesBuild(ctx context.Context, owner, repo string) (*PagesBuild, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pages/builds/latest", owner, repo) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + build := new(PagesBuild) + resp, err := s.client.Do(ctx, req, build) + if err != nil { + return nil, resp, err + } + + return build, resp, nil +} + +// GetPageBuild fetches the specific build information for a GitHub pages site. +// +// GitHub API docs: https://developer.github.com/v3/repos/pages/#list-a-specific-pages-build +func (s *RepositoriesService) GetPageBuild(ctx context.Context, owner, repo string, id int64) (*PagesBuild, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pages/builds/%v", owner, repo, id) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + build := new(PagesBuild) + resp, err := s.client.Do(ctx, req, build) + if err != nil { + return nil, resp, err + } + + return build, resp, nil +} + +// RequestPageBuild requests a build of a GitHub Pages site without needing to push new commit. +// +// GitHub API docs: https://developer.github.com/v3/repos/pages/#request-a-page-build +func (s *RepositoriesService) RequestPageBuild(ctx context.Context, owner, repo string) (*PagesBuild, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pages/builds", owner, repo) + req, err := s.client.NewRequest("POST", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypePagesPreview) + + build := new(PagesBuild) + resp, err := s.client.Do(ctx, req, build) + if err != nil { + return nil, resp, err + } + + return build, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/repos_projects.go b/vendor/github.com/google/go-github/github/repos_projects.go new file mode 100644 index 00000000..97a045f6 --- /dev/null +++ b/vendor/github.com/google/go-github/github/repos_projects.go @@ -0,0 +1,72 @@ +// Copyright 2017 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" + "strings" +) + +// ProjectListOptions specifies the optional parameters to the +// OrganizationsService.ListProjects and RepositoriesService.ListProjects methods. +type ProjectListOptions struct { + // Indicates the state of the projects to return. Can be either open, closed, or all. Default: open + State string `url:"state,omitempty"` + + ListOptions +} + +// ListProjects lists the projects for a repo. +// +// GitHub API docs: https://developer.github.com/v3/projects/#list-repository-projects +func (s *RepositoriesService) ListProjects(ctx context.Context, owner, repo string, opt *ProjectListOptions) ([]*Project, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/projects", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + var projects []*Project + resp, err := s.client.Do(ctx, req, &projects) + if err != nil { + return nil, resp, err + } + + return projects, resp, nil +} + +// CreateProject creates a GitHub Project for the specified repository. +// +// GitHub API docs: https://developer.github.com/v3/projects/#create-a-repository-project +func (s *RepositoriesService) CreateProject(ctx context.Context, owner, repo string, opt *ProjectOptions) (*Project, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/projects", owner, repo) + req, err := s.client.NewRequest("POST", u, opt) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept headers when APIs fully launch. + acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview} + req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) + + project := &Project{} + resp, err := s.client.Do(ctx, req, project) + if err != nil { + return nil, resp, err + } + + return project, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/repos_releases.go b/vendor/github.com/google/go-github/github/repos_releases.go new file mode 100644 index 00000000..d5dfc702 --- /dev/null +++ b/vendor/github.com/google/go-github/github/repos_releases.go @@ -0,0 +1,353 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "errors" + "fmt" + "io" + "mime" + "net/http" + "os" + "path/filepath" + "strings" +) + +// RepositoryRelease represents a GitHub release in a repository. +type RepositoryRelease struct { + ID *int64 `json:"id,omitempty"` + TagName *string `json:"tag_name,omitempty"` + TargetCommitish *string `json:"target_commitish,omitempty"` + Name *string `json:"name,omitempty"` + Body *string `json:"body,omitempty"` + Draft *bool `json:"draft,omitempty"` + Prerelease *bool `json:"prerelease,omitempty"` + CreatedAt *Timestamp `json:"created_at,omitempty"` + PublishedAt *Timestamp `json:"published_at,omitempty"` + URL *string `json:"url,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` + AssetsURL *string `json:"assets_url,omitempty"` + Assets []ReleaseAsset `json:"assets,omitempty"` + UploadURL *string `json:"upload_url,omitempty"` + ZipballURL *string `json:"zipball_url,omitempty"` + TarballURL *string `json:"tarball_url,omitempty"` + Author *User `json:"author,omitempty"` + NodeID *string `json:"node_id,omitempty"` +} + +func (r RepositoryRelease) String() string { + return Stringify(r) +} + +// ReleaseAsset represents a GitHub release asset in a repository. +type ReleaseAsset struct { + ID *int64 `json:"id,omitempty"` + URL *string `json:"url,omitempty"` + Name *string `json:"name,omitempty"` + Label *string `json:"label,omitempty"` + State *string `json:"state,omitempty"` + ContentType *string `json:"content_type,omitempty"` + Size *int `json:"size,omitempty"` + DownloadCount *int `json:"download_count,omitempty"` + CreatedAt *Timestamp `json:"created_at,omitempty"` + UpdatedAt *Timestamp `json:"updated_at,omitempty"` + BrowserDownloadURL *string `json:"browser_download_url,omitempty"` + Uploader *User `json:"uploader,omitempty"` + NodeID *string `json:"node_id,omitempty"` +} + +func (r ReleaseAsset) String() string { + return Stringify(r) +} + +// ListReleases lists the releases for a repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/releases/#list-releases-for-a-repository +func (s *RepositoriesService) ListReleases(ctx context.Context, owner, repo string, opt *ListOptions) ([]*RepositoryRelease, *Response, error) { + u := fmt.Sprintf("repos/%s/%s/releases", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + var releases []*RepositoryRelease + resp, err := s.client.Do(ctx, req, &releases) + if err != nil { + return nil, resp, err + } + return releases, resp, nil +} + +// GetRelease fetches a single release. +// +// GitHub API docs: https://developer.github.com/v3/repos/releases/#get-a-single-release +func (s *RepositoriesService) GetRelease(ctx context.Context, owner, repo string, id int64) (*RepositoryRelease, *Response, error) { + u := fmt.Sprintf("repos/%s/%s/releases/%d", owner, repo, id) + return s.getSingleRelease(ctx, u) +} + +// GetLatestRelease fetches the latest published release for the repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/releases/#get-the-latest-release +func (s *RepositoriesService) GetLatestRelease(ctx context.Context, owner, repo string) (*RepositoryRelease, *Response, error) { + u := fmt.Sprintf("repos/%s/%s/releases/latest", owner, repo) + return s.getSingleRelease(ctx, u) +} + +// GetReleaseByTag fetches a release with the specified tag. +// +// GitHub API docs: https://developer.github.com/v3/repos/releases/#get-a-release-by-tag-name +func (s *RepositoriesService) GetReleaseByTag(ctx context.Context, owner, repo, tag string) (*RepositoryRelease, *Response, error) { + u := fmt.Sprintf("repos/%s/%s/releases/tags/%s", owner, repo, tag) + return s.getSingleRelease(ctx, u) +} + +func (s *RepositoriesService) getSingleRelease(ctx context.Context, url string) (*RepositoryRelease, *Response, error) { + req, err := s.client.NewRequest("GET", url, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + release := new(RepositoryRelease) + resp, err := s.client.Do(ctx, req, release) + if err != nil { + return nil, resp, err + } + return release, resp, nil +} + +// CreateRelease adds a new release for a repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/releases/#create-a-release +func (s *RepositoriesService) CreateRelease(ctx context.Context, owner, repo string, release *RepositoryRelease) (*RepositoryRelease, *Response, error) { + u := fmt.Sprintf("repos/%s/%s/releases", owner, repo) + + req, err := s.client.NewRequest("POST", u, release) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + r := new(RepositoryRelease) + resp, err := s.client.Do(ctx, req, r) + if err != nil { + return nil, resp, err + } + return r, resp, nil +} + +// EditRelease edits a repository release. +// +// GitHub API docs: https://developer.github.com/v3/repos/releases/#edit-a-release +func (s *RepositoriesService) EditRelease(ctx context.Context, owner, repo string, id int64, release *RepositoryRelease) (*RepositoryRelease, *Response, error) { + u := fmt.Sprintf("repos/%s/%s/releases/%d", owner, repo, id) + + req, err := s.client.NewRequest("PATCH", u, release) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + r := new(RepositoryRelease) + resp, err := s.client.Do(ctx, req, r) + if err != nil { + return nil, resp, err + } + return r, resp, nil +} + +// DeleteRelease delete a single release from a repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/releases/#delete-a-release +func (s *RepositoriesService) DeleteRelease(ctx context.Context, owner, repo string, id int64) (*Response, error) { + u := fmt.Sprintf("repos/%s/%s/releases/%d", owner, repo, id) + + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + return s.client.Do(ctx, req, nil) +} + +// ListReleaseAssets lists the release's assets. +// +// GitHub API docs: https://developer.github.com/v3/repos/releases/#list-assets-for-a-release +func (s *RepositoriesService) ListReleaseAssets(ctx context.Context, owner, repo string, id int64, opt *ListOptions) ([]*ReleaseAsset, *Response, error) { + u := fmt.Sprintf("repos/%s/%s/releases/%d/assets", owner, repo, id) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + var assets []*ReleaseAsset + resp, err := s.client.Do(ctx, req, &assets) + if err != nil { + return nil, resp, err + } + return assets, resp, nil +} + +// GetReleaseAsset fetches a single release asset. +// +// GitHub API docs: https://developer.github.com/v3/repos/releases/#get-a-single-release-asset +func (s *RepositoriesService) GetReleaseAsset(ctx context.Context, owner, repo string, id int64) (*ReleaseAsset, *Response, error) { + u := fmt.Sprintf("repos/%s/%s/releases/assets/%d", owner, repo, id) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + asset := new(ReleaseAsset) + resp, err := s.client.Do(ctx, req, asset) + if err != nil { + return nil, resp, err + } + return asset, resp, nil +} + +// DownloadReleaseAsset downloads a release asset or returns a redirect URL. +// +// DownloadReleaseAsset returns an io.ReadCloser that reads the contents of the +// specified release asset. It is the caller's responsibility to close the ReadCloser. +// If a redirect is returned, the redirect URL will be returned as a string instead +// of the io.ReadCloser. Exactly one of rc and redirectURL will be zero. +// +// GitHub API docs: https://developer.github.com/v3/repos/releases/#get-a-single-release-asset +func (s *RepositoriesService) DownloadReleaseAsset(ctx context.Context, owner, repo string, id int64) (rc io.ReadCloser, redirectURL string, err error) { + u := fmt.Sprintf("repos/%s/%s/releases/assets/%d", owner, repo, id) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, "", err + } + req.Header.Set("Accept", defaultMediaType) + + s.client.clientMu.Lock() + defer s.client.clientMu.Unlock() + + var loc string + saveRedirect := s.client.client.CheckRedirect + s.client.client.CheckRedirect = func(req *http.Request, via []*http.Request) error { + loc = req.URL.String() + return errors.New("disable redirect") + } + defer func() { s.client.client.CheckRedirect = saveRedirect }() + + req = withContext(ctx, req) + resp, err := s.client.client.Do(req) + if err != nil { + if !strings.Contains(err.Error(), "disable redirect") { + return nil, "", err + } + return nil, loc, nil // Intentionally return no error with valid redirect URL. + } + + if err := CheckResponse(resp); err != nil { + resp.Body.Close() + return nil, "", err + } + + return resp.Body, "", nil +} + +// EditReleaseAsset edits a repository release asset. +// +// GitHub API docs: https://developer.github.com/v3/repos/releases/#edit-a-release-asset +func (s *RepositoriesService) EditReleaseAsset(ctx context.Context, owner, repo string, id int64, release *ReleaseAsset) (*ReleaseAsset, *Response, error) { + u := fmt.Sprintf("repos/%s/%s/releases/assets/%d", owner, repo, id) + + req, err := s.client.NewRequest("PATCH", u, release) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + asset := new(ReleaseAsset) + resp, err := s.client.Do(ctx, req, asset) + if err != nil { + return nil, resp, err + } + return asset, resp, nil +} + +// DeleteReleaseAsset delete a single release asset from a repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/releases/#delete-a-release-asset +func (s *RepositoriesService) DeleteReleaseAsset(ctx context.Context, owner, repo string, id int64) (*Response, error) { + u := fmt.Sprintf("repos/%s/%s/releases/assets/%d", owner, repo, id) + + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + return s.client.Do(ctx, req, nil) +} + +// UploadReleaseAsset creates an asset by uploading a file into a release repository. +// To upload assets that cannot be represented by an os.File, call NewUploadRequest directly. +// +// GitHub API docs: https://developer.github.com/v3/repos/releases/#upload-a-release-asset +func (s *RepositoriesService) UploadReleaseAsset(ctx context.Context, owner, repo string, id int64, opt *UploadOptions, file *os.File) (*ReleaseAsset, *Response, error) { + u := fmt.Sprintf("repos/%s/%s/releases/%d/assets", owner, repo, id) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + stat, err := file.Stat() + if err != nil { + return nil, nil, err + } + if stat.IsDir() { + return nil, nil, errors.New("the asset to upload can't be a directory") + } + + mediaType := mime.TypeByExtension(filepath.Ext(file.Name())) + req, err := s.client.NewUploadRequest(u, file, stat.Size(), mediaType) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) + + asset := new(ReleaseAsset) + resp, err := s.client.Do(ctx, req, asset) + if err != nil { + return nil, resp, err + } + return asset, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/repos_stats.go b/vendor/github.com/google/go-github/github/repos_stats.go new file mode 100644 index 00000000..bb355aea --- /dev/null +++ b/vendor/github.com/google/go-github/github/repos_stats.go @@ -0,0 +1,226 @@ +// Copyright 2014 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" + "time" +) + +// ContributorStats represents a contributor to a repository and their +// weekly contributions to a given repo. +type ContributorStats struct { + Author *Contributor `json:"author,omitempty"` + Total *int `json:"total,omitempty"` + Weeks []WeeklyStats `json:"weeks,omitempty"` +} + +func (c ContributorStats) String() string { + return Stringify(c) +} + +// WeeklyStats represents the number of additions, deletions and commits +// a Contributor made in a given week. +type WeeklyStats struct { + Week *Timestamp `json:"w,omitempty"` + Additions *int `json:"a,omitempty"` + Deletions *int `json:"d,omitempty"` + Commits *int `json:"c,omitempty"` +} + +func (w WeeklyStats) String() string { + return Stringify(w) +} + +// ListContributorsStats gets a repo's contributor list with additions, +// deletions and commit counts. +// +// If this is the first time these statistics are requested for the given +// repository, this method will return an *AcceptedError and a status code of +// 202. This is because this is the status that GitHub returns to signify that +// it is now computing the requested statistics. A follow up request, after a +// delay of a second or so, should result in a successful request. +// +// GitHub API docs: https://developer.github.com/v3/repos/statistics/#contributors +func (s *RepositoriesService) ListContributorsStats(ctx context.Context, owner, repo string) ([]*ContributorStats, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/stats/contributors", owner, repo) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var contributorStats []*ContributorStats + resp, err := s.client.Do(ctx, req, &contributorStats) + if err != nil { + return nil, resp, err + } + + return contributorStats, resp, nil +} + +// WeeklyCommitActivity represents the weekly commit activity for a repository. +// The days array is a group of commits per day, starting on Sunday. +type WeeklyCommitActivity struct { + Days []int `json:"days,omitempty"` + Total *int `json:"total,omitempty"` + Week *Timestamp `json:"week,omitempty"` +} + +func (w WeeklyCommitActivity) String() string { + return Stringify(w) +} + +// ListCommitActivity returns the last year of commit activity +// grouped by week. The days array is a group of commits per day, +// starting on Sunday. +// +// If this is the first time these statistics are requested for the given +// repository, this method will return an *AcceptedError and a status code of +// 202. This is because this is the status that GitHub returns to signify that +// it is now computing the requested statistics. A follow up request, after a +// delay of a second or so, should result in a successful request. +// +// GitHub API docs: https://developer.github.com/v3/repos/statistics/#commit-activity +func (s *RepositoriesService) ListCommitActivity(ctx context.Context, owner, repo string) ([]*WeeklyCommitActivity, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/stats/commit_activity", owner, repo) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var weeklyCommitActivity []*WeeklyCommitActivity + resp, err := s.client.Do(ctx, req, &weeklyCommitActivity) + if err != nil { + return nil, resp, err + } + + return weeklyCommitActivity, resp, nil +} + +// ListCodeFrequency returns a weekly aggregate of the number of additions and +// deletions pushed to a repository. Returned WeeklyStats will contain +// additions and deletions, but not total commits. +// +// If this is the first time these statistics are requested for the given +// repository, this method will return an *AcceptedError and a status code of +// 202. This is because this is the status that GitHub returns to signify that +// it is now computing the requested statistics. A follow up request, after a +// delay of a second or so, should result in a successful request. +// +// GitHub API docs: https://developer.github.com/v3/repos/statistics/#code-frequency +func (s *RepositoriesService) ListCodeFrequency(ctx context.Context, owner, repo string) ([]*WeeklyStats, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/stats/code_frequency", owner, repo) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var weeks [][]int + resp, err := s.client.Do(ctx, req, &weeks) + + // convert int slices into WeeklyStats + var stats []*WeeklyStats + for _, week := range weeks { + if len(week) != 3 { + continue + } + stat := &WeeklyStats{ + Week: &Timestamp{time.Unix(int64(week[0]), 0)}, + Additions: Int(week[1]), + Deletions: Int(week[2]), + } + stats = append(stats, stat) + } + + return stats, resp, err +} + +// RepositoryParticipation is the number of commits by everyone +// who has contributed to the repository (including the owner) +// as well as the number of commits by the owner themself. +type RepositoryParticipation struct { + All []int `json:"all,omitempty"` + Owner []int `json:"owner,omitempty"` +} + +func (r RepositoryParticipation) String() string { + return Stringify(r) +} + +// ListParticipation returns the total commit counts for the 'owner' +// and total commit counts in 'all'. 'all' is everyone combined, +// including the 'owner' in the last 52 weeks. If you’d like to get +// the commit counts for non-owners, you can subtract 'all' from 'owner'. +// +// The array order is oldest week (index 0) to most recent week. +// +// If this is the first time these statistics are requested for the given +// repository, this method will return an *AcceptedError and a status code of +// 202. This is because this is the status that GitHub returns to signify that +// it is now computing the requested statistics. A follow up request, after a +// delay of a second or so, should result in a successful request. +// +// GitHub API docs: https://developer.github.com/v3/repos/statistics/#participation +func (s *RepositoriesService) ListParticipation(ctx context.Context, owner, repo string) (*RepositoryParticipation, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/stats/participation", owner, repo) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + participation := new(RepositoryParticipation) + resp, err := s.client.Do(ctx, req, participation) + if err != nil { + return nil, resp, err + } + + return participation, resp, nil +} + +// PunchCard represents the number of commits made during a given hour of a +// day of the week. +type PunchCard struct { + Day *int // Day of the week (0-6: =Sunday - Saturday). + Hour *int // Hour of day (0-23). + Commits *int // Number of commits. +} + +// ListPunchCard returns the number of commits per hour in each day. +// +// If this is the first time these statistics are requested for the given +// repository, this method will return an *AcceptedError and a status code of +// 202. This is because this is the status that GitHub returns to signify that +// it is now computing the requested statistics. A follow up request, after a +// delay of a second or so, should result in a successful request. +// +// GitHub API docs: https://developer.github.com/v3/repos/statistics/#punch-card +func (s *RepositoriesService) ListPunchCard(ctx context.Context, owner, repo string) ([]*PunchCard, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/stats/punch_card", owner, repo) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var results [][]int + resp, err := s.client.Do(ctx, req, &results) + + // convert int slices into Punchcards + var cards []*PunchCard + for _, result := range results { + if len(result) != 3 { + continue + } + card := &PunchCard{ + Day: Int(result[0]), + Hour: Int(result[1]), + Commits: Int(result[2]), + } + cards = append(cards, card) + } + + return cards, resp, err +} diff --git a/vendor/github.com/google/go-github/github/repos_statuses.go b/vendor/github.com/google/go-github/github/repos_statuses.go new file mode 100644 index 00000000..f94fdc85 --- /dev/null +++ b/vendor/github.com/google/go-github/github/repos_statuses.go @@ -0,0 +1,129 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" + "time" +) + +// RepoStatus represents the status of a repository at a particular reference. +type RepoStatus struct { + ID *int64 `json:"id,omitempty"` + URL *string `json:"url,omitempty"` + + // State is the current state of the repository. Possible values are: + // pending, success, error, or failure. + State *string `json:"state,omitempty"` + + // TargetURL is the URL of the page representing this status. It will be + // linked from the GitHub UI to allow users to see the source of the status. + TargetURL *string `json:"target_url,omitempty"` + + // Description is a short high level summary of the status. + Description *string `json:"description,omitempty"` + + // A string label to differentiate this status from the statuses of other systems. + Context *string `json:"context,omitempty"` + + Creator *User `json:"creator,omitempty"` + CreatedAt *time.Time `json:"created_at,omitempty"` + UpdatedAt *time.Time `json:"updated_at,omitempty"` +} + +func (r RepoStatus) String() string { + return Stringify(r) +} + +// ListStatuses lists the statuses of a repository at the specified +// reference. ref can be a SHA, a branch name, or a tag name. +// +// GitHub API docs: https://developer.github.com/v3/repos/statuses/#list-statuses-for-a-specific-ref +func (s *RepositoriesService) ListStatuses(ctx context.Context, owner, repo, ref string, opt *ListOptions) ([]*RepoStatus, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/commits/%v/statuses", owner, repo, ref) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var statuses []*RepoStatus + resp, err := s.client.Do(ctx, req, &statuses) + if err != nil { + return nil, resp, err + } + + return statuses, resp, nil +} + +// CreateStatus creates a new status for a repository at the specified +// reference. Ref can be a SHA, a branch name, or a tag name. +// +// GitHub API docs: https://developer.github.com/v3/repos/statuses/#create-a-status +func (s *RepositoriesService) CreateStatus(ctx context.Context, owner, repo, ref string, status *RepoStatus) (*RepoStatus, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/statuses/%v", owner, repo, ref) + req, err := s.client.NewRequest("POST", u, status) + if err != nil { + return nil, nil, err + } + + repoStatus := new(RepoStatus) + resp, err := s.client.Do(ctx, req, repoStatus) + if err != nil { + return nil, resp, err + } + + return repoStatus, resp, nil +} + +// CombinedStatus represents the combined status of a repository at a particular reference. +type CombinedStatus struct { + // State is the combined state of the repository. Possible values are: + // failure, pending, or success. + State *string `json:"state,omitempty"` + + Name *string `json:"name,omitempty"` + SHA *string `json:"sha,omitempty"` + TotalCount *int `json:"total_count,omitempty"` + Statuses []RepoStatus `json:"statuses,omitempty"` + + CommitURL *string `json:"commit_url,omitempty"` + RepositoryURL *string `json:"repository_url,omitempty"` +} + +func (s CombinedStatus) String() string { + return Stringify(s) +} + +// GetCombinedStatus returns the combined status of a repository at the specified +// reference. ref can be a SHA, a branch name, or a tag name. +// +// GitHub API docs: https://developer.github.com/v3/repos/statuses/#get-the-combined-status-for-a-specific-ref +func (s *RepositoriesService) GetCombinedStatus(ctx context.Context, owner, repo, ref string, opt *ListOptions) (*CombinedStatus, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/commits/%v/status", owner, repo, ref) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + status := new(CombinedStatus) + resp, err := s.client.Do(ctx, req, status) + if err != nil { + return nil, resp, err + } + + return status, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/repos_traffic.go b/vendor/github.com/google/go-github/github/repos_traffic.go new file mode 100644 index 00000000..fb1c9764 --- /dev/null +++ b/vendor/github.com/google/go-github/github/repos_traffic.go @@ -0,0 +1,141 @@ +// Copyright 2016 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// TrafficReferrer represent information about traffic from a referrer . +type TrafficReferrer struct { + Referrer *string `json:"referrer,omitempty"` + Count *int `json:"count,omitempty"` + Uniques *int `json:"uniques,omitempty"` +} + +// TrafficPath represent information about the traffic on a path of the repo. +type TrafficPath struct { + Path *string `json:"path,omitempty"` + Title *string `json:"title,omitempty"` + Count *int `json:"count,omitempty"` + Uniques *int `json:"uniques,omitempty"` +} + +// TrafficData represent information about a specific timestamp in views or clones list. +type TrafficData struct { + Timestamp *Timestamp `json:"timestamp,omitempty"` + Count *int `json:"count,omitempty"` + Uniques *int `json:"uniques,omitempty"` +} + +// TrafficViews represent information about the number of views in the last 14 days. +type TrafficViews struct { + Views []*TrafficData `json:"views,omitempty"` + Count *int `json:"count,omitempty"` + Uniques *int `json:"uniques,omitempty"` +} + +// TrafficClones represent information about the number of clones in the last 14 days. +type TrafficClones struct { + Clones []*TrafficData `json:"clones,omitempty"` + Count *int `json:"count,omitempty"` + Uniques *int `json:"uniques,omitempty"` +} + +// TrafficBreakdownOptions specifies the parameters to methods that support breakdown per day or week. +// Can be one of: day, week. Default: day. +type TrafficBreakdownOptions struct { + Per string `url:"per,omitempty"` +} + +// ListTrafficReferrers list the top 10 referrers over the last 14 days. +// +// GitHub API docs: https://developer.github.com/v3/repos/traffic/#list-referrers +func (s *RepositoriesService) ListTrafficReferrers(ctx context.Context, owner, repo string) ([]*TrafficReferrer, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/traffic/popular/referrers", owner, repo) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var trafficReferrers []*TrafficReferrer + resp, err := s.client.Do(ctx, req, &trafficReferrers) + if err != nil { + return nil, resp, err + } + + return trafficReferrers, resp, nil +} + +// ListTrafficPaths list the top 10 popular content over the last 14 days. +// +// GitHub API docs: https://developer.github.com/v3/repos/traffic/#list-paths +func (s *RepositoriesService) ListTrafficPaths(ctx context.Context, owner, repo string) ([]*TrafficPath, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/traffic/popular/paths", owner, repo) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var paths []*TrafficPath + resp, err := s.client.Do(ctx, req, &paths) + if err != nil { + return nil, resp, err + } + + return paths, resp, nil +} + +// ListTrafficViews get total number of views for the last 14 days and breaks it down either per day or week. +// +// GitHub API docs: https://developer.github.com/v3/repos/traffic/#views +func (s *RepositoriesService) ListTrafficViews(ctx context.Context, owner, repo string, opt *TrafficBreakdownOptions) (*TrafficViews, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/traffic/views", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + trafficViews := new(TrafficViews) + resp, err := s.client.Do(ctx, req, &trafficViews) + if err != nil { + return nil, resp, err + } + + return trafficViews, resp, nil +} + +// ListTrafficClones get total number of clones for the last 14 days and breaks it down either per day or week for the last 14 days. +// +// GitHub API docs: https://developer.github.com/v3/repos/traffic/#views +func (s *RepositoriesService) ListTrafficClones(ctx context.Context, owner, repo string, opt *TrafficBreakdownOptions) (*TrafficClones, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/traffic/clones", owner, repo) + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + trafficClones := new(TrafficClones) + resp, err := s.client.Do(ctx, req, &trafficClones) + if err != nil { + return nil, resp, err + } + + return trafficClones, resp, nil +} diff --git a/vendor/github.com/google/go-github/github/search.go b/vendor/github.com/google/go-github/github/search.go new file mode 100644 index 00000000..6e0000df --- /dev/null +++ b/vendor/github.com/google/go-github/github/search.go @@ -0,0 +1,255 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" + "strconv" + + qs "github.com/google/go-querystring/query" +) + +// SearchService provides access to the search related functions +// in the GitHub API. +// +// Each method takes a query string defining the search keywords and any search qualifiers. +// For example, when searching issues, the query "gopher is:issue language:go" will search +// for issues containing the word "gopher" in Go repositories. The method call +// opts := &github.SearchOptions{Sort: "created", Order: "asc"} +// cl.Search.Issues(ctx, "gopher is:issue language:go", opts) +// will search for such issues, sorting by creation date in ascending order +// (i.e., oldest first). +// +// GitHub API docs: https://developer.github.com/v3/search/ +type SearchService service + +// SearchOptions specifies optional parameters to the SearchService methods. +type SearchOptions struct { + // How to sort the search results. Possible values are: + // - for repositories: stars, fork, updated + // - for commits: author-date, committer-date + // - for code: indexed + // - for issues: comments, created, updated + // - for users: followers, repositories, joined + // + // Default is to sort by best match. + Sort string `url:"sort,omitempty"` + + // Sort order if sort parameter is provided. Possible values are: asc, + // desc. Default is desc. + Order string `url:"order,omitempty"` + + // Whether to retrieve text match metadata with a query + TextMatch bool `url:"-"` + + ListOptions +} + +// Common search parameters. +type searchParameters struct { + Query string + RepositoryID *int64 // Sent if non-nil. +} + +// RepositoriesSearchResult represents the result of a repositories search. +type RepositoriesSearchResult struct { + Total *int `json:"total_count,omitempty"` + IncompleteResults *bool `json:"incomplete_results,omitempty"` + Repositories []Repository `json:"items,omitempty"` +} + +// Repositories searches repositories via various criteria. +// +// GitHub API docs: https://developer.github.com/v3/search/#search-repositories +func (s *SearchService) Repositories(ctx context.Context, query string, opt *SearchOptions) (*RepositoriesSearchResult, *Response, error) { + result := new(RepositoriesSearchResult) + resp, err := s.search(ctx, "repositories", &searchParameters{Query: query}, opt, result) + return result, resp, err +} + +// CommitsSearchResult represents the result of a commits search. +type CommitsSearchResult struct { + Total *int `json:"total_count,omitempty"` + IncompleteResults *bool `json:"incomplete_results,omitempty"` + Commits []*CommitResult `json:"items,omitempty"` +} + +// CommitResult represents a commit object as returned in commit search endpoint response. +type CommitResult struct { + SHA *string `json:"sha,omitempty"` + Commit *Commit `json:"commit,omitempty"` + Author *User `json:"author,omitempty"` + Committer *User `json:"committer,omitempty"` + Parents []*Commit `json:"parents,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` + URL *string `json:"url,omitempty"` + CommentsURL *string `json:"comments_url,omitempty"` + + Repository *Repository `json:"repository,omitempty"` + Score *float64 `json:"score,omitempty"` +} + +// Commits searches commits via various criteria. +// +// GitHub API docs: https://developer.github.com/v3/search/#search-commits +func (s *SearchService) Commits(ctx context.Context, query string, opt *SearchOptions) (*CommitsSearchResult, *Response, error) { + result := new(CommitsSearchResult) + resp, err := s.search(ctx, "commits", &searchParameters{Query: query}, opt, result) + return result, resp, err +} + +// IssuesSearchResult represents the result of an issues search. +type IssuesSearchResult struct { + Total *int `json:"total_count,omitempty"` + IncompleteResults *bool `json:"incomplete_results,omitempty"` + Issues []Issue `json:"items,omitempty"` +} + +// Issues searches issues via various criteria. +// +// GitHub API docs: https://developer.github.com/v3/search/#search-issues +func (s *SearchService) Issues(ctx context.Context, query string, opt *SearchOptions) (*IssuesSearchResult, *Response, error) { + result := new(IssuesSearchResult) + resp, err := s.search(ctx, "issues", &searchParameters{Query: query}, opt, result) + return result, resp, err +} + +// UsersSearchResult represents the result of a users search. +type UsersSearchResult struct { + Total *int `json:"total_count,omitempty"` + IncompleteResults *bool `json:"incomplete_results,omitempty"` + Users []User `json:"items,omitempty"` +} + +// Users searches users via various criteria. +// +// GitHub API docs: https://developer.github.com/v3/search/#search-users +func (s *SearchService) Users(ctx context.Context, query string, opt *SearchOptions) (*UsersSearchResult, *Response, error) { + result := new(UsersSearchResult) + resp, err := s.search(ctx, "users", &searchParameters{Query: query}, opt, result) + return result, resp, err +} + +// Match represents a single text match. +type Match struct { + Text *string `json:"text,omitempty"` + Indices []int `json:"indices,omitempty"` +} + +// TextMatch represents a text match for a SearchResult +type TextMatch struct { + ObjectURL *string `json:"object_url,omitempty"` + ObjectType *string `json:"object_type,omitempty"` + Property *string `json:"property,omitempty"` + Fragment *string `json:"fragment,omitempty"` + Matches []Match `json:"matches,omitempty"` +} + +func (tm TextMatch) String() string { + return Stringify(tm) +} + +// CodeSearchResult represents the result of a code search. +type CodeSearchResult struct { + Total *int `json:"total_count,omitempty"` + IncompleteResults *bool `json:"incomplete_results,omitempty"` + CodeResults []CodeResult `json:"items,omitempty"` +} + +// CodeResult represents a single search result. +type CodeResult struct { + Name *string `json:"name,omitempty"` + Path *string `json:"path,omitempty"` + SHA *string `json:"sha,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` + Repository *Repository `json:"repository,omitempty"` + TextMatches []TextMatch `json:"text_matches,omitempty"` +} + +func (c CodeResult) String() string { + return Stringify(c) +} + +// Code searches code via various criteria. +// +// GitHub API docs: https://developer.github.com/v3/search/#search-code +func (s *SearchService) Code(ctx context.Context, query string, opt *SearchOptions) (*CodeSearchResult, *Response, error) { + result := new(CodeSearchResult) + resp, err := s.search(ctx, "code", &searchParameters{Query: query}, opt, result) + return result, resp, err +} + +// LabelsSearchResult represents the result of a code search. +type LabelsSearchResult struct { + Total *int `json:"total_count,omitempty"` + IncompleteResults *bool `json:"incomplete_results,omitempty"` + Labels []*LabelResult `json:"items,omitempty"` +} + +// LabelResult represents a single search result. +type LabelResult struct { + ID *int64 `json:"id,omitempty"` + URL *string `json:"url,omitempty"` + Name *string `json:"name,omitempty"` + Color *string `json:"color,omitempty"` + Default *bool `json:"default,omitempty"` + Description *string `json:"description,omitempty"` + Score *float64 `json:"score,omitempty"` +} + +func (l LabelResult) String() string { + return Stringify(l) +} + +// Labels searches labels in the repository with ID repoID via various criteria. +// +// GitHub API docs: https://developer.github.com/v3/search/#search-labels +func (s *SearchService) Labels(ctx context.Context, repoID int64, query string, opt *SearchOptions) (*LabelsSearchResult, *Response, error) { + result := new(LabelsSearchResult) + resp, err := s.search(ctx, "labels", &searchParameters{RepositoryID: &repoID, Query: query}, opt, result) + return result, resp, err +} + +// Helper function that executes search queries against different +// GitHub search types (repositories, commits, code, issues, users, labels) +func (s *SearchService) search(ctx context.Context, searchType string, parameters *searchParameters, opt *SearchOptions, result interface{}) (*Response, error) { + params, err := qs.Values(opt) + if err != nil { + return nil, err + } + params.Set("q", parameters.Query) + if parameters.RepositoryID != nil { + params.Set("repository_id", strconv.FormatInt(*parameters.RepositoryID, 10)) + } + u := fmt.Sprintf("search/%s?%s", searchType, params.Encode()) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, err + } + + switch { + case searchType == "commits": + // Accept header for search commits preview endpoint + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeCommitSearchPreview) + case searchType == "repositories": + // Accept header for search repositories based on topics preview endpoint + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeTopicsPreview) + case searchType == "labels": + // Accept header for search labels based on label description preview endpoint. + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeLabelDescriptionSearchPreview) + case opt != nil && opt.TextMatch: + // Accept header defaults to "application/vnd.github.v3+json" + // We change it here to fetch back text-match metadata + req.Header.Set("Accept", "application/vnd.github.v3.text-match+json") + } + + return s.client.Do(ctx, req, result) +} diff --git a/vendor/github.com/google/go-github/github/strings.go b/vendor/github.com/google/go-github/github/strings.go new file mode 100644 index 00000000..431e1cc6 --- /dev/null +++ b/vendor/github.com/google/go-github/github/strings.go @@ -0,0 +1,93 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "bytes" + "fmt" + "io" + + "reflect" +) + +var timestampType = reflect.TypeOf(Timestamp{}) + +// Stringify attempts to create a reasonable string representation of types in +// the GitHub library. It does things like resolve pointers to their values +// and omits struct fields with nil values. +func Stringify(message interface{}) string { + var buf bytes.Buffer + v := reflect.ValueOf(message) + stringifyValue(&buf, v) + return buf.String() +} + +// stringifyValue was heavily inspired by the goprotobuf library. + +func stringifyValue(w io.Writer, val reflect.Value) { + if val.Kind() == reflect.Ptr && val.IsNil() { + w.Write([]byte("")) + return + } + + v := reflect.Indirect(val) + + switch v.Kind() { + case reflect.String: + fmt.Fprintf(w, `"%s"`, v) + case reflect.Slice: + w.Write([]byte{'['}) + for i := 0; i < v.Len(); i++ { + if i > 0 { + w.Write([]byte{' '}) + } + + stringifyValue(w, v.Index(i)) + } + + w.Write([]byte{']'}) + return + case reflect.Struct: + if v.Type().Name() != "" { + w.Write([]byte(v.Type().String())) + } + + // special handling of Timestamp values + if v.Type() == timestampType { + fmt.Fprintf(w, "{%s}", v.Interface()) + return + } + + w.Write([]byte{'{'}) + + var sep bool + for i := 0; i < v.NumField(); i++ { + fv := v.Field(i) + if fv.Kind() == reflect.Ptr && fv.IsNil() { + continue + } + if fv.Kind() == reflect.Slice && fv.IsNil() { + continue + } + + if sep { + w.Write([]byte(", ")) + } else { + sep = true + } + + w.Write([]byte(v.Type().Field(i).Name)) + w.Write([]byte{':'}) + stringifyValue(w, fv) + } + + w.Write([]byte{'}'}) + default: + if v.CanInterface() { + fmt.Fprint(w, v.Interface()) + } + } +} diff --git a/vendor/github.com/google/go-github/github/teams.go b/vendor/github.com/google/go-github/github/teams.go new file mode 100644 index 00000000..1021d538 --- /dev/null +++ b/vendor/github.com/google/go-github/github/teams.go @@ -0,0 +1,7 @@ +package github + +// TeamsService provides access to the team-related functions +// in the GitHub API. +// +// GitHub API docs: https://developer.github.com/v3/teams/ +type TeamsService service diff --git a/vendor/github.com/google/go-github/github/teams_discussion_comments.go b/vendor/github.com/google/go-github/github/teams_discussion_comments.go new file mode 100644 index 00000000..26d0e8c5 --- /dev/null +++ b/vendor/github.com/google/go-github/github/teams_discussion_comments.go @@ -0,0 +1,154 @@ +// Copyright 2018 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// DiscussionComment represents a GitHub dicussion in a team. +type DiscussionComment struct { + Author *User `json:"author,omitempty"` + Body *string `json:"body,omitempty"` + BodyHTML *string `json:"body_html,omitempty"` + BodyVersion *string `json:"body_version,omitempty"` + CreatedAt *Timestamp `json:"created_at,omitempty"` + LastEditedAt *Timestamp `json:"last_edited_at,omitempty"` + DiscussionURL *string `json:"discussion_url,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` + NodeID *string `json:"node_id,omitempty"` + Number *int64 `json:"number,omitempty"` + UpdatedAt *Timestamp `json:"updated_at,omitempty"` + URL *string `json:"url,omitempty"` +} + +func (c DiscussionComment) String() string { + return Stringify(c) +} + +// DiscussionCommentListOptions specifies optional parameters to the +// TeamServices.ListComments method. +type DiscussionCommentListOptions struct { + // Sorts the discussion comments by the date they were created. + // Accepted values are asc and desc. Default is desc. + Direction string `url:"direction,omitempty"` +} + +// ListComments lists all comments on a team discussion. +// Authenticated user must grant read:discussion scope. +// +// GitHub API docs: https://developer.github.com/v3/teams/discussion_comments/#list-comments +func (s *TeamsService) ListComments(ctx context.Context, teamID int64, discussionNumber int, options *DiscussionCommentListOptions) ([]*DiscussionComment, *Response, error) { + u := fmt.Sprintf("teams/%v/discussions/%v/comments", teamID, discussionNumber) + u, err := addOptions(u, options) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeTeamDiscussionsPreview) + + var comments []*DiscussionComment + resp, err := s.client.Do(ctx, req, &comments) + if err != nil { + return nil, resp, err + } + + return comments, resp, nil +} + +// GetComment gets a specific comment on a team discussion. +// Authenticated user must grant read:discussion scope. +// +// GitHub API docs: https://developer.github.com/v3/teams/discussion_comments/#get-a-single-comment +func (s *TeamsService) GetComment(ctx context.Context, teamID int64, discussionNumber, commentNumber int) (*DiscussionComment, *Response, error) { + u := fmt.Sprintf("teams/%v/discussions/%v/comments/%v", teamID, discussionNumber, commentNumber) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeTeamDiscussionsPreview) + + discussionComment := &DiscussionComment{} + resp, err := s.client.Do(ctx, req, discussionComment) + if err != nil { + return nil, resp, err + } + + return discussionComment, resp, nil +} + +// CreateComment creates a new discussion post on a team discussion. +// Authenticated user must grant write:discussion scope. +// +// GitHub API docs: https://developer.github.com/v3/teams/discussion_comments/#create-a-comment +func (s *TeamsService) CreateComment(ctx context.Context, teamID int64, discsusionNumber int, comment DiscussionComment) (*DiscussionComment, *Response, error) { + u := fmt.Sprintf("teams/%v/discussions/%v/comments", teamID, discsusionNumber) + req, err := s.client.NewRequest("POST", u, comment) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeTeamDiscussionsPreview) + + discussionComment := &DiscussionComment{} + resp, err := s.client.Do(ctx, req, discussionComment) + if err != nil { + return nil, resp, err + } + + return discussionComment, resp, nil +} + +// EditComment edits the body text of a discussion comment. +// Authenticated user must grant write:discussion scope. +// User is allowed to edit body of a comment only. +// +// GitHub API docs: https://developer.github.com/v3/teams/discussion_comments/#edit-a-comment +func (s *TeamsService) EditComment(ctx context.Context, teamID int64, discussionNumber, commentNumber int, comment DiscussionComment) (*DiscussionComment, *Response, error) { + u := fmt.Sprintf("teams/%v/discussions/%v/comments/%v", teamID, discussionNumber, commentNumber) + req, err := s.client.NewRequest("PATCH", u, comment) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeTeamDiscussionsPreview) + + discussionComment := &DiscussionComment{} + resp, err := s.client.Do(ctx, req, discussionComment) + if err != nil { + return nil, resp, err + } + + return discussionComment, resp, nil +} + +// DeleteComment deletes a comment on a team discussion. +// Authenticated user must grant write:discussion scope. +// +// GitHub API docs: https://developer.github.com/v3/teams/discussion_comments/#delete-a-comment +func (s *TeamsService) DeleteComment(ctx context.Context, teamID int64, discussionNumber, commentNumber int) (*Response, error) { + u := fmt.Sprintf("teams/%v/discussions/%v/comments/%v", teamID, discussionNumber, commentNumber) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeTeamDiscussionsPreview) + + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/teams_discussions.go b/vendor/github.com/google/go-github/github/teams_discussions.go new file mode 100644 index 00000000..fc9b25a5 --- /dev/null +++ b/vendor/github.com/google/go-github/github/teams_discussions.go @@ -0,0 +1,159 @@ +// Copyright 2018 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// TeamDiscussion represents a GitHub dicussion in a team. +type TeamDiscussion struct { + Author *User `json:"author,omitempty"` + Body *string `json:"body,omitempty"` + BodyHTML *string `json:"body_html,omitempty"` + BodyVersion *string `json:"body_version,omitempty"` + CommentsCount *int64 `json:"comments_count,omitempty"` + CommentsURL *string `json:"comments_url,omitempty"` + CreatedAt *Timestamp `json:"created_at,omitempty"` + LastEditedAt *Timestamp `json:"last_edited_at,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` + NodeID *string `json:"node_id,omitempty"` + Number *int64 `json:"number,omitempty"` + Pinned *bool `json:"pinned,omitempty"` + Private *bool `json:"private,omitempty"` + TeamURL *string `json:"team_url,omitempty"` + Title *string `json:"title,omitempty"` + UpdatedAt *Timestamp `json:"updated_at,omitempty"` + URL *string `json:"url,omitempty"` +} + +func (d TeamDiscussion) String() string { + return Stringify(d) +} + +// DiscussionListOptions specifies optional parameters to the +// TeamServices.ListDiscussions method. +type DiscussionListOptions struct { + // Sorts the discussion by the date they were created. + // Accepted values are asc and desc. Default is desc. + Direction string `url:"direction,omitempty"` +} + +// ListDiscussions lists all discussions on team's page. +// Authenticated user must grant read:discussion scope. +// +// GitHub API docs: https://developer.github.com/v3/teams/discussions/#list-discussions +func (s *TeamsService) ListDiscussions(ctx context.Context, teamID int64, options *DiscussionListOptions) ([]*TeamDiscussion, *Response, error) { + u := fmt.Sprintf("teams/%v/discussions", teamID) + u, err := addOptions(u, options) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeTeamDiscussionsPreview) + + var teamDiscussions []*TeamDiscussion + resp, err := s.client.Do(ctx, req, &teamDiscussions) + if err != nil { + return nil, resp, err + } + + return teamDiscussions, resp, nil +} + +// GetDiscussion gets a specific discussion on a team's page. +// Authenticated user must grant read:discussion scope. +// +// GitHub API docs: https://developer.github.com/v3/teams/discussions/#get-a-single-discussion +func (s *TeamsService) GetDiscussion(ctx context.Context, teamID int64, discussionNumber int) (*TeamDiscussion, *Response, error) { + u := fmt.Sprintf("teams/%v/discussions/%v", teamID, discussionNumber) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeTeamDiscussionsPreview) + + teamDiscussion := &TeamDiscussion{} + resp, err := s.client.Do(ctx, req, teamDiscussion) + if err != nil { + return nil, resp, err + } + + return teamDiscussion, resp, nil +} + +// CreateDiscussion creates a new discussion post on a team's page. +// Authenticated user must grant write:discussion scope. +// +// GitHub API docs: https://developer.github.com/v3/teams/discussions/#create-a-discussion +func (s *TeamsService) CreateDiscussion(ctx context.Context, teamID int64, discussion TeamDiscussion) (*TeamDiscussion, *Response, error) { + u := fmt.Sprintf("teams/%v/discussions", teamID) + req, err := s.client.NewRequest("POST", u, discussion) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeTeamDiscussionsPreview) + + teamDiscussion := &TeamDiscussion{} + resp, err := s.client.Do(ctx, req, teamDiscussion) + if err != nil { + return nil, resp, err + } + + return teamDiscussion, resp, nil +} + +// EditDiscussion edits the title and body text of a discussion post. +// Authenticated user must grant write:discussion scope. +// User is allowed to change Title and Body of a discussion only. +// +// GitHub API docs: https://developer.github.com/v3/teams/discussions/#edit-a-discussion +func (s *TeamsService) EditDiscussion(ctx context.Context, teamID int64, discussionNumber int, discussion TeamDiscussion) (*TeamDiscussion, *Response, error) { + u := fmt.Sprintf("teams/%v/discussions/%v", teamID, discussionNumber) + req, err := s.client.NewRequest("PATCH", u, discussion) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeTeamDiscussionsPreview) + + teamDiscussion := &TeamDiscussion{} + resp, err := s.client.Do(ctx, req, teamDiscussion) + if err != nil { + return nil, resp, err + } + + return teamDiscussion, resp, nil +} + +// DeleteDiscussion deletes a discussion from team's page. +// Authenticated user must grant write:discussion scope. +// +// GitHub API docs: https://developer.github.com/v3/teams/discussions/#delete-a-discussion +func (s *TeamsService) DeleteDiscussion(ctx context.Context, teamID int64, discussionNumber int) (*Response, error) { + u := fmt.Sprintf("teams/%v/discussions/%v", teamID, discussionNumber) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeTeamDiscussionsPreview) + + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/timestamp.go b/vendor/github.com/google/go-github/github/timestamp.go new file mode 100644 index 00000000..a1c1554a --- /dev/null +++ b/vendor/github.com/google/go-github/github/timestamp.go @@ -0,0 +1,41 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "strconv" + "time" +) + +// Timestamp represents a time that can be unmarshalled from a JSON string +// formatted as either an RFC3339 or Unix timestamp. This is necessary for some +// fields since the GitHub API is inconsistent in how it represents times. All +// exported methods of time.Time can be called on Timestamp. +type Timestamp struct { + time.Time +} + +func (t Timestamp) String() string { + return t.Time.String() +} + +// UnmarshalJSON implements the json.Unmarshaler interface. +// Time is expected in RFC3339 or Unix format. +func (t *Timestamp) UnmarshalJSON(data []byte) (err error) { + str := string(data) + i, err := strconv.ParseInt(str, 10, 64) + if err == nil { + (*t).Time = time.Unix(i, 0) + } else { + (*t).Time, err = time.Parse(`"`+time.RFC3339+`"`, str) + } + return +} + +// Equal reports whether t and u are equal based on time.Equal +func (t Timestamp) Equal(u Timestamp) bool { + return t.Time.Equal(u.Time) +} diff --git a/vendor/github.com/google/go-github/github/users.go b/vendor/github.com/google/go-github/github/users.go new file mode 100644 index 00000000..8c4efe1d --- /dev/null +++ b/vendor/github.com/google/go-github/github/users.go @@ -0,0 +1,233 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// UsersService handles communication with the user related +// methods of the GitHub API. +// +// GitHub API docs: https://developer.github.com/v3/users/ +type UsersService service + +// User represents a GitHub user. +type User struct { + Login *string `json:"login,omitempty"` + ID *int64 `json:"id,omitempty"` + AvatarURL *string `json:"avatar_url,omitempty"` + HTMLURL *string `json:"html_url,omitempty"` + GravatarID *string `json:"gravatar_id,omitempty"` + Name *string `json:"name,omitempty"` + Company *string `json:"company,omitempty"` + Blog *string `json:"blog,omitempty"` + Location *string `json:"location,omitempty"` + Email *string `json:"email,omitempty"` + Hireable *bool `json:"hireable,omitempty"` + Bio *string `json:"bio,omitempty"` + PublicRepos *int `json:"public_repos,omitempty"` + PublicGists *int `json:"public_gists,omitempty"` + Followers *int `json:"followers,omitempty"` + Following *int `json:"following,omitempty"` + CreatedAt *Timestamp `json:"created_at,omitempty"` + UpdatedAt *Timestamp `json:"updated_at,omitempty"` + SuspendedAt *Timestamp `json:"suspended_at,omitempty"` + Type *string `json:"type,omitempty"` + SiteAdmin *bool `json:"site_admin,omitempty"` + TotalPrivateRepos *int `json:"total_private_repos,omitempty"` + OwnedPrivateRepos *int `json:"owned_private_repos,omitempty"` + PrivateGists *int `json:"private_gists,omitempty"` + DiskUsage *int `json:"disk_usage,omitempty"` + Collaborators *int `json:"collaborators,omitempty"` + Plan *Plan `json:"plan,omitempty"` + + // API URLs + URL *string `json:"url,omitempty"` + EventsURL *string `json:"events_url,omitempty"` + FollowingURL *string `json:"following_url,omitempty"` + FollowersURL *string `json:"followers_url,omitempty"` + GistsURL *string `json:"gists_url,omitempty"` + OrganizationsURL *string `json:"organizations_url,omitempty"` + ReceivedEventsURL *string `json:"received_events_url,omitempty"` + ReposURL *string `json:"repos_url,omitempty"` + StarredURL *string `json:"starred_url,omitempty"` + SubscriptionsURL *string `json:"subscriptions_url,omitempty"` + + // TextMatches is only populated from search results that request text matches + // See: search.go and https://developer.github.com/v3/search/#text-match-metadata + TextMatches []TextMatch `json:"text_matches,omitempty"` + + // Permissions identifies the permissions that a user has on a given + // repository. This is only populated when calling Repositories.ListCollaborators. + Permissions *map[string]bool `json:"permissions,omitempty"` +} + +func (u User) String() string { + return Stringify(u) +} + +// Get fetches a user. Passing the empty string will fetch the authenticated +// user. +// +// GitHub API docs: https://developer.github.com/v3/users/#get-a-single-user +func (s *UsersService) Get(ctx context.Context, user string) (*User, *Response, error) { + var u string + if user != "" { + u = fmt.Sprintf("users/%v", user) + } else { + u = "user" + } + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + uResp := new(User) + resp, err := s.client.Do(ctx, req, uResp) + if err != nil { + return nil, resp, err + } + + return uResp, resp, nil +} + +// GetByID fetches a user. +// +// Note: GetByID uses the undocumented GitHub API endpoint /user/:id. +func (s *UsersService) GetByID(ctx context.Context, id int64) (*User, *Response, error) { + u := fmt.Sprintf("user/%d", id) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + user := new(User) + resp, err := s.client.Do(ctx, req, user) + if err != nil { + return nil, resp, err + } + + return user, resp, nil +} + +// Edit the authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/users/#update-the-authenticated-user +func (s *UsersService) Edit(ctx context.Context, user *User) (*User, *Response, error) { + u := "user" + req, err := s.client.NewRequest("PATCH", u, user) + if err != nil { + return nil, nil, err + } + + uResp := new(User) + resp, err := s.client.Do(ctx, req, uResp) + if err != nil { + return nil, resp, err + } + + return uResp, resp, nil +} + +// UserListOptions specifies optional parameters to the UsersService.ListAll +// method. +type UserListOptions struct { + // ID of the last user seen + Since int64 `url:"since,omitempty"` + + // Note: Pagination is powered exclusively by the Since parameter, + // ListOptions.Page has no effect. + // ListOptions.PerPage controls an undocumented GitHub API parameter. + ListOptions +} + +// ListAll lists all GitHub users. +// +// To paginate through all users, populate 'Since' with the ID of the last user. +// +// GitHub API docs: https://developer.github.com/v3/users/#get-all-users +func (s *UsersService) ListAll(ctx context.Context, opt *UserListOptions) ([]*User, *Response, error) { + u, err := addOptions("users", opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var users []*User + resp, err := s.client.Do(ctx, req, &users) + if err != nil { + return nil, resp, err + } + + return users, resp, nil +} + +// ListInvitations lists all currently-open repository invitations for the +// authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/repos/invitations/#list-a-users-repository-invitations +func (s *UsersService) ListInvitations(ctx context.Context, opt *ListOptions) ([]*RepositoryInvitation, *Response, error) { + u, err := addOptions("user/repository_invitations", opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeRepositoryInvitationsPreview) + + invites := []*RepositoryInvitation{} + resp, err := s.client.Do(ctx, req, &invites) + if err != nil { + return nil, resp, err + } + + return invites, resp, nil +} + +// AcceptInvitation accepts the currently-open repository invitation for the +// authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/repos/invitations/#accept-a-repository-invitation +func (s *UsersService) AcceptInvitation(ctx context.Context, invitationID int64) (*Response, error) { + u := fmt.Sprintf("user/repository_invitations/%v", invitationID) + req, err := s.client.NewRequest("PATCH", u, nil) + if err != nil { + return nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeRepositoryInvitationsPreview) + + return s.client.Do(ctx, req, nil) +} + +// DeclineInvitation declines the currently-open repository invitation for the +// authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/repos/invitations/#decline-a-repository-invitation +func (s *UsersService) DeclineInvitation(ctx context.Context, invitationID int64) (*Response, error) { + u := fmt.Sprintf("user/repository_invitations/%v", invitationID) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeRepositoryInvitationsPreview) + + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/users_administration.go b/vendor/github.com/google/go-github/github/users_administration.go new file mode 100644 index 00000000..e042398d --- /dev/null +++ b/vendor/github.com/google/go-github/github/users_administration.go @@ -0,0 +1,67 @@ +// Copyright 2014 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// PromoteSiteAdmin promotes a user to a site administrator of a GitHub Enterprise instance. +// +// GitHub API docs: https://developer.github.com/v3/users/administration/#promote-an-ordinary-user-to-a-site-administrator +func (s *UsersService) PromoteSiteAdmin(ctx context.Context, user string) (*Response, error) { + u := fmt.Sprintf("users/%v/site_admin", user) + + req, err := s.client.NewRequest("PUT", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +// DemoteSiteAdmin demotes a user from site administrator of a GitHub Enterprise instance. +// +// GitHub API docs: https://developer.github.com/v3/users/administration/#demote-a-site-administrator-to-an-ordinary-user +func (s *UsersService) DemoteSiteAdmin(ctx context.Context, user string) (*Response, error) { + u := fmt.Sprintf("users/%v/site_admin", user) + + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +// Suspend a user on a GitHub Enterprise instance. +// +// GitHub API docs: https://developer.github.com/v3/users/administration/#suspend-a-user +func (s *UsersService) Suspend(ctx context.Context, user string) (*Response, error) { + u := fmt.Sprintf("users/%v/suspended", user) + + req, err := s.client.NewRequest("PUT", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +// Unsuspend a user on a GitHub Enterprise instance. +// +// GitHub API docs: https://developer.github.com/v3/users/administration/#unsuspend-a-user +func (s *UsersService) Unsuspend(ctx context.Context, user string) (*Response, error) { + u := fmt.Sprintf("users/%v/suspended", user) + + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/users_blocking.go b/vendor/github.com/google/go-github/github/users_blocking.go new file mode 100644 index 00000000..39e45601 --- /dev/null +++ b/vendor/github.com/google/go-github/github/users_blocking.go @@ -0,0 +1,91 @@ +// Copyright 2017 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// ListBlockedUsers lists all the blocked users by the authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/users/blocking/#list-blocked-users +func (s *UsersService) ListBlockedUsers(ctx context.Context, opt *ListOptions) ([]*User, *Response, error) { + u := "user/blocks" + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeBlockUsersPreview) + + var blockedUsers []*User + resp, err := s.client.Do(ctx, req, &blockedUsers) + if err != nil { + return nil, resp, err + } + + return blockedUsers, resp, nil +} + +// IsBlocked reports whether specified user is blocked by the authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/users/blocking/#check-whether-youve-blocked-a-user +func (s *UsersService) IsBlocked(ctx context.Context, user string) (bool, *Response, error) { + u := fmt.Sprintf("user/blocks/%v", user) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return false, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeBlockUsersPreview) + + resp, err := s.client.Do(ctx, req, nil) + isBlocked, err := parseBoolResponse(err) + return isBlocked, resp, err +} + +// BlockUser blocks specified user for the authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/users/blocking/#block-a-user +func (s *UsersService) BlockUser(ctx context.Context, user string) (*Response, error) { + u := fmt.Sprintf("user/blocks/%v", user) + + req, err := s.client.NewRequest("PUT", u, nil) + if err != nil { + return nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeBlockUsersPreview) + + return s.client.Do(ctx, req, nil) +} + +// UnblockUser unblocks specified user for the authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/users/blocking/#unblock-a-user +func (s *UsersService) UnblockUser(ctx context.Context, user string) (*Response, error) { + u := fmt.Sprintf("user/blocks/%v", user) + + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeBlockUsersPreview) + + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/users_emails.go b/vendor/github.com/google/go-github/github/users_emails.go new file mode 100644 index 00000000..0bbd4627 --- /dev/null +++ b/vendor/github.com/google/go-github/github/users_emails.go @@ -0,0 +1,71 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import "context" + +// UserEmail represents user's email address +type UserEmail struct { + Email *string `json:"email,omitempty"` + Primary *bool `json:"primary,omitempty"` + Verified *bool `json:"verified,omitempty"` +} + +// ListEmails lists all email addresses for the authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/users/emails/#list-email-addresses-for-a-user +func (s *UsersService) ListEmails(ctx context.Context, opt *ListOptions) ([]*UserEmail, *Response, error) { + u := "user/emails" + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var emails []*UserEmail + resp, err := s.client.Do(ctx, req, &emails) + if err != nil { + return nil, resp, err + } + + return emails, resp, nil +} + +// AddEmails adds email addresses of the authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/users/emails/#add-email-addresses +func (s *UsersService) AddEmails(ctx context.Context, emails []string) ([]*UserEmail, *Response, error) { + u := "user/emails" + req, err := s.client.NewRequest("POST", u, emails) + if err != nil { + return nil, nil, err + } + + var e []*UserEmail + resp, err := s.client.Do(ctx, req, &e) + if err != nil { + return nil, resp, err + } + + return e, resp, nil +} + +// DeleteEmails deletes email addresses from authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/users/emails/#delete-email-addresses +func (s *UsersService) DeleteEmails(ctx context.Context, emails []string) (*Response, error) { + u := "user/emails" + req, err := s.client.NewRequest("DELETE", u, emails) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/users_followers.go b/vendor/github.com/google/go-github/github/users_followers.go new file mode 100644 index 00000000..c2224096 --- /dev/null +++ b/vendor/github.com/google/go-github/github/users_followers.go @@ -0,0 +1,119 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// ListFollowers lists the followers for a user. Passing the empty string will +// fetch followers for the authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/users/followers/#list-followers-of-a-user +func (s *UsersService) ListFollowers(ctx context.Context, user string, opt *ListOptions) ([]*User, *Response, error) { + var u string + if user != "" { + u = fmt.Sprintf("users/%v/followers", user) + } else { + u = "user/followers" + } + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var users []*User + resp, err := s.client.Do(ctx, req, &users) + if err != nil { + return nil, resp, err + } + + return users, resp, nil +} + +// ListFollowing lists the people that a user is following. Passing the empty +// string will list people the authenticated user is following. +// +// GitHub API docs: https://developer.github.com/v3/users/followers/#list-users-followed-by-another-user +func (s *UsersService) ListFollowing(ctx context.Context, user string, opt *ListOptions) ([]*User, *Response, error) { + var u string + if user != "" { + u = fmt.Sprintf("users/%v/following", user) + } else { + u = "user/following" + } + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var users []*User + resp, err := s.client.Do(ctx, req, &users) + if err != nil { + return nil, resp, err + } + + return users, resp, nil +} + +// IsFollowing checks if "user" is following "target". Passing the empty +// string for "user" will check if the authenticated user is following "target". +// +// GitHub API docs: https://developer.github.com/v3/users/followers/#check-if-you-are-following-a-user +func (s *UsersService) IsFollowing(ctx context.Context, user, target string) (bool, *Response, error) { + var u string + if user != "" { + u = fmt.Sprintf("users/%v/following/%v", user, target) + } else { + u = fmt.Sprintf("user/following/%v", target) + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return false, nil, err + } + + resp, err := s.client.Do(ctx, req, nil) + following, err := parseBoolResponse(err) + return following, resp, err +} + +// Follow will cause the authenticated user to follow the specified user. +// +// GitHub API docs: https://developer.github.com/v3/users/followers/#follow-a-user +func (s *UsersService) Follow(ctx context.Context, user string) (*Response, error) { + u := fmt.Sprintf("user/following/%v", user) + req, err := s.client.NewRequest("PUT", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +// Unfollow will cause the authenticated user to unfollow the specified user. +// +// GitHub API docs: https://developer.github.com/v3/users/followers/#unfollow-a-user +func (s *UsersService) Unfollow(ctx context.Context, user string) (*Response, error) { + u := fmt.Sprintf("user/following/%v", user) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/users_gpg_keys.go b/vendor/github.com/google/go-github/github/users_gpg_keys.go new file mode 100644 index 00000000..d8bbc520 --- /dev/null +++ b/vendor/github.com/google/go-github/github/users_gpg_keys.go @@ -0,0 +1,140 @@ +// Copyright 2016 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" + "time" +) + +// GPGKey represents a GitHub user's public GPG key used to verify GPG signed commits and tags. +// +// https://developer.github.com/changes/2016-04-04-git-signing-api-preview/ +type GPGKey struct { + ID *int64 `json:"id,omitempty"` + PrimaryKeyID *int64 `json:"primary_key_id,omitempty"` + KeyID *string `json:"key_id,omitempty"` + PublicKey *string `json:"public_key,omitempty"` + Emails []GPGEmail `json:"emails,omitempty"` + Subkeys []GPGKey `json:"subkeys,omitempty"` + CanSign *bool `json:"can_sign,omitempty"` + CanEncryptComms *bool `json:"can_encrypt_comms,omitempty"` + CanEncryptStorage *bool `json:"can_encrypt_storage,omitempty"` + CanCertify *bool `json:"can_certify,omitempty"` + CreatedAt *time.Time `json:"created_at,omitempty"` + ExpiresAt *time.Time `json:"expires_at,omitempty"` +} + +// String stringifies a GPGKey. +func (k GPGKey) String() string { + return Stringify(k) +} + +// GPGEmail represents an email address associated to a GPG key. +type GPGEmail struct { + Email *string `json:"email,omitempty"` + Verified *bool `json:"verified,omitempty"` +} + +// ListGPGKeys lists the public GPG keys for a user. Passing the empty +// string will fetch keys for the authenticated user. It requires authentication +// via Basic Auth or via OAuth with at least read:gpg_key scope. +// +// GitHub API docs: https://developer.github.com/v3/users/gpg_keys/#list-gpg-keys-for-a-user +func (s *UsersService) ListGPGKeys(ctx context.Context, user string, opt *ListOptions) ([]*GPGKey, *Response, error) { + var u string + if user != "" { + u = fmt.Sprintf("users/%v/gpg_keys", user) + } else { + u = "user/gpg_keys" + } + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGitSigningPreview) + + var keys []*GPGKey + resp, err := s.client.Do(ctx, req, &keys) + if err != nil { + return nil, resp, err + } + + return keys, resp, nil +} + +// GetGPGKey gets extended details for a single GPG key. It requires authentication +// via Basic Auth or via OAuth with at least read:gpg_key scope. +// +// GitHub API docs: https://developer.github.com/v3/users/gpg_keys/#get-a-single-gpg-key +func (s *UsersService) GetGPGKey(ctx context.Context, id int64) (*GPGKey, *Response, error) { + u := fmt.Sprintf("user/gpg_keys/%v", id) + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGitSigningPreview) + + key := &GPGKey{} + resp, err := s.client.Do(ctx, req, key) + if err != nil { + return nil, resp, err + } + + return key, resp, nil +} + +// CreateGPGKey creates a GPG key. It requires authenticatation via Basic Auth +// or OAuth with at least write:gpg_key scope. +// +// GitHub API docs: https://developer.github.com/v3/users/gpg_keys/#create-a-gpg-key +func (s *UsersService) CreateGPGKey(ctx context.Context, armoredPublicKey string) (*GPGKey, *Response, error) { + gpgKey := &struct { + ArmoredPublicKey string `json:"armored_public_key"` + }{ArmoredPublicKey: armoredPublicKey} + req, err := s.client.NewRequest("POST", "user/gpg_keys", gpgKey) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGitSigningPreview) + + key := &GPGKey{} + resp, err := s.client.Do(ctx, req, key) + if err != nil { + return nil, resp, err + } + + return key, resp, nil +} + +// DeleteGPGKey deletes a GPG key. It requires authentication via Basic Auth or +// via OAuth with at least admin:gpg_key scope. +// +// GitHub API docs: https://developer.github.com/v3/users/gpg_keys/#delete-a-gpg-key +func (s *UsersService) DeleteGPGKey(ctx context.Context, id int64) (*Response, error) { + u := fmt.Sprintf("user/gpg_keys/%v", id) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + // TODO: remove custom Accept header when this API fully launches. + req.Header.Set("Accept", mediaTypeGitSigningPreview) + + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/users_keys.go b/vendor/github.com/google/go-github/github/users_keys.go new file mode 100644 index 00000000..ddc832a1 --- /dev/null +++ b/vendor/github.com/google/go-github/github/users_keys.go @@ -0,0 +1,108 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// Key represents a public SSH key used to authenticate a user or deploy script. +type Key struct { + ID *int64 `json:"id,omitempty"` + Key *string `json:"key,omitempty"` + URL *string `json:"url,omitempty"` + Title *string `json:"title,omitempty"` + ReadOnly *bool `json:"read_only,omitempty"` +} + +func (k Key) String() string { + return Stringify(k) +} + +// ListKeys lists the verified public keys for a user. Passing the empty +// string will fetch keys for the authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/users/keys/#list-public-keys-for-a-user +func (s *UsersService) ListKeys(ctx context.Context, user string, opt *ListOptions) ([]*Key, *Response, error) { + var u string + if user != "" { + u = fmt.Sprintf("users/%v/keys", user) + } else { + u = "user/keys" + } + u, err := addOptions(u, opt) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var keys []*Key + resp, err := s.client.Do(ctx, req, &keys) + if err != nil { + return nil, resp, err + } + + return keys, resp, nil +} + +// GetKey fetches a single public key. +// +// GitHub API docs: https://developer.github.com/v3/users/keys/#get-a-single-public-key +func (s *UsersService) GetKey(ctx context.Context, id int64) (*Key, *Response, error) { + u := fmt.Sprintf("user/keys/%v", id) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + key := new(Key) + resp, err := s.client.Do(ctx, req, key) + if err != nil { + return nil, resp, err + } + + return key, resp, nil +} + +// CreateKey adds a public key for the authenticated user. +// +// GitHub API docs: https://developer.github.com/v3/users/keys/#create-a-public-key +func (s *UsersService) CreateKey(ctx context.Context, key *Key) (*Key, *Response, error) { + u := "user/keys" + + req, err := s.client.NewRequest("POST", u, key) + if err != nil { + return nil, nil, err + } + + k := new(Key) + resp, err := s.client.Do(ctx, req, k) + if err != nil { + return nil, resp, err + } + + return k, resp, nil +} + +// DeleteKey deletes a public key. +// +// GitHub API docs: https://developer.github.com/v3/users/keys/#delete-a-public-key +func (s *UsersService) DeleteKey(ctx context.Context, id int64) (*Response, error) { + u := fmt.Sprintf("user/keys/%v", id) + + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} diff --git a/vendor/github.com/google/go-github/github/with_appengine.go b/vendor/github.com/google/go-github/github/with_appengine.go new file mode 100644 index 00000000..59ce26b2 --- /dev/null +++ b/vendor/github.com/google/go-github/github/with_appengine.go @@ -0,0 +1,20 @@ +// Copyright 2017 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build appengine + +// This file provides glue for making github work on App Engine. + +package github + +import ( + "context" + "net/http" +) + +func withContext(ctx context.Context, req *http.Request) *http.Request { + // No-op because App Engine adds context to a request differently. + return req +} diff --git a/vendor/github.com/google/go-github/github/without_appengine.go b/vendor/github.com/google/go-github/github/without_appengine.go new file mode 100644 index 00000000..6f8fdac5 --- /dev/null +++ b/vendor/github.com/google/go-github/github/without_appengine.go @@ -0,0 +1,19 @@ +// Copyright 2017 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !appengine + +// This file provides glue for making github work without App Engine. + +package github + +import ( + "context" + "net/http" +) + +func withContext(ctx context.Context, req *http.Request) *http.Request { + return req.WithContext(ctx) +} diff --git a/vendor/github.com/google/go-querystring/LICENSE b/vendor/github.com/google/go-querystring/LICENSE new file mode 100644 index 00000000..ae121a1e --- /dev/null +++ b/vendor/github.com/google/go-querystring/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2013 Google. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/google/go-querystring/query/encode.go b/vendor/github.com/google/go-querystring/query/encode.go new file mode 100644 index 00000000..37080b19 --- /dev/null +++ b/vendor/github.com/google/go-querystring/query/encode.go @@ -0,0 +1,320 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package query implements encoding of structs into URL query parameters. +// +// As a simple example: +// +// type Options struct { +// Query string `url:"q"` +// ShowAll bool `url:"all"` +// Page int `url:"page"` +// } +// +// opt := Options{ "foo", true, 2 } +// v, _ := query.Values(opt) +// fmt.Print(v.Encode()) // will output: "q=foo&all=true&page=2" +// +// The exact mapping between Go values and url.Values is described in the +// documentation for the Values() function. +package query + +import ( + "bytes" + "fmt" + "net/url" + "reflect" + "strconv" + "strings" + "time" +) + +var timeType = reflect.TypeOf(time.Time{}) + +var encoderType = reflect.TypeOf(new(Encoder)).Elem() + +// Encoder is an interface implemented by any type that wishes to encode +// itself into URL values in a non-standard way. +type Encoder interface { + EncodeValues(key string, v *url.Values) error +} + +// Values returns the url.Values encoding of v. +// +// Values expects to be passed a struct, and traverses it recursively using the +// following encoding rules. +// +// Each exported struct field is encoded as a URL parameter unless +// +// - the field's tag is "-", or +// - the field is empty and its tag specifies the "omitempty" option +// +// The empty values are false, 0, any nil pointer or interface value, any array +// slice, map, or string of length zero, and any time.Time that returns true +// for IsZero(). +// +// The URL parameter name defaults to the struct field name but can be +// specified in the struct field's tag value. The "url" key in the struct +// field's tag value is the key name, followed by an optional comma and +// options. For example: +// +// // Field is ignored by this package. +// Field int `url:"-"` +// +// // Field appears as URL parameter "myName". +// Field int `url:"myName"` +// +// // Field appears as URL parameter "myName" and the field is omitted if +// // its value is empty +// Field int `url:"myName,omitempty"` +// +// // Field appears as URL parameter "Field" (the default), but the field +// // is skipped if empty. Note the leading comma. +// Field int `url:",omitempty"` +// +// For encoding individual field values, the following type-dependent rules +// apply: +// +// Boolean values default to encoding as the strings "true" or "false". +// Including the "int" option signals that the field should be encoded as the +// strings "1" or "0". +// +// time.Time values default to encoding as RFC3339 timestamps. Including the +// "unix" option signals that the field should be encoded as a Unix time (see +// time.Unix()) +// +// Slice and Array values default to encoding as multiple URL values of the +// same name. Including the "comma" option signals that the field should be +// encoded as a single comma-delimited value. Including the "space" option +// similarly encodes the value as a single space-delimited string. Including +// the "semicolon" option will encode the value as a semicolon-delimited string. +// Including the "brackets" option signals that the multiple URL values should +// have "[]" appended to the value name. "numbered" will append a number to +// the end of each incidence of the value name, example: +// name0=value0&name1=value1, etc. +// +// Anonymous struct fields are usually encoded as if their inner exported +// fields were fields in the outer struct, subject to the standard Go +// visibility rules. An anonymous struct field with a name given in its URL +// tag is treated as having that name, rather than being anonymous. +// +// Non-nil pointer values are encoded as the value pointed to. +// +// Nested structs are encoded including parent fields in value names for +// scoping. e.g: +// +// "user[name]=acme&user[addr][postcode]=1234&user[addr][city]=SFO" +// +// All other values are encoded using their default string representation. +// +// Multiple fields that encode to the same URL parameter name will be included +// as multiple URL values of the same name. +func Values(v interface{}) (url.Values, error) { + values := make(url.Values) + val := reflect.ValueOf(v) + for val.Kind() == reflect.Ptr { + if val.IsNil() { + return values, nil + } + val = val.Elem() + } + + if v == nil { + return values, nil + } + + if val.Kind() != reflect.Struct { + return nil, fmt.Errorf("query: Values() expects struct input. Got %v", val.Kind()) + } + + err := reflectValue(values, val, "") + return values, err +} + +// reflectValue populates the values parameter from the struct fields in val. +// Embedded structs are followed recursively (using the rules defined in the +// Values function documentation) breadth-first. +func reflectValue(values url.Values, val reflect.Value, scope string) error { + var embedded []reflect.Value + + typ := val.Type() + for i := 0; i < typ.NumField(); i++ { + sf := typ.Field(i) + if sf.PkgPath != "" && !sf.Anonymous { // unexported + continue + } + + sv := val.Field(i) + tag := sf.Tag.Get("url") + if tag == "-" { + continue + } + name, opts := parseTag(tag) + if name == "" { + if sf.Anonymous && sv.Kind() == reflect.Struct { + // save embedded struct for later processing + embedded = append(embedded, sv) + continue + } + + name = sf.Name + } + + if scope != "" { + name = scope + "[" + name + "]" + } + + if opts.Contains("omitempty") && isEmptyValue(sv) { + continue + } + + if sv.Type().Implements(encoderType) { + if !reflect.Indirect(sv).IsValid() { + sv = reflect.New(sv.Type().Elem()) + } + + m := sv.Interface().(Encoder) + if err := m.EncodeValues(name, &values); err != nil { + return err + } + continue + } + + if sv.Kind() == reflect.Slice || sv.Kind() == reflect.Array { + var del byte + if opts.Contains("comma") { + del = ',' + } else if opts.Contains("space") { + del = ' ' + } else if opts.Contains("semicolon") { + del = ';' + } else if opts.Contains("brackets") { + name = name + "[]" + } + + if del != 0 { + s := new(bytes.Buffer) + first := true + for i := 0; i < sv.Len(); i++ { + if first { + first = false + } else { + s.WriteByte(del) + } + s.WriteString(valueString(sv.Index(i), opts)) + } + values.Add(name, s.String()) + } else { + for i := 0; i < sv.Len(); i++ { + k := name + if opts.Contains("numbered") { + k = fmt.Sprintf("%s%d", name, i) + } + values.Add(k, valueString(sv.Index(i), opts)) + } + } + continue + } + + for sv.Kind() == reflect.Ptr { + if sv.IsNil() { + break + } + sv = sv.Elem() + } + + if sv.Type() == timeType { + values.Add(name, valueString(sv, opts)) + continue + } + + if sv.Kind() == reflect.Struct { + reflectValue(values, sv, name) + continue + } + + values.Add(name, valueString(sv, opts)) + } + + for _, f := range embedded { + if err := reflectValue(values, f, scope); err != nil { + return err + } + } + + return nil +} + +// valueString returns the string representation of a value. +func valueString(v reflect.Value, opts tagOptions) string { + for v.Kind() == reflect.Ptr { + if v.IsNil() { + return "" + } + v = v.Elem() + } + + if v.Kind() == reflect.Bool && opts.Contains("int") { + if v.Bool() { + return "1" + } + return "0" + } + + if v.Type() == timeType { + t := v.Interface().(time.Time) + if opts.Contains("unix") { + return strconv.FormatInt(t.Unix(), 10) + } + return t.Format(time.RFC3339) + } + + return fmt.Sprint(v.Interface()) +} + +// isEmptyValue checks if a value should be considered empty for the purposes +// of omitting fields with the "omitempty" option. +func isEmptyValue(v reflect.Value) bool { + switch v.Kind() { + case reflect.Array, reflect.Map, reflect.Slice, reflect.String: + return v.Len() == 0 + case reflect.Bool: + return !v.Bool() + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return v.Int() == 0 + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return v.Uint() == 0 + case reflect.Float32, reflect.Float64: + return v.Float() == 0 + case reflect.Interface, reflect.Ptr: + return v.IsNil() + } + + if v.Type() == timeType { + return v.Interface().(time.Time).IsZero() + } + + return false +} + +// tagOptions is the string following a comma in a struct field's "url" tag, or +// the empty string. It does not include the leading comma. +type tagOptions []string + +// parseTag splits a struct field's url tag into its name and comma-separated +// options. +func parseTag(tag string) (string, tagOptions) { + s := strings.Split(tag, ",") + return s[0], s[1:] +} + +// Contains checks whether the tagOptions contains the specified option. +func (o tagOptions) Contains(option string) bool { + for _, s := range o { + if s == option { + return true + } + } + return false +} diff --git a/vendor/github.com/jessevdk/go-flags/.travis.yml b/vendor/github.com/jessevdk/go-flags/.travis.yml new file mode 100644 index 00000000..0f0728d2 --- /dev/null +++ b/vendor/github.com/jessevdk/go-flags/.travis.yml @@ -0,0 +1,44 @@ +language: go + +os: + - linux + - osx + +go: + - 1.x + - 1.7.x + - 1.8.x + - 1.9.x + - 1.10.x + +install: + # go-flags + - go get -d -v ./... + - go build -v ./... + + # linting + - go get github.com/golang/lint/golint + + # code coverage + - go get golang.org/x/tools/cmd/cover + - go get github.com/onsi/ginkgo/ginkgo + - go get github.com/modocache/gover + - if [ "$TRAVIS_SECURE_ENV_VARS" = "true" ]; then go get github.com/mattn/goveralls; fi + +script: + # go-flags + - $(exit $(gofmt -l . | wc -l)) + - go test -v ./... + + # linting + - go tool vet -all=true -v=true . || true + - $(go env GOPATH | awk 'BEGIN{FS=":"} {print $1}')/bin/golint ./... + + # code coverage + - $(go env GOPATH | awk 'BEGIN{FS=":"} {print $1}')/bin/ginkgo -r -cover + - $(go env GOPATH | awk 'BEGIN{FS=":"} {print $1}')/bin/gover + - if [ "$TRAVIS_SECURE_ENV_VARS" = "true" ]; then $(go env GOPATH | awk 'BEGIN{FS=":"} {print $1}')/bin/goveralls -coverprofile=gover.coverprofile -service=travis-ci -repotoken $COVERALLS_TOKEN; fi + +env: + # coveralls.io + secure: "RCYbiB4P0RjQRIoUx/vG/AjP3mmYCbzOmr86DCww1Z88yNcy3hYr3Cq8rpPtYU5v0g7wTpu4adaKIcqRE9xknYGbqj3YWZiCoBP1/n4Z+9sHW3Dsd9D/GRGeHUus0laJUGARjWoCTvoEtOgTdGQDoX7mH+pUUY0FBltNYUdOiiU=" diff --git a/vendor/github.com/jessevdk/go-flags/LICENSE b/vendor/github.com/jessevdk/go-flags/LICENSE new file mode 100644 index 00000000..bcca0d52 --- /dev/null +++ b/vendor/github.com/jessevdk/go-flags/LICENSE @@ -0,0 +1,26 @@ +Copyright (c) 2012 Jesse van den Kieboom. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/jessevdk/go-flags/README.md b/vendor/github.com/jessevdk/go-flags/README.md new file mode 100644 index 00000000..3b02394e --- /dev/null +++ b/vendor/github.com/jessevdk/go-flags/README.md @@ -0,0 +1,134 @@ +go-flags: a go library for parsing command line arguments +========================================================= + +[![GoDoc](https://godoc.org/github.com/jessevdk/go-flags?status.png)](https://godoc.org/github.com/jessevdk/go-flags) [![Build Status](https://travis-ci.org/jessevdk/go-flags.svg?branch=master)](https://travis-ci.org/jessevdk/go-flags) [![Coverage Status](https://img.shields.io/coveralls/jessevdk/go-flags.svg)](https://coveralls.io/r/jessevdk/go-flags?branch=master) + +This library provides similar functionality to the builtin flag library of +go, but provides much more functionality and nicer formatting. From the +documentation: + +Package flags provides an extensive command line option parser. +The flags package is similar in functionality to the go builtin flag package +but provides more options and uses reflection to provide a convenient and +succinct way of specifying command line options. + +Supported features: +* Options with short names (-v) +* Options with long names (--verbose) +* Options with and without arguments (bool v.s. other type) +* Options with optional arguments and default values +* Multiple option groups each containing a set of options +* Generate and print well-formatted help message +* Passing remaining command line arguments after -- (optional) +* Ignoring unknown command line options (optional) +* Supports -I/usr/include -I=/usr/include -I /usr/include option argument specification +* Supports multiple short options -aux +* Supports all primitive go types (string, int{8..64}, uint{8..64}, float) +* Supports same option multiple times (can store in slice or last option counts) +* Supports maps +* Supports function callbacks +* Supports namespaces for (nested) option groups + +The flags package uses structs, reflection and struct field tags +to allow users to specify command line options. This results in very simple +and concise specification of your application options. For example: + +```go +type Options struct { + Verbose []bool `short:"v" long:"verbose" description:"Show verbose debug information"` +} +``` + +This specifies one option with a short name -v and a long name --verbose. +When either -v or --verbose is found on the command line, a 'true' value +will be appended to the Verbose field. e.g. when specifying -vvv, the +resulting value of Verbose will be {[true, true, true]}. + +Example: +-------- +```go +var opts struct { + // Slice of bool will append 'true' each time the option + // is encountered (can be set multiple times, like -vvv) + Verbose []bool `short:"v" long:"verbose" description:"Show verbose debug information"` + + // Example of automatic marshalling to desired type (uint) + Offset uint `long:"offset" description:"Offset"` + + // Example of a callback, called each time the option is found. + Call func(string) `short:"c" description:"Call phone number"` + + // Example of a required flag + Name string `short:"n" long:"name" description:"A name" required:"true"` + + // Example of a value name + File string `short:"f" long:"file" description:"A file" value-name:"FILE"` + + // Example of a pointer + Ptr *int `short:"p" description:"A pointer to an integer"` + + // Example of a slice of strings + StringSlice []string `short:"s" description:"A slice of strings"` + + // Example of a slice of pointers + PtrSlice []*string `long:"ptrslice" description:"A slice of pointers to string"` + + // Example of a map + IntMap map[string]int `long:"intmap" description:"A map from string to int"` +} + +// Callback which will invoke callto: to call a number. +// Note that this works just on OS X (and probably only with +// Skype) but it shows the idea. +opts.Call = func(num string) { + cmd := exec.Command("open", "callto:"+num) + cmd.Start() + cmd.Process.Release() +} + +// Make some fake arguments to parse. +args := []string{ + "-vv", + "--offset=5", + "-n", "Me", + "-p", "3", + "-s", "hello", + "-s", "world", + "--ptrslice", "hello", + "--ptrslice", "world", + "--intmap", "a:1", + "--intmap", "b:5", + "arg1", + "arg2", + "arg3", +} + +// Parse flags from `args'. Note that here we use flags.ParseArgs for +// the sake of making a working example. Normally, you would simply use +// flags.Parse(&opts) which uses os.Args +args, err := flags.ParseArgs(&opts, args) + +if err != nil { + panic(err) +} + +fmt.Printf("Verbosity: %v\n", opts.Verbose) +fmt.Printf("Offset: %d\n", opts.Offset) +fmt.Printf("Name: %s\n", opts.Name) +fmt.Printf("Ptr: %d\n", *opts.Ptr) +fmt.Printf("StringSlice: %v\n", opts.StringSlice) +fmt.Printf("PtrSlice: [%v %v]\n", *opts.PtrSlice[0], *opts.PtrSlice[1]) +fmt.Printf("IntMap: [a:%v b:%v]\n", opts.IntMap["a"], opts.IntMap["b"]) +fmt.Printf("Remaining args: %s\n", strings.Join(args, " ")) + +// Output: Verbosity: [true true] +// Offset: 5 +// Name: Me +// Ptr: 3 +// StringSlice: [hello world] +// PtrSlice: [hello world] +// IntMap: [a:1 b:5] +// Remaining args: arg1 arg2 arg3 +``` + +More information can be found in the godocs: diff --git a/vendor/github.com/jessevdk/go-flags/arg.go b/vendor/github.com/jessevdk/go-flags/arg.go new file mode 100644 index 00000000..8ec62048 --- /dev/null +++ b/vendor/github.com/jessevdk/go-flags/arg.go @@ -0,0 +1,27 @@ +package flags + +import ( + "reflect" +) + +// Arg represents a positional argument on the command line. +type Arg struct { + // The name of the positional argument (used in the help) + Name string + + // A description of the positional argument (used in the help) + Description string + + // The minimal number of required positional arguments + Required int + + // The maximum number of required positional arguments + RequiredMaximum int + + value reflect.Value + tag multiTag +} + +func (a *Arg) isRemaining() bool { + return a.value.Type().Kind() == reflect.Slice +} diff --git a/vendor/github.com/jessevdk/go-flags/check_crosscompile.sh b/vendor/github.com/jessevdk/go-flags/check_crosscompile.sh new file mode 100755 index 00000000..c494f611 --- /dev/null +++ b/vendor/github.com/jessevdk/go-flags/check_crosscompile.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +set -e + +echo '# linux arm7' +GOARM=7 GOARCH=arm GOOS=linux go build +echo '# linux arm5' +GOARM=5 GOARCH=arm GOOS=linux go build +echo '# windows 386' +GOARCH=386 GOOS=windows go build +echo '# windows amd64' +GOARCH=amd64 GOOS=windows go build +echo '# darwin' +GOARCH=amd64 GOOS=darwin go build +echo '# freebsd' +GOARCH=amd64 GOOS=freebsd go build diff --git a/vendor/github.com/jessevdk/go-flags/closest.go b/vendor/github.com/jessevdk/go-flags/closest.go new file mode 100644 index 00000000..3b518757 --- /dev/null +++ b/vendor/github.com/jessevdk/go-flags/closest.go @@ -0,0 +1,59 @@ +package flags + +func levenshtein(s string, t string) int { + if len(s) == 0 { + return len(t) + } + + if len(t) == 0 { + return len(s) + } + + dists := make([][]int, len(s)+1) + for i := range dists { + dists[i] = make([]int, len(t)+1) + dists[i][0] = i + } + + for j := range t { + dists[0][j] = j + } + + for i, sc := range s { + for j, tc := range t { + if sc == tc { + dists[i+1][j+1] = dists[i][j] + } else { + dists[i+1][j+1] = dists[i][j] + 1 + if dists[i+1][j] < dists[i+1][j+1] { + dists[i+1][j+1] = dists[i+1][j] + 1 + } + if dists[i][j+1] < dists[i+1][j+1] { + dists[i+1][j+1] = dists[i][j+1] + 1 + } + } + } + } + + return dists[len(s)][len(t)] +} + +func closestChoice(cmd string, choices []string) (string, int) { + if len(choices) == 0 { + return "", 0 + } + + mincmd := -1 + mindist := -1 + + for i, c := range choices { + l := levenshtein(cmd, c) + + if mincmd < 0 || l < mindist { + mindist = l + mincmd = i + } + } + + return choices[mincmd], mindist +} diff --git a/vendor/github.com/jessevdk/go-flags/command.go b/vendor/github.com/jessevdk/go-flags/command.go new file mode 100644 index 00000000..486bacba --- /dev/null +++ b/vendor/github.com/jessevdk/go-flags/command.go @@ -0,0 +1,465 @@ +package flags + +import ( + "reflect" + "sort" + "strconv" + "strings" +) + +// Command represents an application command. Commands can be added to the +// parser (which itself is a command) and are selected/executed when its name +// is specified on the command line. The Command type embeds a Group and +// therefore also carries a set of command specific options. +type Command struct { + // Embedded, see Group for more information + *Group + + // The name by which the command can be invoked + Name string + + // The active sub command (set by parsing) or nil + Active *Command + + // Whether subcommands are optional + SubcommandsOptional bool + + // Aliases for the command + Aliases []string + + // Whether positional arguments are required + ArgsRequired bool + + commands []*Command + hasBuiltinHelpGroup bool + args []*Arg +} + +// Commander is an interface which can be implemented by any command added in +// the options. When implemented, the Execute method will be called for the last +// specified (sub)command providing the remaining command line arguments. +type Commander interface { + // Execute will be called for the last active (sub)command. The + // args argument contains the remaining command line arguments. The + // error that Execute returns will be eventually passed out of the + // Parse method of the Parser. + Execute(args []string) error +} + +// Usage is an interface which can be implemented to show a custom usage string +// in the help message shown for a command. +type Usage interface { + // Usage is called for commands to allow customized printing of command + // usage in the generated help message. + Usage() string +} + +type lookup struct { + shortNames map[string]*Option + longNames map[string]*Option + + commands map[string]*Command +} + +// AddCommand adds a new command to the parser with the given name and data. The +// data needs to be a pointer to a struct from which the fields indicate which +// options are in the command. The provided data can implement the Command and +// Usage interfaces. +func (c *Command) AddCommand(command string, shortDescription string, longDescription string, data interface{}) (*Command, error) { + cmd := newCommand(command, shortDescription, longDescription, data) + + cmd.parent = c + + if err := cmd.scan(); err != nil { + return nil, err + } + + c.commands = append(c.commands, cmd) + return cmd, nil +} + +// AddGroup adds a new group to the command with the given name and data. The +// data needs to be a pointer to a struct from which the fields indicate which +// options are in the group. +func (c *Command) AddGroup(shortDescription string, longDescription string, data interface{}) (*Group, error) { + group := newGroup(shortDescription, longDescription, data) + + group.parent = c + + if err := group.scanType(c.scanSubcommandHandler(group)); err != nil { + return nil, err + } + + c.groups = append(c.groups, group) + return group, nil +} + +// Commands returns a list of subcommands of this command. +func (c *Command) Commands() []*Command { + return c.commands +} + +// Find locates the subcommand with the given name and returns it. If no such +// command can be found Find will return nil. +func (c *Command) Find(name string) *Command { + for _, cc := range c.commands { + if cc.match(name) { + return cc + } + } + + return nil +} + +// FindOptionByLongName finds an option that is part of the command, or any of +// its parent commands, by matching its long name (including the option +// namespace). +func (c *Command) FindOptionByLongName(longName string) (option *Option) { + for option == nil && c != nil { + option = c.Group.FindOptionByLongName(longName) + + c, _ = c.parent.(*Command) + } + + return option +} + +// FindOptionByShortName finds an option that is part of the command, or any of +// its parent commands, by matching its long name (including the option +// namespace). +func (c *Command) FindOptionByShortName(shortName rune) (option *Option) { + for option == nil && c != nil { + option = c.Group.FindOptionByShortName(shortName) + + c, _ = c.parent.(*Command) + } + + return option +} + +// Args returns a list of positional arguments associated with this command. +func (c *Command) Args() []*Arg { + ret := make([]*Arg, len(c.args)) + copy(ret, c.args) + + return ret +} + +func newCommand(name string, shortDescription string, longDescription string, data interface{}) *Command { + return &Command{ + Group: newGroup(shortDescription, longDescription, data), + Name: name, + } +} + +func (c *Command) scanSubcommandHandler(parentg *Group) scanHandler { + f := func(realval reflect.Value, sfield *reflect.StructField) (bool, error) { + mtag := newMultiTag(string(sfield.Tag)) + + if err := mtag.Parse(); err != nil { + return true, err + } + + positional := mtag.Get("positional-args") + + if len(positional) != 0 { + stype := realval.Type() + + for i := 0; i < stype.NumField(); i++ { + field := stype.Field(i) + + m := newMultiTag((string(field.Tag))) + + if err := m.Parse(); err != nil { + return true, err + } + + name := m.Get("positional-arg-name") + + if len(name) == 0 { + name = field.Name + } + + required := -1 + requiredMaximum := -1 + + sreq := m.Get("required") + + if sreq != "" { + required = 1 + + rng := strings.SplitN(sreq, "-", 2) + + if len(rng) > 1 { + if preq, err := strconv.ParseInt(rng[0], 10, 32); err == nil { + required = int(preq) + } + + if preq, err := strconv.ParseInt(rng[1], 10, 32); err == nil { + requiredMaximum = int(preq) + } + } else { + if preq, err := strconv.ParseInt(sreq, 10, 32); err == nil { + required = int(preq) + } + } + } + + arg := &Arg{ + Name: name, + Description: m.Get("description"), + Required: required, + RequiredMaximum: requiredMaximum, + + value: realval.Field(i), + tag: m, + } + + c.args = append(c.args, arg) + + if len(mtag.Get("required")) != 0 { + c.ArgsRequired = true + } + } + + return true, nil + } + + subcommand := mtag.Get("command") + + if len(subcommand) != 0 { + var ptrval reflect.Value + + if realval.Kind() == reflect.Ptr { + ptrval = realval + + if ptrval.IsNil() { + ptrval.Set(reflect.New(ptrval.Type().Elem())) + } + } else { + ptrval = realval.Addr() + } + + shortDescription := mtag.Get("description") + longDescription := mtag.Get("long-description") + subcommandsOptional := mtag.Get("subcommands-optional") + aliases := mtag.GetMany("alias") + + subc, err := c.AddCommand(subcommand, shortDescription, longDescription, ptrval.Interface()) + + if err != nil { + return true, err + } + + subc.Hidden = mtag.Get("hidden") != "" + + if len(subcommandsOptional) > 0 { + subc.SubcommandsOptional = true + } + + if len(aliases) > 0 { + subc.Aliases = aliases + } + + return true, nil + } + + return parentg.scanSubGroupHandler(realval, sfield) + } + + return f +} + +func (c *Command) scan() error { + return c.scanType(c.scanSubcommandHandler(c.Group)) +} + +func (c *Command) eachOption(f func(*Command, *Group, *Option)) { + c.eachCommand(func(c *Command) { + c.eachGroup(func(g *Group) { + for _, option := range g.options { + f(c, g, option) + } + }) + }, true) +} + +func (c *Command) eachCommand(f func(*Command), recurse bool) { + f(c) + + for _, cc := range c.commands { + if recurse { + cc.eachCommand(f, true) + } else { + f(cc) + } + } +} + +func (c *Command) eachActiveGroup(f func(cc *Command, g *Group)) { + c.eachGroup(func(g *Group) { + f(c, g) + }) + + if c.Active != nil { + c.Active.eachActiveGroup(f) + } +} + +func (c *Command) addHelpGroups(showHelp func() error) { + if !c.hasBuiltinHelpGroup { + c.addHelpGroup(showHelp) + c.hasBuiltinHelpGroup = true + } + + for _, cc := range c.commands { + cc.addHelpGroups(showHelp) + } +} + +func (c *Command) makeLookup() lookup { + ret := lookup{ + shortNames: make(map[string]*Option), + longNames: make(map[string]*Option), + commands: make(map[string]*Command), + } + + parent := c.parent + + var parents []*Command + + for parent != nil { + if cmd, ok := parent.(*Command); ok { + parents = append(parents, cmd) + parent = cmd.parent + } else { + parent = nil + } + } + + for i := len(parents) - 1; i >= 0; i-- { + parents[i].fillLookup(&ret, true) + } + + c.fillLookup(&ret, false) + return ret +} + +func (c *Command) fillLookup(ret *lookup, onlyOptions bool) { + c.eachGroup(func(g *Group) { + for _, option := range g.options { + if option.ShortName != 0 { + ret.shortNames[string(option.ShortName)] = option + } + + if len(option.LongName) > 0 { + ret.longNames[option.LongNameWithNamespace()] = option + } + } + }) + + if onlyOptions { + return + } + + for _, subcommand := range c.commands { + ret.commands[subcommand.Name] = subcommand + + for _, a := range subcommand.Aliases { + ret.commands[a] = subcommand + } + } +} + +func (c *Command) groupByName(name string) *Group { + if grp := c.Group.groupByName(name); grp != nil { + return grp + } + + for _, subc := range c.commands { + prefix := subc.Name + "." + + if strings.HasPrefix(name, prefix) { + if grp := subc.groupByName(name[len(prefix):]); grp != nil { + return grp + } + } else if name == subc.Name { + return subc.Group + } + } + + return nil +} + +type commandList []*Command + +func (c commandList) Less(i, j int) bool { + return c[i].Name < c[j].Name +} + +func (c commandList) Len() int { + return len(c) +} + +func (c commandList) Swap(i, j int) { + c[i], c[j] = c[j], c[i] +} + +func (c *Command) sortedVisibleCommands() []*Command { + ret := commandList(c.visibleCommands()) + sort.Sort(ret) + + return []*Command(ret) +} + +func (c *Command) visibleCommands() []*Command { + ret := make([]*Command, 0, len(c.commands)) + + for _, cmd := range c.commands { + if !cmd.Hidden { + ret = append(ret, cmd) + } + } + + return ret +} + +func (c *Command) match(name string) bool { + if c.Name == name { + return true + } + + for _, v := range c.Aliases { + if v == name { + return true + } + } + + return false +} + +func (c *Command) hasCliOptions() bool { + ret := false + + c.eachGroup(func(g *Group) { + if g.isBuiltinHelp { + return + } + + for _, opt := range g.options { + if opt.canCli() { + ret = true + } + } + }) + + return ret +} + +func (c *Command) fillParseState(s *parseState) { + s.positional = make([]*Arg, len(c.args)) + copy(s.positional, c.args) + + s.lookup = c.makeLookup() + s.command = c +} diff --git a/vendor/github.com/jessevdk/go-flags/completion.go b/vendor/github.com/jessevdk/go-flags/completion.go new file mode 100644 index 00000000..7a7a08b9 --- /dev/null +++ b/vendor/github.com/jessevdk/go-flags/completion.go @@ -0,0 +1,309 @@ +package flags + +import ( + "fmt" + "path/filepath" + "reflect" + "sort" + "strings" + "unicode/utf8" +) + +// Completion is a type containing information of a completion. +type Completion struct { + // The completed item + Item string + + // A description of the completed item (optional) + Description string +} + +type completions []Completion + +func (c completions) Len() int { + return len(c) +} + +func (c completions) Less(i, j int) bool { + return c[i].Item < c[j].Item +} + +func (c completions) Swap(i, j int) { + c[i], c[j] = c[j], c[i] +} + +// Completer is an interface which can be implemented by types +// to provide custom command line argument completion. +type Completer interface { + // Complete receives a prefix representing a (partial) value + // for its type and should provide a list of possible valid + // completions. + Complete(match string) []Completion +} + +type completion struct { + parser *Parser +} + +// Filename is a string alias which provides filename completion. +type Filename string + +func completionsWithoutDescriptions(items []string) []Completion { + ret := make([]Completion, len(items)) + + for i, v := range items { + ret[i].Item = v + } + + return ret +} + +// Complete returns a list of existing files with the given +// prefix. +func (f *Filename) Complete(match string) []Completion { + ret, _ := filepath.Glob(match + "*") + return completionsWithoutDescriptions(ret) +} + +func (c *completion) skipPositional(s *parseState, n int) { + if n >= len(s.positional) { + s.positional = nil + } else { + s.positional = s.positional[n:] + } +} + +func (c *completion) completeOptionNames(s *parseState, prefix string, match string, short bool) []Completion { + if short && len(match) != 0 { + return []Completion{ + Completion{ + Item: prefix + match, + }, + } + } + + var results []Completion + repeats := map[string]bool{} + + for name, opt := range s.lookup.longNames { + if strings.HasPrefix(name, match) && !opt.Hidden { + results = append(results, Completion{ + Item: defaultLongOptDelimiter + name, + Description: opt.Description, + }) + + if short { + repeats[string(opt.ShortName)] = true + } + } + } + + if short { + for name, opt := range s.lookup.shortNames { + if _, exist := repeats[name]; !exist && strings.HasPrefix(name, match) && !opt.Hidden { + results = append(results, Completion{ + Item: string(defaultShortOptDelimiter) + name, + Description: opt.Description, + }) + } + } + } + + return results +} + +func (c *completion) completeNamesForLongPrefix(s *parseState, prefix string, match string) []Completion { + return c.completeOptionNames(s, prefix, match, false) +} + +func (c *completion) completeNamesForShortPrefix(s *parseState, prefix string, match string) []Completion { + return c.completeOptionNames(s, prefix, match, true) +} + +func (c *completion) completeCommands(s *parseState, match string) []Completion { + n := make([]Completion, 0, len(s.command.commands)) + + for _, cmd := range s.command.commands { + if cmd.data != c && strings.HasPrefix(cmd.Name, match) { + n = append(n, Completion{ + Item: cmd.Name, + Description: cmd.ShortDescription, + }) + } + } + + return n +} + +func (c *completion) completeValue(value reflect.Value, prefix string, match string) []Completion { + if value.Kind() == reflect.Slice { + value = reflect.New(value.Type().Elem()) + } + i := value.Interface() + + var ret []Completion + + if cmp, ok := i.(Completer); ok { + ret = cmp.Complete(match) + } else if value.CanAddr() { + if cmp, ok = value.Addr().Interface().(Completer); ok { + ret = cmp.Complete(match) + } + } + + for i, v := range ret { + ret[i].Item = prefix + v.Item + } + + return ret +} + +func (c *completion) complete(args []string) []Completion { + if len(args) == 0 { + args = []string{""} + } + + s := &parseState{ + args: args, + } + + c.parser.fillParseState(s) + + var opt *Option + + for len(s.args) > 1 { + arg := s.pop() + + if (c.parser.Options&PassDoubleDash) != None && arg == "--" { + opt = nil + c.skipPositional(s, len(s.args)-1) + + break + } + + if argumentIsOption(arg) { + prefix, optname, islong := stripOptionPrefix(arg) + optname, _, argument := splitOption(prefix, optname, islong) + + if argument == nil { + var o *Option + canarg := true + + if islong { + o = s.lookup.longNames[optname] + } else { + for i, r := range optname { + sname := string(r) + o = s.lookup.shortNames[sname] + + if o == nil { + break + } + + if i == 0 && o.canArgument() && len(optname) != len(sname) { + canarg = false + break + } + } + } + + if o == nil && (c.parser.Options&PassAfterNonOption) != None { + opt = nil + c.skipPositional(s, len(s.args)-1) + + break + } else if o != nil && o.canArgument() && !o.OptionalArgument && canarg { + if len(s.args) > 1 { + s.pop() + } else { + opt = o + } + } + } + } else { + if len(s.positional) > 0 { + if !s.positional[0].isRemaining() { + // Don't advance beyond a remaining positional arg (because + // it consumes all subsequent args). + s.positional = s.positional[1:] + } + } else if cmd, ok := s.lookup.commands[arg]; ok { + cmd.fillParseState(s) + } + + opt = nil + } + } + + lastarg := s.args[len(s.args)-1] + var ret []Completion + + if opt != nil { + // Completion for the argument of 'opt' + ret = c.completeValue(opt.value, "", lastarg) + } else if argumentStartsOption(lastarg) { + // Complete the option + prefix, optname, islong := stripOptionPrefix(lastarg) + optname, split, argument := splitOption(prefix, optname, islong) + + if argument == nil && !islong { + rname, n := utf8.DecodeRuneInString(optname) + sname := string(rname) + + if opt := s.lookup.shortNames[sname]; opt != nil && opt.canArgument() { + ret = c.completeValue(opt.value, prefix+sname, optname[n:]) + } else { + ret = c.completeNamesForShortPrefix(s, prefix, optname) + } + } else if argument != nil { + if islong { + opt = s.lookup.longNames[optname] + } else { + opt = s.lookup.shortNames[optname] + } + + if opt != nil { + ret = c.completeValue(opt.value, prefix+optname+split, *argument) + } + } else if islong { + ret = c.completeNamesForLongPrefix(s, prefix, optname) + } else { + ret = c.completeNamesForShortPrefix(s, prefix, optname) + } + } else if len(s.positional) > 0 { + // Complete for positional argument + ret = c.completeValue(s.positional[0].value, "", lastarg) + } else if len(s.command.commands) > 0 { + // Complete for command + ret = c.completeCommands(s, lastarg) + } + + sort.Sort(completions(ret)) + return ret +} + +func (c *completion) print(items []Completion, showDescriptions bool) { + if showDescriptions && len(items) > 1 { + maxl := 0 + + for _, v := range items { + if len(v.Item) > maxl { + maxl = len(v.Item) + } + } + + for _, v := range items { + fmt.Printf("%s", v.Item) + + if len(v.Description) > 0 { + fmt.Printf("%s # %s", strings.Repeat(" ", maxl-len(v.Item)), v.Description) + } + + fmt.Printf("\n") + } + } else { + for _, v := range items { + fmt.Println(v.Item) + } + } +} diff --git a/vendor/github.com/jessevdk/go-flags/convert.go b/vendor/github.com/jessevdk/go-flags/convert.go new file mode 100644 index 00000000..984aac89 --- /dev/null +++ b/vendor/github.com/jessevdk/go-flags/convert.go @@ -0,0 +1,348 @@ +// Copyright 2012 Jesse van den Kieboom. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package flags + +import ( + "fmt" + "reflect" + "strconv" + "strings" + "time" +) + +// Marshaler is the interface implemented by types that can marshal themselves +// to a string representation of the flag. +type Marshaler interface { + // MarshalFlag marshals a flag value to its string representation. + MarshalFlag() (string, error) +} + +// Unmarshaler is the interface implemented by types that can unmarshal a flag +// argument to themselves. The provided value is directly passed from the +// command line. +type Unmarshaler interface { + // UnmarshalFlag unmarshals a string value representation to the flag + // value (which therefore needs to be a pointer receiver). + UnmarshalFlag(value string) error +} + +func getBase(options multiTag, base int) (int, error) { + sbase := options.Get("base") + + var err error + var ivbase int64 + + if sbase != "" { + ivbase, err = strconv.ParseInt(sbase, 10, 32) + base = int(ivbase) + } + + return base, err +} + +func convertMarshal(val reflect.Value) (bool, string, error) { + // Check first for the Marshaler interface + if val.Type().NumMethod() > 0 && val.CanInterface() { + if marshaler, ok := val.Interface().(Marshaler); ok { + ret, err := marshaler.MarshalFlag() + return true, ret, err + } + } + + return false, "", nil +} + +func convertToString(val reflect.Value, options multiTag) (string, error) { + if ok, ret, err := convertMarshal(val); ok { + return ret, err + } + + tp := val.Type() + + // Support for time.Duration + if tp == reflect.TypeOf((*time.Duration)(nil)).Elem() { + stringer := val.Interface().(fmt.Stringer) + return stringer.String(), nil + } + + switch tp.Kind() { + case reflect.String: + return val.String(), nil + case reflect.Bool: + if val.Bool() { + return "true", nil + } + + return "false", nil + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + base, err := getBase(options, 10) + + if err != nil { + return "", err + } + + return strconv.FormatInt(val.Int(), base), nil + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + base, err := getBase(options, 10) + + if err != nil { + return "", err + } + + return strconv.FormatUint(val.Uint(), base), nil + case reflect.Float32, reflect.Float64: + return strconv.FormatFloat(val.Float(), 'g', -1, tp.Bits()), nil + case reflect.Slice: + if val.Len() == 0 { + return "", nil + } + + ret := "[" + + for i := 0; i < val.Len(); i++ { + if i != 0 { + ret += ", " + } + + item, err := convertToString(val.Index(i), options) + + if err != nil { + return "", err + } + + ret += item + } + + return ret + "]", nil + case reflect.Map: + ret := "{" + + for i, key := range val.MapKeys() { + if i != 0 { + ret += ", " + } + + keyitem, err := convertToString(key, options) + + if err != nil { + return "", err + } + + item, err := convertToString(val.MapIndex(key), options) + + if err != nil { + return "", err + } + + ret += keyitem + ":" + item + } + + return ret + "}", nil + case reflect.Ptr: + return convertToString(reflect.Indirect(val), options) + case reflect.Interface: + if !val.IsNil() { + return convertToString(val.Elem(), options) + } + } + + return "", nil +} + +func convertUnmarshal(val string, retval reflect.Value) (bool, error) { + if retval.Type().NumMethod() > 0 && retval.CanInterface() { + if unmarshaler, ok := retval.Interface().(Unmarshaler); ok { + if retval.IsNil() { + retval.Set(reflect.New(retval.Type().Elem())) + + // Re-assign from the new value + unmarshaler = retval.Interface().(Unmarshaler) + } + + return true, unmarshaler.UnmarshalFlag(val) + } + } + + if retval.Type().Kind() != reflect.Ptr && retval.CanAddr() { + return convertUnmarshal(val, retval.Addr()) + } + + if retval.Type().Kind() == reflect.Interface && !retval.IsNil() { + return convertUnmarshal(val, retval.Elem()) + } + + return false, nil +} + +func convert(val string, retval reflect.Value, options multiTag) error { + if ok, err := convertUnmarshal(val, retval); ok { + return err + } + + tp := retval.Type() + + // Support for time.Duration + if tp == reflect.TypeOf((*time.Duration)(nil)).Elem() { + parsed, err := time.ParseDuration(val) + + if err != nil { + return err + } + + retval.SetInt(int64(parsed)) + return nil + } + + switch tp.Kind() { + case reflect.String: + retval.SetString(val) + case reflect.Bool: + if val == "" { + retval.SetBool(true) + } else { + b, err := strconv.ParseBool(val) + + if err != nil { + return err + } + + retval.SetBool(b) + } + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + base, err := getBase(options, 10) + + if err != nil { + return err + } + + parsed, err := strconv.ParseInt(val, base, tp.Bits()) + + if err != nil { + return err + } + + retval.SetInt(parsed) + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + base, err := getBase(options, 10) + + if err != nil { + return err + } + + parsed, err := strconv.ParseUint(val, base, tp.Bits()) + + if err != nil { + return err + } + + retval.SetUint(parsed) + case reflect.Float32, reflect.Float64: + parsed, err := strconv.ParseFloat(val, tp.Bits()) + + if err != nil { + return err + } + + retval.SetFloat(parsed) + case reflect.Slice: + elemtp := tp.Elem() + + elemvalptr := reflect.New(elemtp) + elemval := reflect.Indirect(elemvalptr) + + if err := convert(val, elemval, options); err != nil { + return err + } + + retval.Set(reflect.Append(retval, elemval)) + case reflect.Map: + parts := strings.SplitN(val, ":", 2) + + key := parts[0] + var value string + + if len(parts) == 2 { + value = parts[1] + } + + keytp := tp.Key() + keyval := reflect.New(keytp) + + if err := convert(key, keyval, options); err != nil { + return err + } + + valuetp := tp.Elem() + valueval := reflect.New(valuetp) + + if err := convert(value, valueval, options); err != nil { + return err + } + + if retval.IsNil() { + retval.Set(reflect.MakeMap(tp)) + } + + retval.SetMapIndex(reflect.Indirect(keyval), reflect.Indirect(valueval)) + case reflect.Ptr: + if retval.IsNil() { + retval.Set(reflect.New(retval.Type().Elem())) + } + + return convert(val, reflect.Indirect(retval), options) + case reflect.Interface: + if !retval.IsNil() { + return convert(val, retval.Elem(), options) + } + } + + return nil +} + +func isPrint(s string) bool { + for _, c := range s { + if !strconv.IsPrint(c) { + return false + } + } + + return true +} + +func quoteIfNeeded(s string) string { + if !isPrint(s) { + return strconv.Quote(s) + } + + return s +} + +func quoteIfNeededV(s []string) []string { + ret := make([]string, len(s)) + + for i, v := range s { + ret[i] = quoteIfNeeded(v) + } + + return ret +} + +func quoteV(s []string) []string { + ret := make([]string, len(s)) + + for i, v := range s { + ret[i] = strconv.Quote(v) + } + + return ret +} + +func unquoteIfPossible(s string) (string, error) { + if len(s) == 0 || s[0] != '"' { + return s, nil + } + + return strconv.Unquote(s) +} diff --git a/vendor/github.com/jessevdk/go-flags/error.go b/vendor/github.com/jessevdk/go-flags/error.go new file mode 100644 index 00000000..05528d8d --- /dev/null +++ b/vendor/github.com/jessevdk/go-flags/error.go @@ -0,0 +1,134 @@ +package flags + +import ( + "fmt" +) + +// ErrorType represents the type of error. +type ErrorType uint + +const ( + // ErrUnknown indicates a generic error. + ErrUnknown ErrorType = iota + + // ErrExpectedArgument indicates that an argument was expected. + ErrExpectedArgument + + // ErrUnknownFlag indicates an unknown flag. + ErrUnknownFlag + + // ErrUnknownGroup indicates an unknown group. + ErrUnknownGroup + + // ErrMarshal indicates a marshalling error while converting values. + ErrMarshal + + // ErrHelp indicates that the built-in help was shown (the error + // contains the help message). + ErrHelp + + // ErrNoArgumentForBool indicates that an argument was given for a + // boolean flag (which don't not take any arguments). + ErrNoArgumentForBool + + // ErrRequired indicates that a required flag was not provided. + ErrRequired + + // ErrShortNameTooLong indicates that a short flag name was specified, + // longer than one character. + ErrShortNameTooLong + + // ErrDuplicatedFlag indicates that a short or long flag has been + // defined more than once + ErrDuplicatedFlag + + // ErrTag indicates an error while parsing flag tags. + ErrTag + + // ErrCommandRequired indicates that a command was required but not + // specified + ErrCommandRequired + + // ErrUnknownCommand indicates that an unknown command was specified. + ErrUnknownCommand + + // ErrInvalidChoice indicates an invalid option value which only allows + // a certain number of choices. + ErrInvalidChoice + + // ErrInvalidTag indicates an invalid tag or invalid use of an existing tag + ErrInvalidTag +) + +func (e ErrorType) String() string { + switch e { + case ErrUnknown: + return "unknown" + case ErrExpectedArgument: + return "expected argument" + case ErrUnknownFlag: + return "unknown flag" + case ErrUnknownGroup: + return "unknown group" + case ErrMarshal: + return "marshal" + case ErrHelp: + return "help" + case ErrNoArgumentForBool: + return "no argument for bool" + case ErrRequired: + return "required" + case ErrShortNameTooLong: + return "short name too long" + case ErrDuplicatedFlag: + return "duplicated flag" + case ErrTag: + return "tag" + case ErrCommandRequired: + return "command required" + case ErrUnknownCommand: + return "unknown command" + case ErrInvalidChoice: + return "invalid choice" + case ErrInvalidTag: + return "invalid tag" + } + + return "unrecognized error type" +} + +// Error represents a parser error. The error returned from Parse is of this +// type. The error contains both a Type and Message. +type Error struct { + // The type of error + Type ErrorType + + // The error message + Message string +} + +// Error returns the error's message +func (e *Error) Error() string { + return e.Message +} + +func newError(tp ErrorType, message string) *Error { + return &Error{ + Type: tp, + Message: message, + } +} + +func newErrorf(tp ErrorType, format string, args ...interface{}) *Error { + return newError(tp, fmt.Sprintf(format, args...)) +} + +func wrapError(err error) *Error { + ret, ok := err.(*Error) + + if !ok { + return newError(ErrUnknown, err.Error()) + } + + return ret +} diff --git a/vendor/github.com/jessevdk/go-flags/flags.go b/vendor/github.com/jessevdk/go-flags/flags.go new file mode 100644 index 00000000..889762d1 --- /dev/null +++ b/vendor/github.com/jessevdk/go-flags/flags.go @@ -0,0 +1,258 @@ +// Copyright 2012 Jesse van den Kieboom. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* +Package flags provides an extensive command line option parser. +The flags package is similar in functionality to the go built-in flag package +but provides more options and uses reflection to provide a convenient and +succinct way of specifying command line options. + + +Supported features + +The following features are supported in go-flags: + + Options with short names (-v) + Options with long names (--verbose) + Options with and without arguments (bool v.s. other type) + Options with optional arguments and default values + Option default values from ENVIRONMENT_VARIABLES, including slice and map values + Multiple option groups each containing a set of options + Generate and print well-formatted help message + Passing remaining command line arguments after -- (optional) + Ignoring unknown command line options (optional) + Supports -I/usr/include -I=/usr/include -I /usr/include option argument specification + Supports multiple short options -aux + Supports all primitive go types (string, int{8..64}, uint{8..64}, float) + Supports same option multiple times (can store in slice or last option counts) + Supports maps + Supports function callbacks + Supports namespaces for (nested) option groups + +Additional features specific to Windows: + Options with short names (/v) + Options with long names (/verbose) + Windows-style options with arguments use a colon as the delimiter + Modify generated help message with Windows-style / options + Windows style options can be disabled at build time using the "forceposix" + build tag + + +Basic usage + +The flags package uses structs, reflection and struct field tags +to allow users to specify command line options. This results in very simple +and concise specification of your application options. For example: + + type Options struct { + Verbose []bool `short:"v" long:"verbose" description:"Show verbose debug information"` + } + +This specifies one option with a short name -v and a long name --verbose. +When either -v or --verbose is found on the command line, a 'true' value +will be appended to the Verbose field. e.g. when specifying -vvv, the +resulting value of Verbose will be {[true, true, true]}. + +Slice options work exactly the same as primitive type options, except that +whenever the option is encountered, a value is appended to the slice. + +Map options from string to primitive type are also supported. On the command +line, you specify the value for such an option as key:value. For example + + type Options struct { + AuthorInfo string[string] `short:"a"` + } + +Then, the AuthorInfo map can be filled with something like +-a name:Jesse -a "surname:van den Kieboom". + +Finally, for full control over the conversion between command line argument +values and options, user defined types can choose to implement the Marshaler +and Unmarshaler interfaces. + + +Available field tags + +The following is a list of tags for struct fields supported by go-flags: + + short: the short name of the option (single character) + long: the long name of the option + required: if non empty, makes the option required to appear on the command + line. If a required option is not present, the parser will + return ErrRequired (optional) + description: the description of the option (optional) + long-description: the long description of the option. Currently only + displayed in generated man pages (optional) + no-flag: if non-empty, this field is ignored as an option (optional) + + optional: if non-empty, makes the argument of the option optional. When an + argument is optional it can only be specified using + --option=argument (optional) + optional-value: the value of an optional option when the option occurs + without an argument. This tag can be specified multiple + times in the case of maps or slices (optional) + default: the default value of an option. This tag can be specified + multiple times in the case of slices or maps (optional) + default-mask: when specified, this value will be displayed in the help + instead of the actual default value. This is useful + mostly for hiding otherwise sensitive information from + showing up in the help. If default-mask takes the special + value "-", then no default value will be shown at all + (optional) + env: the default value of the option is overridden from the + specified environment variable, if one has been defined. + (optional) + env-delim: the 'env' default value from environment is split into + multiple values with the given delimiter string, use with + slices and maps (optional) + value-name: the name of the argument value (to be shown in the help) + (optional) + choice: limits the values for an option to a set of values. + This tag can be specified multiple times (optional) + hidden: if non-empty, the option is not visible in the help or man page. + + base: a base (radix) used to convert strings to integer values, the + default base is 10 (i.e. decimal) (optional) + + ini-name: the explicit ini option name (optional) + no-ini: if non-empty this field is ignored as an ini option + (optional) + + group: when specified on a struct field, makes the struct + field a separate group with the given name (optional) + namespace: when specified on a group struct field, the namespace + gets prepended to every option's long name and + subgroup's namespace of this group, separated by + the parser's namespace delimiter (optional) + command: when specified on a struct field, makes the struct + field a (sub)command with the given name (optional) + subcommands-optional: when specified on a command struct field, makes + any subcommands of that command optional (optional) + alias: when specified on a command struct field, adds the + specified name as an alias for the command. Can be + be specified multiple times to add more than one + alias (optional) + positional-args: when specified on a field with a struct type, + uses the fields of that struct to parse remaining + positional command line arguments into (in order + of the fields). If a field has a slice type, + then all remaining arguments will be added to it. + Positional arguments are optional by default, + unless the "required" tag is specified together + with the "positional-args" tag. The "required" tag + can also be set on the individual rest argument + fields, to require only the first N positional + arguments. If the "required" tag is set on the + rest arguments slice, then its value determines + the minimum amount of rest arguments that needs to + be provided (e.g. `required:"2"`) (optional) + positional-arg-name: used on a field in a positional argument struct; name + of the positional argument placeholder to be shown in + the help (optional) + +Either the `short:` tag or the `long:` must be specified to make the field eligible as an +option. + + +Option groups + +Option groups are a simple way to semantically separate your options. All +options in a particular group are shown together in the help under the name +of the group. Namespaces can be used to specify option long names more +precisely and emphasize the options affiliation to their group. + +There are currently three ways to specify option groups. + + 1. Use NewNamedParser specifying the various option groups. + 2. Use AddGroup to add a group to an existing parser. + 3. Add a struct field to the top-level options annotated with the + group:"group-name" tag. + + + +Commands + +The flags package also has basic support for commands. Commands are often +used in monolithic applications that support various commands or actions. +Take git for example, all of the add, commit, checkout, etc. are called +commands. Using commands you can easily separate multiple functions of your +application. + +There are currently two ways to specify a command. + + 1. Use AddCommand on an existing parser. + 2. Add a struct field to your options struct annotated with the + command:"command-name" tag. + +The most common, idiomatic way to implement commands is to define a global +parser instance and implement each command in a separate file. These +command files should define a go init function which calls AddCommand on +the global parser. + +When parsing ends and there is an active command and that command implements +the Commander interface, then its Execute method will be run with the +remaining command line arguments. + +Command structs can have options which become valid to parse after the +command has been specified on the command line, in addition to the options +of all the parent commands. I.e. considering a -v flag on the parser and an +add command, the following are equivalent: + + ./app -v add + ./app add -v + +However, if the -v flag is defined on the add command, then the first of +the two examples above would fail since the -v flag is not defined before +the add command. + + +Completion + +go-flags has builtin support to provide bash completion of flags, commands +and argument values. To use completion, the binary which uses go-flags +can be invoked in a special environment to list completion of the current +command line argument. It should be noted that this `executes` your application, +and it is up to the user to make sure there are no negative side effects (for +example from init functions). + +Setting the environment variable `GO_FLAGS_COMPLETION=1` enables completion +by replacing the argument parsing routine with the completion routine which +outputs completions for the passed arguments. The basic invocation to +complete a set of arguments is therefore: + + GO_FLAGS_COMPLETION=1 ./completion-example arg1 arg2 arg3 + +where `completion-example` is the binary, `arg1` and `arg2` are +the current arguments, and `arg3` (the last argument) is the argument +to be completed. If the GO_FLAGS_COMPLETION is set to "verbose", then +descriptions of possible completion items will also be shown, if there +are more than 1 completion items. + +To use this with bash completion, a simple file can be written which +calls the binary which supports go-flags completion: + + _completion_example() { + # All arguments except the first one + args=("${COMP_WORDS[@]:1:$COMP_CWORD}") + + # Only split on newlines + local IFS=$'\n' + + # Call completion (note that the first element of COMP_WORDS is + # the executable itself) + COMPREPLY=($(GO_FLAGS_COMPLETION=1 ${COMP_WORDS[0]} "${args[@]}")) + return 0 + } + + complete -F _completion_example completion-example + +Completion requires the parser option PassDoubleDash and is therefore enforced if the environment variable GO_FLAGS_COMPLETION is set. + +Customized completion for argument values is supported by implementing +the flags.Completer interface for the argument value type. An example +of a type which does so is the flags.Filename type, an alias of string +allowing simple filename completion. A slice or array argument value +whose element type implements flags.Completer will also be completed. +*/ +package flags diff --git a/vendor/github.com/jessevdk/go-flags/group.go b/vendor/github.com/jessevdk/go-flags/group.go new file mode 100644 index 00000000..9e057abd --- /dev/null +++ b/vendor/github.com/jessevdk/go-flags/group.go @@ -0,0 +1,406 @@ +// Copyright 2012 Jesse van den Kieboom. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package flags + +import ( + "errors" + "reflect" + "strings" + "unicode/utf8" +) + +// ErrNotPointerToStruct indicates that a provided data container is not +// a pointer to a struct. Only pointers to structs are valid data containers +// for options. +var ErrNotPointerToStruct = errors.New("provided data is not a pointer to struct") + +// Group represents an option group. Option groups can be used to logically +// group options together under a description. Groups are only used to provide +// more structure to options both for the user (as displayed in the help message) +// and for you, since groups can be nested. +type Group struct { + // A short description of the group. The + // short description is primarily used in the built-in generated help + // message + ShortDescription string + + // A long description of the group. The long + // description is primarily used to present information on commands + // (Command embeds Group) in the built-in generated help and man pages. + LongDescription string + + // The namespace of the group + Namespace string + + // If true, the group is not displayed in the help or man page + Hidden bool + + // The parent of the group or nil if it has no parent + parent interface{} + + // All the options in the group + options []*Option + + // All the subgroups + groups []*Group + + // Whether the group represents the built-in help group + isBuiltinHelp bool + + data interface{} +} + +type scanHandler func(reflect.Value, *reflect.StructField) (bool, error) + +// AddGroup adds a new group to the command with the given name and data. The +// data needs to be a pointer to a struct from which the fields indicate which +// options are in the group. +func (g *Group) AddGroup(shortDescription string, longDescription string, data interface{}) (*Group, error) { + group := newGroup(shortDescription, longDescription, data) + + group.parent = g + + if err := group.scan(); err != nil { + return nil, err + } + + g.groups = append(g.groups, group) + return group, nil +} + +// Groups returns the list of groups embedded in this group. +func (g *Group) Groups() []*Group { + return g.groups +} + +// Options returns the list of options in this group. +func (g *Group) Options() []*Option { + return g.options +} + +// Find locates the subgroup with the given short description and returns it. +// If no such group can be found Find will return nil. Note that the description +// is matched case insensitively. +func (g *Group) Find(shortDescription string) *Group { + lshortDescription := strings.ToLower(shortDescription) + + var ret *Group + + g.eachGroup(func(gg *Group) { + if gg != g && strings.ToLower(gg.ShortDescription) == lshortDescription { + ret = gg + } + }) + + return ret +} + +func (g *Group) findOption(matcher func(*Option) bool) (option *Option) { + g.eachGroup(func(g *Group) { + for _, opt := range g.options { + if option == nil && matcher(opt) { + option = opt + } + } + }) + + return option +} + +// FindOptionByLongName finds an option that is part of the group, or any of its +// subgroups, by matching its long name (including the option namespace). +func (g *Group) FindOptionByLongName(longName string) *Option { + return g.findOption(func(option *Option) bool { + return option.LongNameWithNamespace() == longName + }) +} + +// FindOptionByShortName finds an option that is part of the group, or any of +// its subgroups, by matching its short name. +func (g *Group) FindOptionByShortName(shortName rune) *Option { + return g.findOption(func(option *Option) bool { + return option.ShortName == shortName + }) +} + +func newGroup(shortDescription string, longDescription string, data interface{}) *Group { + return &Group{ + ShortDescription: shortDescription, + LongDescription: longDescription, + + data: data, + } +} + +func (g *Group) optionByName(name string, namematch func(*Option, string) bool) *Option { + prio := 0 + var retopt *Option + + g.eachGroup(func(g *Group) { + for _, opt := range g.options { + if namematch != nil && namematch(opt, name) && prio < 4 { + retopt = opt + prio = 4 + } + + if name == opt.field.Name && prio < 3 { + retopt = opt + prio = 3 + } + + if name == opt.LongNameWithNamespace() && prio < 2 { + retopt = opt + prio = 2 + } + + if opt.ShortName != 0 && name == string(opt.ShortName) && prio < 1 { + retopt = opt + prio = 1 + } + } + }) + + return retopt +} + +func (g *Group) eachGroup(f func(*Group)) { + f(g) + + for _, gg := range g.groups { + gg.eachGroup(f) + } +} + +func isStringFalsy(s string) bool { + return s == "" || s == "false" || s == "no" || s == "0" +} + +func (g *Group) scanStruct(realval reflect.Value, sfield *reflect.StructField, handler scanHandler) error { + stype := realval.Type() + + if sfield != nil { + if ok, err := handler(realval, sfield); err != nil { + return err + } else if ok { + return nil + } + } + + for i := 0; i < stype.NumField(); i++ { + field := stype.Field(i) + + // PkgName is set only for non-exported fields, which we ignore + if field.PkgPath != "" && !field.Anonymous { + continue + } + + mtag := newMultiTag(string(field.Tag)) + + if err := mtag.Parse(); err != nil { + return err + } + + // Skip fields with the no-flag tag + if mtag.Get("no-flag") != "" { + continue + } + + // Dive deep into structs or pointers to structs + kind := field.Type.Kind() + fld := realval.Field(i) + + if kind == reflect.Struct { + if err := g.scanStruct(fld, &field, handler); err != nil { + return err + } + } else if kind == reflect.Ptr && field.Type.Elem().Kind() == reflect.Struct { + flagCountBefore := len(g.options) + len(g.groups) + + if fld.IsNil() { + fld = reflect.New(fld.Type().Elem()) + } + + if err := g.scanStruct(reflect.Indirect(fld), &field, handler); err != nil { + return err + } + + if len(g.options)+len(g.groups) != flagCountBefore { + realval.Field(i).Set(fld) + } + } + + longname := mtag.Get("long") + shortname := mtag.Get("short") + + // Need at least either a short or long name + if longname == "" && shortname == "" && mtag.Get("ini-name") == "" { + continue + } + + short := rune(0) + rc := utf8.RuneCountInString(shortname) + + if rc > 1 { + return newErrorf(ErrShortNameTooLong, + "short names can only be 1 character long, not `%s'", + shortname) + + } else if rc == 1 { + short, _ = utf8.DecodeRuneInString(shortname) + } + + description := mtag.Get("description") + def := mtag.GetMany("default") + + optionalValue := mtag.GetMany("optional-value") + valueName := mtag.Get("value-name") + defaultMask := mtag.Get("default-mask") + + optional := !isStringFalsy(mtag.Get("optional")) + required := !isStringFalsy(mtag.Get("required")) + choices := mtag.GetMany("choice") + hidden := !isStringFalsy(mtag.Get("hidden")) + + option := &Option{ + Description: description, + ShortName: short, + LongName: longname, + Default: def, + EnvDefaultKey: mtag.Get("env"), + EnvDefaultDelim: mtag.Get("env-delim"), + OptionalArgument: optional, + OptionalValue: optionalValue, + Required: required, + ValueName: valueName, + DefaultMask: defaultMask, + Choices: choices, + Hidden: hidden, + + group: g, + + field: field, + value: realval.Field(i), + tag: mtag, + } + + if option.isBool() && option.Default != nil { + return newErrorf(ErrInvalidTag, + "boolean flag `%s' may not have default values, they always default to `false' and can only be turned on", + option.shortAndLongName()) + } + + g.options = append(g.options, option) + } + + return nil +} + +func (g *Group) checkForDuplicateFlags() *Error { + shortNames := make(map[rune]*Option) + longNames := make(map[string]*Option) + + var duplicateError *Error + + g.eachGroup(func(g *Group) { + for _, option := range g.options { + if option.LongName != "" { + longName := option.LongNameWithNamespace() + + if otherOption, ok := longNames[longName]; ok { + duplicateError = newErrorf(ErrDuplicatedFlag, "option `%s' uses the same long name as option `%s'", option, otherOption) + return + } + longNames[longName] = option + } + if option.ShortName != 0 { + if otherOption, ok := shortNames[option.ShortName]; ok { + duplicateError = newErrorf(ErrDuplicatedFlag, "option `%s' uses the same short name as option `%s'", option, otherOption) + return + } + shortNames[option.ShortName] = option + } + } + }) + + return duplicateError +} + +func (g *Group) scanSubGroupHandler(realval reflect.Value, sfield *reflect.StructField) (bool, error) { + mtag := newMultiTag(string(sfield.Tag)) + + if err := mtag.Parse(); err != nil { + return true, err + } + + subgroup := mtag.Get("group") + + if len(subgroup) != 0 { + var ptrval reflect.Value + + if realval.Kind() == reflect.Ptr { + ptrval = realval + + if ptrval.IsNil() { + ptrval.Set(reflect.New(ptrval.Type())) + } + } else { + ptrval = realval.Addr() + } + + description := mtag.Get("description") + + group, err := g.AddGroup(subgroup, description, ptrval.Interface()) + + if err != nil { + return true, err + } + + group.Namespace = mtag.Get("namespace") + group.Hidden = mtag.Get("hidden") != "" + + return true, nil + } + + return false, nil +} + +func (g *Group) scanType(handler scanHandler) error { + // Get all the public fields in the data struct + ptrval := reflect.ValueOf(g.data) + + if ptrval.Type().Kind() != reflect.Ptr { + panic(ErrNotPointerToStruct) + } + + stype := ptrval.Type().Elem() + + if stype.Kind() != reflect.Struct { + panic(ErrNotPointerToStruct) + } + + realval := reflect.Indirect(ptrval) + + if err := g.scanStruct(realval, nil, handler); err != nil { + return err + } + + if err := g.checkForDuplicateFlags(); err != nil { + return err + } + + return nil +} + +func (g *Group) scan() error { + return g.scanType(g.scanSubGroupHandler) +} + +func (g *Group) groupByName(name string) *Group { + if len(name) == 0 { + return g + } + + return g.Find(name) +} diff --git a/vendor/github.com/jessevdk/go-flags/help.go b/vendor/github.com/jessevdk/go-flags/help.go new file mode 100644 index 00000000..d3803050 --- /dev/null +++ b/vendor/github.com/jessevdk/go-flags/help.go @@ -0,0 +1,491 @@ +// Copyright 2012 Jesse van den Kieboom. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package flags + +import ( + "bufio" + "bytes" + "fmt" + "io" + "runtime" + "strings" + "unicode/utf8" +) + +type alignmentInfo struct { + maxLongLen int + hasShort bool + hasValueName bool + terminalColumns int + indent bool +} + +const ( + paddingBeforeOption = 2 + distanceBetweenOptionAndDescription = 2 +) + +func (a *alignmentInfo) descriptionStart() int { + ret := a.maxLongLen + distanceBetweenOptionAndDescription + + if a.hasShort { + ret += 2 + } + + if a.maxLongLen > 0 { + ret += 4 + } + + if a.hasValueName { + ret += 3 + } + + return ret +} + +func (a *alignmentInfo) updateLen(name string, indent bool) { + l := utf8.RuneCountInString(name) + + if indent { + l = l + 4 + } + + if l > a.maxLongLen { + a.maxLongLen = l + } +} + +func (p *Parser) getAlignmentInfo() alignmentInfo { + ret := alignmentInfo{ + maxLongLen: 0, + hasShort: false, + hasValueName: false, + terminalColumns: getTerminalColumns(), + } + + if ret.terminalColumns <= 0 { + ret.terminalColumns = 80 + } + + var prevcmd *Command + + p.eachActiveGroup(func(c *Command, grp *Group) { + if c != prevcmd { + for _, arg := range c.args { + ret.updateLen(arg.Name, c != p.Command) + } + } + + for _, info := range grp.options { + if !info.canCli() { + continue + } + + if info.ShortName != 0 { + ret.hasShort = true + } + + if len(info.ValueName) > 0 { + ret.hasValueName = true + } + + l := info.LongNameWithNamespace() + info.ValueName + + if len(info.Choices) != 0 { + l += "[" + strings.Join(info.Choices, "|") + "]" + } + + ret.updateLen(l, c != p.Command) + } + }) + + return ret +} + +func wrapText(s string, l int, prefix string) string { + var ret string + + if l < 10 { + l = 10 + } + + // Basic text wrapping of s at spaces to fit in l + lines := strings.Split(s, "\n") + + for _, line := range lines { + var retline string + + line = strings.TrimSpace(line) + + for len(line) > l { + // Try to split on space + suffix := "" + + pos := strings.LastIndex(line[:l], " ") + + if pos < 0 { + pos = l - 1 + suffix = "-\n" + } + + if len(retline) != 0 { + retline += "\n" + prefix + } + + retline += strings.TrimSpace(line[:pos]) + suffix + line = strings.TrimSpace(line[pos:]) + } + + if len(line) > 0 { + if len(retline) != 0 { + retline += "\n" + prefix + } + + retline += line + } + + if len(ret) > 0 { + ret += "\n" + + if len(retline) > 0 { + ret += prefix + } + } + + ret += retline + } + + return ret +} + +func (p *Parser) writeHelpOption(writer *bufio.Writer, option *Option, info alignmentInfo) { + line := &bytes.Buffer{} + + prefix := paddingBeforeOption + + if info.indent { + prefix += 4 + } + + if option.Hidden { + return + } + + line.WriteString(strings.Repeat(" ", prefix)) + + if option.ShortName != 0 { + line.WriteRune(defaultShortOptDelimiter) + line.WriteRune(option.ShortName) + } else if info.hasShort { + line.WriteString(" ") + } + + descstart := info.descriptionStart() + paddingBeforeOption + + if len(option.LongName) > 0 { + if option.ShortName != 0 { + line.WriteString(", ") + } else if info.hasShort { + line.WriteString(" ") + } + + line.WriteString(defaultLongOptDelimiter) + line.WriteString(option.LongNameWithNamespace()) + } + + if option.canArgument() { + line.WriteRune(defaultNameArgDelimiter) + + if len(option.ValueName) > 0 { + line.WriteString(option.ValueName) + } + + if len(option.Choices) > 0 { + line.WriteString("[" + strings.Join(option.Choices, "|") + "]") + } + } + + written := line.Len() + line.WriteTo(writer) + + if option.Description != "" { + dw := descstart - written + writer.WriteString(strings.Repeat(" ", dw)) + + var def string + + if len(option.DefaultMask) != 0 { + if option.DefaultMask != "-" { + def = option.DefaultMask + } + } else { + def = option.defaultLiteral + } + + var envDef string + if option.EnvDefaultKey != "" { + var envPrintable string + if runtime.GOOS == "windows" { + envPrintable = "%" + option.EnvDefaultKey + "%" + } else { + envPrintable = "$" + option.EnvDefaultKey + } + envDef = fmt.Sprintf(" [%s]", envPrintable) + } + + var desc string + + if def != "" { + desc = fmt.Sprintf("%s (default: %v)%s", option.Description, def, envDef) + } else { + desc = option.Description + envDef + } + + writer.WriteString(wrapText(desc, + info.terminalColumns-descstart, + strings.Repeat(" ", descstart))) + } + + writer.WriteString("\n") +} + +func maxCommandLength(s []*Command) int { + if len(s) == 0 { + return 0 + } + + ret := len(s[0].Name) + + for _, v := range s[1:] { + l := len(v.Name) + + if l > ret { + ret = l + } + } + + return ret +} + +// WriteHelp writes a help message containing all the possible options and +// their descriptions to the provided writer. Note that the HelpFlag parser +// option provides a convenient way to add a -h/--help option group to the +// command line parser which will automatically show the help messages using +// this method. +func (p *Parser) WriteHelp(writer io.Writer) { + if writer == nil { + return + } + + wr := bufio.NewWriter(writer) + aligninfo := p.getAlignmentInfo() + + cmd := p.Command + + for cmd.Active != nil { + cmd = cmd.Active + } + + if p.Name != "" { + wr.WriteString("Usage:\n") + wr.WriteString(" ") + + allcmd := p.Command + + for allcmd != nil { + var usage string + + if allcmd == p.Command { + if len(p.Usage) != 0 { + usage = p.Usage + } else if p.Options&HelpFlag != 0 { + usage = "[OPTIONS]" + } + } else if us, ok := allcmd.data.(Usage); ok { + usage = us.Usage() + } else if allcmd.hasCliOptions() { + usage = fmt.Sprintf("[%s-OPTIONS]", allcmd.Name) + } + + if len(usage) != 0 { + fmt.Fprintf(wr, " %s %s", allcmd.Name, usage) + } else { + fmt.Fprintf(wr, " %s", allcmd.Name) + } + + if len(allcmd.args) > 0 { + fmt.Fprintf(wr, " ") + } + + for i, arg := range allcmd.args { + if i != 0 { + fmt.Fprintf(wr, " ") + } + + name := arg.Name + + if arg.isRemaining() { + name = name + "..." + } + + if !allcmd.ArgsRequired { + fmt.Fprintf(wr, "[%s]", name) + } else { + fmt.Fprintf(wr, "%s", name) + } + } + + if allcmd.Active == nil && len(allcmd.commands) > 0 { + var co, cc string + + if allcmd.SubcommandsOptional { + co, cc = "[", "]" + } else { + co, cc = "<", ">" + } + + visibleCommands := allcmd.visibleCommands() + + if len(visibleCommands) > 3 { + fmt.Fprintf(wr, " %scommand%s", co, cc) + } else { + subcommands := allcmd.sortedVisibleCommands() + names := make([]string, len(subcommands)) + + for i, subc := range subcommands { + names[i] = subc.Name + } + + fmt.Fprintf(wr, " %s%s%s", co, strings.Join(names, " | "), cc) + } + } + + allcmd = allcmd.Active + } + + fmt.Fprintln(wr) + + if len(cmd.LongDescription) != 0 { + fmt.Fprintln(wr) + + t := wrapText(cmd.LongDescription, + aligninfo.terminalColumns, + "") + + fmt.Fprintln(wr, t) + } + } + + c := p.Command + + for c != nil { + printcmd := c != p.Command + + c.eachGroup(func(grp *Group) { + first := true + + // Skip built-in help group for all commands except the top-level + // parser + if grp.Hidden || (grp.isBuiltinHelp && c != p.Command) { + return + } + + for _, info := range grp.options { + if !info.canCli() || info.Hidden { + continue + } + + if printcmd { + fmt.Fprintf(wr, "\n[%s command options]\n", c.Name) + aligninfo.indent = true + printcmd = false + } + + if first && cmd.Group != grp { + fmt.Fprintln(wr) + + if aligninfo.indent { + wr.WriteString(" ") + } + + fmt.Fprintf(wr, "%s:\n", grp.ShortDescription) + first = false + } + + p.writeHelpOption(wr, info, aligninfo) + } + }) + + var args []*Arg + for _, arg := range c.args { + if arg.Description != "" { + args = append(args, arg) + } + } + + if len(args) > 0 { + if c == p.Command { + fmt.Fprintf(wr, "\nArguments:\n") + } else { + fmt.Fprintf(wr, "\n[%s command arguments]\n", c.Name) + } + + descStart := aligninfo.descriptionStart() + paddingBeforeOption + + for _, arg := range args { + argPrefix := strings.Repeat(" ", paddingBeforeOption) + argPrefix += arg.Name + + if len(arg.Description) > 0 { + argPrefix += ":" + wr.WriteString(argPrefix) + + // Space between "arg:" and the description start + descPadding := strings.Repeat(" ", descStart-len(argPrefix)) + // How much space the description gets before wrapping + descWidth := aligninfo.terminalColumns - 1 - descStart + // Whitespace to which we can indent new description lines + descPrefix := strings.Repeat(" ", descStart) + + wr.WriteString(descPadding) + wr.WriteString(wrapText(arg.Description, descWidth, descPrefix)) + } else { + wr.WriteString(argPrefix) + } + + fmt.Fprintln(wr) + } + } + + c = c.Active + } + + scommands := cmd.sortedVisibleCommands() + + if len(scommands) > 0 { + maxnamelen := maxCommandLength(scommands) + + fmt.Fprintln(wr) + fmt.Fprintln(wr, "Available commands:") + + for _, c := range scommands { + fmt.Fprintf(wr, " %s", c.Name) + + if len(c.ShortDescription) > 0 { + pad := strings.Repeat(" ", maxnamelen-len(c.Name)) + fmt.Fprintf(wr, "%s %s", pad, c.ShortDescription) + + if len(c.Aliases) > 0 { + fmt.Fprintf(wr, " (aliases: %s)", strings.Join(c.Aliases, ", ")) + } + + } + + fmt.Fprintln(wr) + } + } + + wr.Flush() +} diff --git a/vendor/github.com/jessevdk/go-flags/ini.go b/vendor/github.com/jessevdk/go-flags/ini.go new file mode 100644 index 00000000..e714d3d3 --- /dev/null +++ b/vendor/github.com/jessevdk/go-flags/ini.go @@ -0,0 +1,597 @@ +package flags + +import ( + "bufio" + "fmt" + "io" + "os" + "reflect" + "sort" + "strconv" + "strings" +) + +// IniError contains location information on where an error occurred. +type IniError struct { + // The error message. + Message string + + // The filename of the file in which the error occurred. + File string + + // The line number at which the error occurred. + LineNumber uint +} + +// Error provides a "file:line: message" formatted message of the ini error. +func (x *IniError) Error() string { + return fmt.Sprintf( + "%s:%d: %s", + x.File, + x.LineNumber, + x.Message, + ) +} + +// IniOptions for writing +type IniOptions uint + +const ( + // IniNone indicates no options. + IniNone IniOptions = 0 + + // IniIncludeDefaults indicates that default values should be written. + IniIncludeDefaults = 1 << iota + + // IniCommentDefaults indicates that if IniIncludeDefaults is used + // options with default values are written but commented out. + IniCommentDefaults + + // IniIncludeComments indicates that comments containing the description + // of an option should be written. + IniIncludeComments + + // IniDefault provides a default set of options. + IniDefault = IniIncludeComments +) + +// IniParser is a utility to read and write flags options from and to ini +// formatted strings. +type IniParser struct { + ParseAsDefaults bool // override default flags + + parser *Parser +} + +type iniValue struct { + Name string + Value string + Quoted bool + LineNumber uint +} + +type iniSection []iniValue + +type ini struct { + File string + Sections map[string]iniSection +} + +// NewIniParser creates a new ini parser for a given Parser. +func NewIniParser(p *Parser) *IniParser { + return &IniParser{ + parser: p, + } +} + +// IniParse is a convenience function to parse command line options with default +// settings from an ini formatted file. The provided data is a pointer to a struct +// representing the default option group (named "Application Options"). For +// more control, use flags.NewParser. +func IniParse(filename string, data interface{}) error { + p := NewParser(data, Default) + + return NewIniParser(p).ParseFile(filename) +} + +// ParseFile parses flags from an ini formatted file. See Parse for more +// information on the ini file format. The returned errors can be of the type +// flags.Error or flags.IniError. +func (i *IniParser) ParseFile(filename string) error { + ini, err := readIniFromFile(filename) + + if err != nil { + return err + } + + return i.parse(ini) +} + +// Parse parses flags from an ini format. You can use ParseFile as a +// convenience function to parse from a filename instead of a general +// io.Reader. +// +// The format of the ini file is as follows: +// +// [Option group name] +// option = value +// +// Each section in the ini file represents an option group or command in the +// flags parser. The default flags parser option group (i.e. when using +// flags.Parse) is named 'Application Options'. The ini option name is matched +// in the following order: +// +// 1. Compared to the ini-name tag on the option struct field (if present) +// 2. Compared to the struct field name +// 3. Compared to the option long name (if present) +// 4. Compared to the option short name (if present) +// +// Sections for nested groups and commands can be addressed using a dot `.' +// namespacing notation (i.e [subcommand.Options]). Group section names are +// matched case insensitive. +// +// The returned errors can be of the type flags.Error or flags.IniError. +func (i *IniParser) Parse(reader io.Reader) error { + ini, err := readIni(reader, "") + + if err != nil { + return err + } + + return i.parse(ini) +} + +// WriteFile writes the flags as ini format into a file. See Write +// for more information. The returned error occurs when the specified file +// could not be opened for writing. +func (i *IniParser) WriteFile(filename string, options IniOptions) error { + return writeIniToFile(i, filename, options) +} + +// Write writes the current values of all the flags to an ini format. +// See Parse for more information on the ini file format. You typically +// call this only after settings have been parsed since the default values of each +// option are stored just before parsing the flags (this is only relevant when +// IniIncludeDefaults is _not_ set in options). +func (i *IniParser) Write(writer io.Writer, options IniOptions) { + writeIni(i, writer, options) +} + +func readFullLine(reader *bufio.Reader) (string, error) { + var line []byte + + for { + l, more, err := reader.ReadLine() + + if err != nil { + return "", err + } + + if line == nil && !more { + return string(l), nil + } + + line = append(line, l...) + + if !more { + break + } + } + + return string(line), nil +} + +func optionIniName(option *Option) string { + name := option.tag.Get("_read-ini-name") + + if len(name) != 0 { + return name + } + + name = option.tag.Get("ini-name") + + if len(name) != 0 { + return name + } + + return option.field.Name +} + +func writeGroupIni(cmd *Command, group *Group, namespace string, writer io.Writer, options IniOptions) { + var sname string + + if len(namespace) != 0 { + sname = namespace + } + + if cmd.Group != group && len(group.ShortDescription) != 0 { + if len(sname) != 0 { + sname += "." + } + + sname += group.ShortDescription + } + + sectionwritten := false + comments := (options & IniIncludeComments) != IniNone + + for _, option := range group.options { + if option.isFunc() || option.Hidden { + continue + } + + if len(option.tag.Get("no-ini")) != 0 { + continue + } + + val := option.value + + if (options&IniIncludeDefaults) == IniNone && option.valueIsDefault() { + continue + } + + if !sectionwritten { + fmt.Fprintf(writer, "[%s]\n", sname) + sectionwritten = true + } + + if comments && len(option.Description) != 0 { + fmt.Fprintf(writer, "; %s\n", option.Description) + } + + oname := optionIniName(option) + + commentOption := (options&(IniIncludeDefaults|IniCommentDefaults)) == IniIncludeDefaults|IniCommentDefaults && option.valueIsDefault() + + kind := val.Type().Kind() + switch kind { + case reflect.Slice: + kind = val.Type().Elem().Kind() + + if val.Len() == 0 { + writeOption(writer, oname, kind, "", "", true, option.iniQuote) + } else { + for idx := 0; idx < val.Len(); idx++ { + v, _ := convertToString(val.Index(idx), option.tag) + + writeOption(writer, oname, kind, "", v, commentOption, option.iniQuote) + } + } + case reflect.Map: + kind = val.Type().Elem().Kind() + + if val.Len() == 0 { + writeOption(writer, oname, kind, "", "", true, option.iniQuote) + } else { + mkeys := val.MapKeys() + keys := make([]string, len(val.MapKeys())) + kkmap := make(map[string]reflect.Value) + + for i, k := range mkeys { + keys[i], _ = convertToString(k, option.tag) + kkmap[keys[i]] = k + } + + sort.Strings(keys) + + for _, k := range keys { + v, _ := convertToString(val.MapIndex(kkmap[k]), option.tag) + + writeOption(writer, oname, kind, k, v, commentOption, option.iniQuote) + } + } + default: + v, _ := convertToString(val, option.tag) + + writeOption(writer, oname, kind, "", v, commentOption, option.iniQuote) + } + + if comments { + fmt.Fprintln(writer) + } + } + + if sectionwritten && !comments { + fmt.Fprintln(writer) + } +} + +func writeOption(writer io.Writer, optionName string, optionType reflect.Kind, optionKey string, optionValue string, commentOption bool, forceQuote bool) { + if forceQuote || (optionType == reflect.String && !isPrint(optionValue)) { + optionValue = strconv.Quote(optionValue) + } + + comment := "" + if commentOption { + comment = "; " + } + + fmt.Fprintf(writer, "%s%s =", comment, optionName) + + if optionKey != "" { + fmt.Fprintf(writer, " %s:%s", optionKey, optionValue) + } else if optionValue != "" { + fmt.Fprintf(writer, " %s", optionValue) + } + + fmt.Fprintln(writer) +} + +func writeCommandIni(command *Command, namespace string, writer io.Writer, options IniOptions) { + command.eachGroup(func(group *Group) { + if !group.Hidden { + writeGroupIni(command, group, namespace, writer, options) + } + }) + + for _, c := range command.commands { + var nns string + + if c.Hidden { + continue + } + + if len(namespace) != 0 { + nns = c.Name + "." + nns + } else { + nns = c.Name + } + + writeCommandIni(c, nns, writer, options) + } +} + +func writeIni(parser *IniParser, writer io.Writer, options IniOptions) { + writeCommandIni(parser.parser.Command, "", writer, options) +} + +func writeIniToFile(parser *IniParser, filename string, options IniOptions) error { + file, err := os.Create(filename) + + if err != nil { + return err + } + + defer file.Close() + + writeIni(parser, file, options) + + return nil +} + +func readIniFromFile(filename string) (*ini, error) { + file, err := os.Open(filename) + + if err != nil { + return nil, err + } + + defer file.Close() + + return readIni(file, filename) +} + +func readIni(contents io.Reader, filename string) (*ini, error) { + ret := &ini{ + File: filename, + Sections: make(map[string]iniSection), + } + + reader := bufio.NewReader(contents) + + // Empty global section + section := make(iniSection, 0, 10) + sectionname := "" + + ret.Sections[sectionname] = section + + var lineno uint + + for { + line, err := readFullLine(reader) + + if err == io.EOF { + break + } else if err != nil { + return nil, err + } + + lineno++ + line = strings.TrimSpace(line) + + // Skip empty lines and lines starting with ; (comments) + if len(line) == 0 || line[0] == ';' || line[0] == '#' { + continue + } + + if line[0] == '[' { + if line[0] != '[' || line[len(line)-1] != ']' { + return nil, &IniError{ + Message: "malformed section header", + File: filename, + LineNumber: lineno, + } + } + + name := strings.TrimSpace(line[1 : len(line)-1]) + + if len(name) == 0 { + return nil, &IniError{ + Message: "empty section name", + File: filename, + LineNumber: lineno, + } + } + + sectionname = name + section = ret.Sections[name] + + if section == nil { + section = make(iniSection, 0, 10) + ret.Sections[name] = section + } + + continue + } + + // Parse option here + keyval := strings.SplitN(line, "=", 2) + + if len(keyval) != 2 { + return nil, &IniError{ + Message: fmt.Sprintf("malformed key=value (%s)", line), + File: filename, + LineNumber: lineno, + } + } + + name := strings.TrimSpace(keyval[0]) + value := strings.TrimSpace(keyval[1]) + quoted := false + + if len(value) != 0 && value[0] == '"' { + if v, err := strconv.Unquote(value); err == nil { + value = v + + quoted = true + } else { + return nil, &IniError{ + Message: err.Error(), + File: filename, + LineNumber: lineno, + } + } + } + + section = append(section, iniValue{ + Name: name, + Value: value, + Quoted: quoted, + LineNumber: lineno, + }) + + ret.Sections[sectionname] = section + } + + return ret, nil +} + +func (i *IniParser) matchingGroups(name string) []*Group { + if len(name) == 0 { + var ret []*Group + + i.parser.eachGroup(func(g *Group) { + ret = append(ret, g) + }) + + return ret + } + + g := i.parser.groupByName(name) + + if g != nil { + return []*Group{g} + } + + return nil +} + +func (i *IniParser) parse(ini *ini) error { + p := i.parser + + var quotesLookup = make(map[*Option]bool) + + for name, section := range ini.Sections { + groups := i.matchingGroups(name) + + if len(groups) == 0 { + return newErrorf(ErrUnknownGroup, "could not find option group `%s'", name) + } + + for _, inival := range section { + var opt *Option + + for _, group := range groups { + opt = group.optionByName(inival.Name, func(o *Option, n string) bool { + return strings.ToLower(o.tag.Get("ini-name")) == strings.ToLower(n) + }) + + if opt != nil && len(opt.tag.Get("no-ini")) != 0 { + opt = nil + } + + if opt != nil { + break + } + } + + if opt == nil { + if (p.Options & IgnoreUnknown) == None { + return &IniError{ + Message: fmt.Sprintf("unknown option: %s", inival.Name), + File: ini.File, + LineNumber: inival.LineNumber, + } + } + + continue + } + + // ini value is ignored if override is set and + // value was previously set from non default + if i.ParseAsDefaults && !opt.isSetDefault { + continue + } + + pval := &inival.Value + + if !opt.canArgument() && len(inival.Value) == 0 { + pval = nil + } else { + if opt.value.Type().Kind() == reflect.Map { + parts := strings.SplitN(inival.Value, ":", 2) + + // only handle unquoting + if len(parts) == 2 && parts[1][0] == '"' { + if v, err := strconv.Unquote(parts[1]); err == nil { + parts[1] = v + + inival.Quoted = true + } else { + return &IniError{ + Message: err.Error(), + File: ini.File, + LineNumber: inival.LineNumber, + } + } + + s := parts[0] + ":" + parts[1] + + pval = &s + } + } + } + + if err := opt.set(pval); err != nil { + return &IniError{ + Message: err.Error(), + File: ini.File, + LineNumber: inival.LineNumber, + } + } + + // either all INI values are quoted or only values who need quoting + if _, ok := quotesLookup[opt]; !inival.Quoted || !ok { + quotesLookup[opt] = inival.Quoted + } + + opt.tag.Set("_read-ini-name", inival.Name) + } + } + + for opt, quoted := range quotesLookup { + opt.iniQuote = quoted + } + + return nil +} diff --git a/vendor/github.com/jessevdk/go-flags/man.go b/vendor/github.com/jessevdk/go-flags/man.go new file mode 100644 index 00000000..0cb114e7 --- /dev/null +++ b/vendor/github.com/jessevdk/go-flags/man.go @@ -0,0 +1,205 @@ +package flags + +import ( + "fmt" + "io" + "runtime" + "strings" + "time" +) + +func manQuote(s string) string { + return strings.Replace(s, "\\", "\\\\", -1) +} + +func formatForMan(wr io.Writer, s string) { + for { + idx := strings.IndexRune(s, '`') + + if idx < 0 { + fmt.Fprintf(wr, "%s", manQuote(s)) + break + } + + fmt.Fprintf(wr, "%s", manQuote(s[:idx])) + + s = s[idx+1:] + idx = strings.IndexRune(s, '\'') + + if idx < 0 { + fmt.Fprintf(wr, "%s", manQuote(s)) + break + } + + fmt.Fprintf(wr, "\\fB%s\\fP", manQuote(s[:idx])) + s = s[idx+1:] + } +} + +func writeManPageOptions(wr io.Writer, grp *Group) { + grp.eachGroup(func(group *Group) { + if group.Hidden || len(group.options) == 0 { + return + } + + // If the parent (grp) has any subgroups, display their descriptions as + // subsection headers similar to the output of --help. + if group.ShortDescription != "" && len(grp.groups) > 0 { + fmt.Fprintf(wr, ".SS %s\n", group.ShortDescription) + + if group.LongDescription != "" { + formatForMan(wr, group.LongDescription) + fmt.Fprintln(wr, "") + } + } + + for _, opt := range group.options { + if !opt.canCli() || opt.Hidden { + continue + } + + fmt.Fprintln(wr, ".TP") + fmt.Fprintf(wr, "\\fB") + + if opt.ShortName != 0 { + fmt.Fprintf(wr, "\\fB\\-%c\\fR", opt.ShortName) + } + + if len(opt.LongName) != 0 { + if opt.ShortName != 0 { + fmt.Fprintf(wr, ", ") + } + + fmt.Fprintf(wr, "\\fB\\-\\-%s\\fR", manQuote(opt.LongNameWithNamespace())) + } + + if len(opt.ValueName) != 0 || opt.OptionalArgument { + if opt.OptionalArgument { + fmt.Fprintf(wr, " [\\fI%s=%s\\fR]", manQuote(opt.ValueName), manQuote(strings.Join(quoteV(opt.OptionalValue), ", "))) + } else { + fmt.Fprintf(wr, " \\fI%s\\fR", manQuote(opt.ValueName)) + } + } + + if len(opt.Default) != 0 { + fmt.Fprintf(wr, " ", manQuote(strings.Join(quoteV(opt.Default), ", "))) + } else if len(opt.EnvDefaultKey) != 0 { + if runtime.GOOS == "windows" { + fmt.Fprintf(wr, " ", manQuote(opt.EnvDefaultKey)) + } else { + fmt.Fprintf(wr, " ", manQuote(opt.EnvDefaultKey)) + } + } + + if opt.Required { + fmt.Fprintf(wr, " (\\fIrequired\\fR)") + } + + fmt.Fprintln(wr, "\\fP") + + if len(opt.Description) != 0 { + formatForMan(wr, opt.Description) + fmt.Fprintln(wr, "") + } + } + }) +} + +func writeManPageSubcommands(wr io.Writer, name string, root *Command) { + commands := root.sortedVisibleCommands() + + for _, c := range commands { + var nn string + + if c.Hidden { + continue + } + + if len(name) != 0 { + nn = name + " " + c.Name + } else { + nn = c.Name + } + + writeManPageCommand(wr, nn, root, c) + } +} + +func writeManPageCommand(wr io.Writer, name string, root *Command, command *Command) { + fmt.Fprintf(wr, ".SS %s\n", name) + fmt.Fprintln(wr, command.ShortDescription) + + if len(command.LongDescription) > 0 { + fmt.Fprintln(wr, "") + + cmdstart := fmt.Sprintf("The %s command", manQuote(command.Name)) + + if strings.HasPrefix(command.LongDescription, cmdstart) { + fmt.Fprintf(wr, "The \\fI%s\\fP command", manQuote(command.Name)) + + formatForMan(wr, command.LongDescription[len(cmdstart):]) + fmt.Fprintln(wr, "") + } else { + formatForMan(wr, command.LongDescription) + fmt.Fprintln(wr, "") + } + } + + var usage string + if us, ok := command.data.(Usage); ok { + usage = us.Usage() + } else if command.hasCliOptions() { + usage = fmt.Sprintf("[%s-OPTIONS]", command.Name) + } + + var pre string + if root.hasCliOptions() { + pre = fmt.Sprintf("%s [OPTIONS] %s", root.Name, command.Name) + } else { + pre = fmt.Sprintf("%s %s", root.Name, command.Name) + } + + if len(usage) > 0 { + fmt.Fprintf(wr, "\n\\fBUsage\\fP: %s %s\n.TP\n", manQuote(pre), manQuote(usage)) + } + + if len(command.Aliases) > 0 { + fmt.Fprintf(wr, "\n\\fBAliases\\fP: %s\n\n", manQuote(strings.Join(command.Aliases, ", "))) + } + + writeManPageOptions(wr, command.Group) + writeManPageSubcommands(wr, name, command) +} + +// WriteManPage writes a basic man page in groff format to the specified +// writer. +func (p *Parser) WriteManPage(wr io.Writer) { + t := time.Now() + + fmt.Fprintf(wr, ".TH %s 1 \"%s\"\n", manQuote(p.Name), t.Format("2 January 2006")) + fmt.Fprintln(wr, ".SH NAME") + fmt.Fprintf(wr, "%s \\- %s\n", manQuote(p.Name), manQuote(p.ShortDescription)) + fmt.Fprintln(wr, ".SH SYNOPSIS") + + usage := p.Usage + + if len(usage) == 0 { + usage = "[OPTIONS]" + } + + fmt.Fprintf(wr, "\\fB%s\\fP %s\n", manQuote(p.Name), manQuote(usage)) + fmt.Fprintln(wr, ".SH DESCRIPTION") + + formatForMan(wr, p.LongDescription) + fmt.Fprintln(wr, "") + + fmt.Fprintln(wr, ".SH OPTIONS") + + writeManPageOptions(wr, p.Command.Group) + + if len(p.visibleCommands()) > 0 { + fmt.Fprintln(wr, ".SH COMMANDS") + + writeManPageSubcommands(wr, "", p.Command) + } +} diff --git a/vendor/github.com/jessevdk/go-flags/multitag.go b/vendor/github.com/jessevdk/go-flags/multitag.go new file mode 100644 index 00000000..96bb1a31 --- /dev/null +++ b/vendor/github.com/jessevdk/go-flags/multitag.go @@ -0,0 +1,140 @@ +package flags + +import ( + "strconv" +) + +type multiTag struct { + value string + cache map[string][]string +} + +func newMultiTag(v string) multiTag { + return multiTag{ + value: v, + } +} + +func (x *multiTag) scan() (map[string][]string, error) { + v := x.value + + ret := make(map[string][]string) + + // This is mostly copied from reflect.StructTag.Get + for v != "" { + i := 0 + + // Skip whitespace + for i < len(v) && v[i] == ' ' { + i++ + } + + v = v[i:] + + if v == "" { + break + } + + // Scan to colon to find key + i = 0 + + for i < len(v) && v[i] != ' ' && v[i] != ':' && v[i] != '"' { + i++ + } + + if i >= len(v) { + return nil, newErrorf(ErrTag, "expected `:' after key name, but got end of tag (in `%v`)", x.value) + } + + if v[i] != ':' { + return nil, newErrorf(ErrTag, "expected `:' after key name, but got `%v' (in `%v`)", v[i], x.value) + } + + if i+1 >= len(v) { + return nil, newErrorf(ErrTag, "expected `\"' to start tag value at end of tag (in `%v`)", x.value) + } + + if v[i+1] != '"' { + return nil, newErrorf(ErrTag, "expected `\"' to start tag value, but got `%v' (in `%v`)", v[i+1], x.value) + } + + name := v[:i] + v = v[i+1:] + + // Scan quoted string to find value + i = 1 + + for i < len(v) && v[i] != '"' { + if v[i] == '\n' { + return nil, newErrorf(ErrTag, "unexpected newline in tag value `%v' (in `%v`)", name, x.value) + } + + if v[i] == '\\' { + i++ + } + i++ + } + + if i >= len(v) { + return nil, newErrorf(ErrTag, "expected end of tag value `\"' at end of tag (in `%v`)", x.value) + } + + val, err := strconv.Unquote(v[:i+1]) + + if err != nil { + return nil, newErrorf(ErrTag, "Malformed value of tag `%v:%v` => %v (in `%v`)", name, v[:i+1], err, x.value) + } + + v = v[i+1:] + + ret[name] = append(ret[name], val) + } + + return ret, nil +} + +func (x *multiTag) Parse() error { + vals, err := x.scan() + x.cache = vals + + return err +} + +func (x *multiTag) cached() map[string][]string { + if x.cache == nil { + cache, _ := x.scan() + + if cache == nil { + cache = make(map[string][]string) + } + + x.cache = cache + } + + return x.cache +} + +func (x *multiTag) Get(key string) string { + c := x.cached() + + if v, ok := c[key]; ok { + return v[len(v)-1] + } + + return "" +} + +func (x *multiTag) GetMany(key string) []string { + c := x.cached() + return c[key] +} + +func (x *multiTag) Set(key string, value string) { + c := x.cached() + c[key] = []string{value} +} + +func (x *multiTag) SetMany(key string, value []string) { + c := x.cached() + c[key] = value +} diff --git a/vendor/github.com/jessevdk/go-flags/option.go b/vendor/github.com/jessevdk/go-flags/option.go new file mode 100644 index 00000000..5f852501 --- /dev/null +++ b/vendor/github.com/jessevdk/go-flags/option.go @@ -0,0 +1,459 @@ +package flags + +import ( + "bytes" + "fmt" + "os" + "reflect" + "strings" + "unicode/utf8" +) + +// Option flag information. Contains a description of the option, short and +// long name as well as a default value and whether an argument for this +// flag is optional. +type Option struct { + // The description of the option flag. This description is shown + // automatically in the built-in help. + Description string + + // The short name of the option (a single character). If not 0, the + // option flag can be 'activated' using -. Either ShortName + // or LongName needs to be non-empty. + ShortName rune + + // The long name of the option. If not "", the option flag can be + // activated using --. Either ShortName or LongName needs + // to be non-empty. + LongName string + + // The default value of the option. + Default []string + + // The optional environment default value key name. + EnvDefaultKey string + + // The optional delimiter string for EnvDefaultKey values. + EnvDefaultDelim string + + // If true, specifies that the argument to an option flag is optional. + // When no argument to the flag is specified on the command line, the + // value of OptionalValue will be set in the field this option represents. + // This is only valid for non-boolean options. + OptionalArgument bool + + // The optional value of the option. The optional value is used when + // the option flag is marked as having an OptionalArgument. This means + // that when the flag is specified, but no option argument is given, + // the value of the field this option represents will be set to + // OptionalValue. This is only valid for non-boolean options. + OptionalValue []string + + // If true, the option _must_ be specified on the command line. If the + // option is not specified, the parser will generate an ErrRequired type + // error. + Required bool + + // A name for the value of an option shown in the Help as --flag [ValueName] + ValueName string + + // A mask value to show in the help instead of the default value. This + // is useful for hiding sensitive information in the help, such as + // passwords. + DefaultMask string + + // If non empty, only a certain set of values is allowed for an option. + Choices []string + + // If true, the option is not displayed in the help or man page + Hidden bool + + // The group which the option belongs to + group *Group + + // The struct field which the option represents. + field reflect.StructField + + // The struct field value which the option represents. + value reflect.Value + + // Determines if the option will be always quoted in the INI output + iniQuote bool + + tag multiTag + isSet bool + isSetDefault bool + preventDefault bool + + defaultLiteral string +} + +// LongNameWithNamespace returns the option's long name with the group namespaces +// prepended by walking up the option's group tree. Namespaces and the long name +// itself are separated by the parser's namespace delimiter. If the long name is +// empty an empty string is returned. +func (option *Option) LongNameWithNamespace() string { + if len(option.LongName) == 0 { + return "" + } + + // fetch the namespace delimiter from the parser which is always at the + // end of the group hierarchy + namespaceDelimiter := "" + g := option.group + + for { + if p, ok := g.parent.(*Parser); ok { + namespaceDelimiter = p.NamespaceDelimiter + + break + } + + switch i := g.parent.(type) { + case *Command: + g = i.Group + case *Group: + g = i + } + } + + // concatenate long name with namespace + longName := option.LongName + g = option.group + + for g != nil { + if g.Namespace != "" { + longName = g.Namespace + namespaceDelimiter + longName + } + + switch i := g.parent.(type) { + case *Command: + g = i.Group + case *Group: + g = i + case *Parser: + g = nil + } + } + + return longName +} + +// String converts an option to a human friendly readable string describing the +// option. +func (option *Option) String() string { + var s string + var short string + + if option.ShortName != 0 { + data := make([]byte, utf8.RuneLen(option.ShortName)) + utf8.EncodeRune(data, option.ShortName) + short = string(data) + + if len(option.LongName) != 0 { + s = fmt.Sprintf("%s%s, %s%s", + string(defaultShortOptDelimiter), short, + defaultLongOptDelimiter, option.LongNameWithNamespace()) + } else { + s = fmt.Sprintf("%s%s", string(defaultShortOptDelimiter), short) + } + } else if len(option.LongName) != 0 { + s = fmt.Sprintf("%s%s", defaultLongOptDelimiter, option.LongNameWithNamespace()) + } + + return s +} + +// Value returns the option value as an interface{}. +func (option *Option) Value() interface{} { + return option.value.Interface() +} + +// Field returns the reflect struct field of the option. +func (option *Option) Field() reflect.StructField { + return option.field +} + +// IsSet returns true if option has been set +func (option *Option) IsSet() bool { + return option.isSet +} + +// IsSetDefault returns true if option has been set via the default option tag +func (option *Option) IsSetDefault() bool { + return option.isSetDefault +} + +// Set the value of an option to the specified value. An error will be returned +// if the specified value could not be converted to the corresponding option +// value type. +func (option *Option) set(value *string) error { + kind := option.value.Type().Kind() + + if (kind == reflect.Map || kind == reflect.Slice) && !option.isSet { + option.empty() + } + + option.isSet = true + option.preventDefault = true + + if len(option.Choices) != 0 { + found := false + + for _, choice := range option.Choices { + if choice == *value { + found = true + break + } + } + + if !found { + allowed := strings.Join(option.Choices[0:len(option.Choices)-1], ", ") + + if len(option.Choices) > 1 { + allowed += " or " + option.Choices[len(option.Choices)-1] + } + + return newErrorf(ErrInvalidChoice, + "Invalid value `%s' for option `%s'. Allowed values are: %s", + *value, option, allowed) + } + } + + if option.isFunc() { + return option.call(value) + } else if value != nil { + return convert(*value, option.value, option.tag) + } + + return convert("", option.value, option.tag) +} + +func (option *Option) canCli() bool { + return option.ShortName != 0 || len(option.LongName) != 0 +} + +func (option *Option) canArgument() bool { + if u := option.isUnmarshaler(); u != nil { + return true + } + + return !option.isBool() +} + +func (option *Option) emptyValue() reflect.Value { + tp := option.value.Type() + + if tp.Kind() == reflect.Map { + return reflect.MakeMap(tp) + } + + return reflect.Zero(tp) +} + +func (option *Option) empty() { + if !option.isFunc() { + option.value.Set(option.emptyValue()) + } +} + +func (option *Option) clearDefault() { + usedDefault := option.Default + + if envKey := option.EnvDefaultKey; envKey != "" { + if value, ok := os.LookupEnv(envKey); ok { + if option.EnvDefaultDelim != "" { + usedDefault = strings.Split(value, + option.EnvDefaultDelim) + } else { + usedDefault = []string{value} + } + } + } + + option.isSetDefault = true + + if len(usedDefault) > 0 { + option.empty() + + for _, d := range usedDefault { + option.set(&d) + option.isSetDefault = true + } + } else { + tp := option.value.Type() + + switch tp.Kind() { + case reflect.Map: + if option.value.IsNil() { + option.empty() + } + case reflect.Slice: + if option.value.IsNil() { + option.empty() + } + } + } +} + +func (option *Option) valueIsDefault() bool { + // Check if the value of the option corresponds to its + // default value + emptyval := option.emptyValue() + + checkvalptr := reflect.New(emptyval.Type()) + checkval := reflect.Indirect(checkvalptr) + + checkval.Set(emptyval) + + if len(option.Default) != 0 { + for _, v := range option.Default { + convert(v, checkval, option.tag) + } + } + + return reflect.DeepEqual(option.value.Interface(), checkval.Interface()) +} + +func (option *Option) isUnmarshaler() Unmarshaler { + v := option.value + + for { + if !v.CanInterface() { + break + } + + i := v.Interface() + + if u, ok := i.(Unmarshaler); ok { + return u + } + + if !v.CanAddr() { + break + } + + v = v.Addr() + } + + return nil +} + +func (option *Option) isBool() bool { + tp := option.value.Type() + + for { + switch tp.Kind() { + case reflect.Slice, reflect.Ptr: + tp = tp.Elem() + case reflect.Bool: + return true + case reflect.Func: + return tp.NumIn() == 0 + default: + return false + } + } +} + +func (option *Option) isSignedNumber() bool { + tp := option.value.Type() + + for { + switch tp.Kind() { + case reflect.Slice, reflect.Ptr: + tp = tp.Elem() + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Float32, reflect.Float64: + return true + default: + return false + } + } +} + +func (option *Option) isFunc() bool { + return option.value.Type().Kind() == reflect.Func +} + +func (option *Option) call(value *string) error { + var retval []reflect.Value + + if value == nil { + retval = option.value.Call(nil) + } else { + tp := option.value.Type().In(0) + + val := reflect.New(tp) + val = reflect.Indirect(val) + + if err := convert(*value, val, option.tag); err != nil { + return err + } + + retval = option.value.Call([]reflect.Value{val}) + } + + if len(retval) == 1 && retval[0].Type() == reflect.TypeOf((*error)(nil)).Elem() { + if retval[0].Interface() == nil { + return nil + } + + return retval[0].Interface().(error) + } + + return nil +} + +func (option *Option) updateDefaultLiteral() { + defs := option.Default + def := "" + + if len(defs) == 0 && option.canArgument() { + var showdef bool + + switch option.field.Type.Kind() { + case reflect.Func, reflect.Ptr: + showdef = !option.value.IsNil() + case reflect.Slice, reflect.String, reflect.Array: + showdef = option.value.Len() > 0 + case reflect.Map: + showdef = !option.value.IsNil() && option.value.Len() > 0 + default: + zeroval := reflect.Zero(option.field.Type) + showdef = !reflect.DeepEqual(zeroval.Interface(), option.value.Interface()) + } + + if showdef { + def, _ = convertToString(option.value, option.tag) + } + } else if len(defs) != 0 { + l := len(defs) - 1 + + for i := 0; i < l; i++ { + def += quoteIfNeeded(defs[i]) + ", " + } + + def += quoteIfNeeded(defs[l]) + } + + option.defaultLiteral = def +} + +func (option *Option) shortAndLongName() string { + ret := &bytes.Buffer{} + + if option.ShortName != 0 { + ret.WriteRune(defaultShortOptDelimiter) + ret.WriteRune(option.ShortName) + } + + if len(option.LongName) != 0 { + if option.ShortName != 0 { + ret.WriteRune('/') + } + + ret.WriteString(option.LongName) + } + + return ret.String() +} diff --git a/vendor/github.com/jessevdk/go-flags/optstyle_other.go b/vendor/github.com/jessevdk/go-flags/optstyle_other.go new file mode 100644 index 00000000..56dfdae1 --- /dev/null +++ b/vendor/github.com/jessevdk/go-flags/optstyle_other.go @@ -0,0 +1,67 @@ +// +build !windows forceposix + +package flags + +import ( + "strings" +) + +const ( + defaultShortOptDelimiter = '-' + defaultLongOptDelimiter = "--" + defaultNameArgDelimiter = '=' +) + +func argumentStartsOption(arg string) bool { + return len(arg) > 0 && arg[0] == '-' +} + +func argumentIsOption(arg string) bool { + if len(arg) > 1 && arg[0] == '-' && arg[1] != '-' { + return true + } + + if len(arg) > 2 && arg[0] == '-' && arg[1] == '-' && arg[2] != '-' { + return true + } + + return false +} + +// stripOptionPrefix returns the option without the prefix and whether or +// not the option is a long option or not. +func stripOptionPrefix(optname string) (prefix string, name string, islong bool) { + if strings.HasPrefix(optname, "--") { + return "--", optname[2:], true + } else if strings.HasPrefix(optname, "-") { + return "-", optname[1:], false + } + + return "", optname, false +} + +// splitOption attempts to split the passed option into a name and an argument. +// When there is no argument specified, nil will be returned for it. +func splitOption(prefix string, option string, islong bool) (string, string, *string) { + pos := strings.Index(option, "=") + + if (islong && pos >= 0) || (!islong && pos == 1) { + rest := option[pos+1:] + return option[:pos], "=", &rest + } + + return option, "", nil +} + +// addHelpGroup adds a new group that contains default help parameters. +func (c *Command) addHelpGroup(showHelp func() error) *Group { + var help struct { + ShowHelp func() error `short:"h" long:"help" description:"Show this help message"` + } + + help.ShowHelp = showHelp + ret, _ := c.AddGroup("Help Options", "", &help) + ret.isBuiltinHelp = true + + return ret +} diff --git a/vendor/github.com/jessevdk/go-flags/optstyle_windows.go b/vendor/github.com/jessevdk/go-flags/optstyle_windows.go new file mode 100644 index 00000000..f3f28aee --- /dev/null +++ b/vendor/github.com/jessevdk/go-flags/optstyle_windows.go @@ -0,0 +1,108 @@ +// +build !forceposix + +package flags + +import ( + "strings" +) + +// Windows uses a front slash for both short and long options. Also it uses +// a colon for name/argument delimter. +const ( + defaultShortOptDelimiter = '/' + defaultLongOptDelimiter = "/" + defaultNameArgDelimiter = ':' +) + +func argumentStartsOption(arg string) bool { + return len(arg) > 0 && (arg[0] == '-' || arg[0] == '/') +} + +func argumentIsOption(arg string) bool { + // Windows-style options allow front slash for the option + // delimiter. + if len(arg) > 1 && arg[0] == '/' { + return true + } + + if len(arg) > 1 && arg[0] == '-' && arg[1] != '-' { + return true + } + + if len(arg) > 2 && arg[0] == '-' && arg[1] == '-' && arg[2] != '-' { + return true + } + + return false +} + +// stripOptionPrefix returns the option without the prefix and whether or +// not the option is a long option or not. +func stripOptionPrefix(optname string) (prefix string, name string, islong bool) { + // Determine if the argument is a long option or not. Windows + // typically supports both long and short options with a single + // front slash as the option delimiter, so handle this situation + // nicely. + possplit := 0 + + if strings.HasPrefix(optname, "--") { + possplit = 2 + islong = true + } else if strings.HasPrefix(optname, "-") { + possplit = 1 + islong = false + } else if strings.HasPrefix(optname, "/") { + possplit = 1 + islong = len(optname) > 2 + } + + return optname[:possplit], optname[possplit:], islong +} + +// splitOption attempts to split the passed option into a name and an argument. +// When there is no argument specified, nil will be returned for it. +func splitOption(prefix string, option string, islong bool) (string, string, *string) { + if len(option) == 0 { + return option, "", nil + } + + // Windows typically uses a colon for the option name and argument + // delimiter while POSIX typically uses an equals. Support both styles, + // but don't allow the two to be mixed. That is to say /foo:bar and + // --foo=bar are acceptable, but /foo=bar and --foo:bar are not. + var pos int + var sp string + + if prefix == "/" { + sp = ":" + pos = strings.Index(option, sp) + } else if len(prefix) > 0 { + sp = "=" + pos = strings.Index(option, sp) + } + + if (islong && pos >= 0) || (!islong && pos == 1) { + rest := option[pos+1:] + return option[:pos], sp, &rest + } + + return option, "", nil +} + +// addHelpGroup adds a new group that contains default help parameters. +func (c *Command) addHelpGroup(showHelp func() error) *Group { + // Windows CLI applications typically use /? for help, so make both + // that available as well as the POSIX style h and help. + var help struct { + ShowHelpWindows func() error `short:"?" description:"Show this help message"` + ShowHelpPosix func() error `short:"h" long:"help" description:"Show this help message"` + } + + help.ShowHelpWindows = showHelp + help.ShowHelpPosix = showHelp + + ret, _ := c.AddGroup("Help Options", "", &help) + ret.isBuiltinHelp = true + + return ret +} diff --git a/vendor/github.com/jessevdk/go-flags/parser.go b/vendor/github.com/jessevdk/go-flags/parser.go new file mode 100644 index 00000000..0a7922a0 --- /dev/null +++ b/vendor/github.com/jessevdk/go-flags/parser.go @@ -0,0 +1,700 @@ +// Copyright 2012 Jesse van den Kieboom. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package flags + +import ( + "bytes" + "fmt" + "os" + "path" + "sort" + "strings" + "unicode/utf8" +) + +// A Parser provides command line option parsing. It can contain several +// option groups each with their own set of options. +type Parser struct { + // Embedded, see Command for more information + *Command + + // A usage string to be displayed in the help message. + Usage string + + // Option flags changing the behavior of the parser. + Options Options + + // NamespaceDelimiter separates group namespaces and option long names + NamespaceDelimiter string + + // UnknownOptionsHandler is a function which gets called when the parser + // encounters an unknown option. The function receives the unknown option + // name, a SplitArgument which specifies its value if set with an argument + // separator, and the remaining command line arguments. + // It should return a new list of remaining arguments to continue parsing, + // or an error to indicate a parse failure. + UnknownOptionHandler func(option string, arg SplitArgument, args []string) ([]string, error) + + // CompletionHandler is a function gets called to handle the completion of + // items. By default, the items are printed and the application is exited. + // You can override this default behavior by specifying a custom CompletionHandler. + CompletionHandler func(items []Completion) + + // CommandHandler is a function that gets called to handle execution of a + // command. By default, the command will simply be executed. This can be + // overridden to perform certain actions (such as applying global flags) + // just before the command is executed. Note that if you override the + // handler it is your responsibility to call the command.Execute function. + // + // The command passed into CommandHandler may be nil in case there is no + // command to be executed when parsing has finished. + CommandHandler func(command Commander, args []string) error + + internalError error +} + +// SplitArgument represents the argument value of an option that was passed using +// an argument separator. +type SplitArgument interface { + // String returns the option's value as a string, and a boolean indicating + // if the option was present. + Value() (string, bool) +} + +type strArgument struct { + value *string +} + +func (s strArgument) Value() (string, bool) { + if s.value == nil { + return "", false + } + + return *s.value, true +} + +// Options provides parser options that change the behavior of the option +// parser. +type Options uint + +const ( + // None indicates no options. + None Options = 0 + + // HelpFlag adds a default Help Options group to the parser containing + // -h and --help options. When either -h or --help is specified on the + // command line, the parser will return the special error of type + // ErrHelp. When PrintErrors is also specified, then the help message + // will also be automatically printed to os.Stdout. + HelpFlag = 1 << iota + + // PassDoubleDash passes all arguments after a double dash, --, as + // remaining command line arguments (i.e. they will not be parsed for + // flags). + PassDoubleDash + + // IgnoreUnknown ignores any unknown options and passes them as + // remaining command line arguments instead of generating an error. + IgnoreUnknown + + // PrintErrors prints any errors which occurred during parsing to + // os.Stderr. In the special case of ErrHelp, the message will be printed + // to os.Stdout. + PrintErrors + + // PassAfterNonOption passes all arguments after the first non option + // as remaining command line arguments. This is equivalent to strict + // POSIX processing. + PassAfterNonOption + + // Default is a convenient default set of options which should cover + // most of the uses of the flags package. + Default = HelpFlag | PrintErrors | PassDoubleDash +) + +type parseState struct { + arg string + args []string + retargs []string + positional []*Arg + err error + + command *Command + lookup lookup +} + +// Parse is a convenience function to parse command line options with default +// settings. The provided data is a pointer to a struct representing the +// default option group (named "Application Options"). For more control, use +// flags.NewParser. +func Parse(data interface{}) ([]string, error) { + return NewParser(data, Default).Parse() +} + +// ParseArgs is a convenience function to parse command line options with default +// settings. The provided data is a pointer to a struct representing the +// default option group (named "Application Options"). The args argument is +// the list of command line arguments to parse. If you just want to parse the +// default program command line arguments (i.e. os.Args), then use flags.Parse +// instead. For more control, use flags.NewParser. +func ParseArgs(data interface{}, args []string) ([]string, error) { + return NewParser(data, Default).ParseArgs(args) +} + +// NewParser creates a new parser. It uses os.Args[0] as the application +// name and then calls Parser.NewNamedParser (see Parser.NewNamedParser for +// more details). The provided data is a pointer to a struct representing the +// default option group (named "Application Options"), or nil if the default +// group should not be added. The options parameter specifies a set of options +// for the parser. +func NewParser(data interface{}, options Options) *Parser { + p := NewNamedParser(path.Base(os.Args[0]), options) + + if data != nil { + g, err := p.AddGroup("Application Options", "", data) + + if err == nil { + g.parent = p + } + + p.internalError = err + } + + return p +} + +// NewNamedParser creates a new parser. The appname is used to display the +// executable name in the built-in help message. Option groups and commands can +// be added to this parser by using AddGroup and AddCommand. +func NewNamedParser(appname string, options Options) *Parser { + p := &Parser{ + Command: newCommand(appname, "", "", nil), + Options: options, + NamespaceDelimiter: ".", + } + + p.Command.parent = p + + return p +} + +// Parse parses the command line arguments from os.Args using Parser.ParseArgs. +// For more detailed information see ParseArgs. +func (p *Parser) Parse() ([]string, error) { + return p.ParseArgs(os.Args[1:]) +} + +// ParseArgs parses the command line arguments according to the option groups that +// were added to the parser. On successful parsing of the arguments, the +// remaining, non-option, arguments (if any) are returned. The returned error +// indicates a parsing error and can be used with PrintError to display +// contextual information on where the error occurred exactly. +// +// When the common help group has been added (AddHelp) and either -h or --help +// was specified in the command line arguments, a help message will be +// automatically printed if the PrintErrors option is enabled. +// Furthermore, the special error type ErrHelp is returned. +// It is up to the caller to exit the program if so desired. +func (p *Parser) ParseArgs(args []string) ([]string, error) { + if p.internalError != nil { + return nil, p.internalError + } + + p.eachOption(func(c *Command, g *Group, option *Option) { + option.isSet = false + option.isSetDefault = false + option.updateDefaultLiteral() + }) + + // Add built-in help group to all commands if necessary + if (p.Options & HelpFlag) != None { + p.addHelpGroups(p.showBuiltinHelp) + } + + compval := os.Getenv("GO_FLAGS_COMPLETION") + + if len(compval) != 0 { + comp := &completion{parser: p} + items := comp.complete(args) + + if p.CompletionHandler != nil { + p.CompletionHandler(items) + } else { + comp.print(items, compval == "verbose") + os.Exit(0) + } + + return nil, nil + } + + s := &parseState{ + args: args, + retargs: make([]string, 0, len(args)), + } + + p.fillParseState(s) + + for !s.eof() { + arg := s.pop() + + // When PassDoubleDash is set and we encounter a --, then + // simply append all the rest as arguments and break out + if (p.Options&PassDoubleDash) != None && arg == "--" { + s.addArgs(s.args...) + break + } + + if !argumentIsOption(arg) { + // Note: this also sets s.err, so we can just check for + // nil here and use s.err later + if p.parseNonOption(s) != nil { + break + } + + continue + } + + var err error + + prefix, optname, islong := stripOptionPrefix(arg) + optname, _, argument := splitOption(prefix, optname, islong) + + if islong { + err = p.parseLong(s, optname, argument) + } else { + err = p.parseShort(s, optname, argument) + } + + if err != nil { + ignoreUnknown := (p.Options & IgnoreUnknown) != None + parseErr := wrapError(err) + + if parseErr.Type != ErrUnknownFlag || (!ignoreUnknown && p.UnknownOptionHandler == nil) { + s.err = parseErr + break + } + + if ignoreUnknown { + s.addArgs(arg) + } else if p.UnknownOptionHandler != nil { + modifiedArgs, err := p.UnknownOptionHandler(optname, strArgument{argument}, s.args) + + if err != nil { + s.err = err + break + } + + s.args = modifiedArgs + } + } + } + + if s.err == nil { + p.eachOption(func(c *Command, g *Group, option *Option) { + if option.preventDefault { + return + } + + option.clearDefault() + }) + + s.checkRequired(p) + } + + var reterr error + + if s.err != nil { + reterr = s.err + } else if len(s.command.commands) != 0 && !s.command.SubcommandsOptional { + reterr = s.estimateCommand() + } else if cmd, ok := s.command.data.(Commander); ok { + if p.CommandHandler != nil { + reterr = p.CommandHandler(cmd, s.retargs) + } else { + reterr = cmd.Execute(s.retargs) + } + } else if p.CommandHandler != nil { + reterr = p.CommandHandler(nil, s.retargs) + } + + if reterr != nil { + var retargs []string + + if ourErr, ok := reterr.(*Error); !ok || ourErr.Type != ErrHelp { + retargs = append([]string{s.arg}, s.args...) + } else { + retargs = s.args + } + + return retargs, p.printError(reterr) + } + + return s.retargs, nil +} + +func (p *parseState) eof() bool { + return len(p.args) == 0 +} + +func (p *parseState) pop() string { + if p.eof() { + return "" + } + + p.arg = p.args[0] + p.args = p.args[1:] + + return p.arg +} + +func (p *parseState) peek() string { + if p.eof() { + return "" + } + + return p.args[0] +} + +func (p *parseState) checkRequired(parser *Parser) error { + c := parser.Command + + var required []*Option + + for c != nil { + c.eachGroup(func(g *Group) { + for _, option := range g.options { + if !option.isSet && option.Required { + required = append(required, option) + } + } + }) + + c = c.Active + } + + if len(required) == 0 { + if len(p.positional) > 0 { + var reqnames []string + + for _, arg := range p.positional { + argRequired := (!arg.isRemaining() && p.command.ArgsRequired) || arg.Required != -1 || arg.RequiredMaximum != -1 + + if !argRequired { + continue + } + + if arg.isRemaining() { + if arg.value.Len() < arg.Required { + var arguments string + + if arg.Required > 1 { + arguments = "arguments, but got only " + fmt.Sprintf("%d", arg.value.Len()) + } else { + arguments = "argument" + } + + reqnames = append(reqnames, "`"+arg.Name+" (at least "+fmt.Sprintf("%d", arg.Required)+" "+arguments+")`") + } else if arg.RequiredMaximum != -1 && arg.value.Len() > arg.RequiredMaximum { + if arg.RequiredMaximum == 0 { + reqnames = append(reqnames, "`"+arg.Name+" (zero arguments)`") + } else { + var arguments string + + if arg.RequiredMaximum > 1 { + arguments = "arguments, but got " + fmt.Sprintf("%d", arg.value.Len()) + } else { + arguments = "argument" + } + + reqnames = append(reqnames, "`"+arg.Name+" (at most "+fmt.Sprintf("%d", arg.RequiredMaximum)+" "+arguments+")`") + } + } + } else { + reqnames = append(reqnames, "`"+arg.Name+"`") + } + } + + if len(reqnames) == 0 { + return nil + } + + var msg string + + if len(reqnames) == 1 { + msg = fmt.Sprintf("the required argument %s was not provided", reqnames[0]) + } else { + msg = fmt.Sprintf("the required arguments %s and %s were not provided", + strings.Join(reqnames[:len(reqnames)-1], ", "), reqnames[len(reqnames)-1]) + } + + p.err = newError(ErrRequired, msg) + return p.err + } + + return nil + } + + names := make([]string, 0, len(required)) + + for _, k := range required { + names = append(names, "`"+k.String()+"'") + } + + sort.Strings(names) + + var msg string + + if len(names) == 1 { + msg = fmt.Sprintf("the required flag %s was not specified", names[0]) + } else { + msg = fmt.Sprintf("the required flags %s and %s were not specified", + strings.Join(names[:len(names)-1], ", "), names[len(names)-1]) + } + + p.err = newError(ErrRequired, msg) + return p.err +} + +func (p *parseState) estimateCommand() error { + commands := p.command.sortedVisibleCommands() + cmdnames := make([]string, len(commands)) + + for i, v := range commands { + cmdnames[i] = v.Name + } + + var msg string + var errtype ErrorType + + if len(p.retargs) != 0 { + c, l := closestChoice(p.retargs[0], cmdnames) + msg = fmt.Sprintf("Unknown command `%s'", p.retargs[0]) + errtype = ErrUnknownCommand + + if float32(l)/float32(len(c)) < 0.5 { + msg = fmt.Sprintf("%s, did you mean `%s'?", msg, c) + } else if len(cmdnames) == 1 { + msg = fmt.Sprintf("%s. You should use the %s command", + msg, + cmdnames[0]) + } else if len(cmdnames) > 1 { + msg = fmt.Sprintf("%s. Please specify one command of: %s or %s", + msg, + strings.Join(cmdnames[:len(cmdnames)-1], ", "), + cmdnames[len(cmdnames)-1]) + } + } else { + errtype = ErrCommandRequired + + if len(cmdnames) == 1 { + msg = fmt.Sprintf("Please specify the %s command", cmdnames[0]) + } else if len(cmdnames) > 1 { + msg = fmt.Sprintf("Please specify one command of: %s or %s", + strings.Join(cmdnames[:len(cmdnames)-1], ", "), + cmdnames[len(cmdnames)-1]) + } + } + + return newError(errtype, msg) +} + +func (p *Parser) parseOption(s *parseState, name string, option *Option, canarg bool, argument *string) (err error) { + if !option.canArgument() { + if argument != nil { + return newErrorf(ErrNoArgumentForBool, "bool flag `%s' cannot have an argument", option) + } + + err = option.set(nil) + } else if argument != nil || (canarg && !s.eof()) { + var arg string + + if argument != nil { + arg = *argument + } else { + arg = s.pop() + + if argumentIsOption(arg) && !(option.isSignedNumber() && len(arg) > 1 && arg[0] == '-' && arg[1] >= '0' && arg[1] <= '9') { + return newErrorf(ErrExpectedArgument, "expected argument for flag `%s', but got option `%s'", option, arg) + } else if p.Options&PassDoubleDash != 0 && arg == "--" { + return newErrorf(ErrExpectedArgument, "expected argument for flag `%s', but got double dash `--'", option) + } + } + + if option.tag.Get("unquote") != "false" { + arg, err = unquoteIfPossible(arg) + } + + if err == nil { + err = option.set(&arg) + } + } else if option.OptionalArgument { + option.empty() + + for _, v := range option.OptionalValue { + err = option.set(&v) + + if err != nil { + break + } + } + } else { + err = newErrorf(ErrExpectedArgument, "expected argument for flag `%s'", option) + } + + if err != nil { + if _, ok := err.(*Error); !ok { + err = newErrorf(ErrMarshal, "invalid argument for flag `%s' (expected %s): %s", + option, + option.value.Type(), + err.Error()) + } + } + + return err +} + +func (p *Parser) parseLong(s *parseState, name string, argument *string) error { + if option := s.lookup.longNames[name]; option != nil { + // Only long options that are required can consume an argument + // from the argument list + canarg := !option.OptionalArgument + + return p.parseOption(s, name, option, canarg, argument) + } + + return newErrorf(ErrUnknownFlag, "unknown flag `%s'", name) +} + +func (p *Parser) splitShortConcatArg(s *parseState, optname string) (string, *string) { + c, n := utf8.DecodeRuneInString(optname) + + if n == len(optname) { + return optname, nil + } + + first := string(c) + + if option := s.lookup.shortNames[first]; option != nil && option.canArgument() { + arg := optname[n:] + return first, &arg + } + + return optname, nil +} + +func (p *Parser) parseShort(s *parseState, optname string, argument *string) error { + if argument == nil { + optname, argument = p.splitShortConcatArg(s, optname) + } + + for i, c := range optname { + shortname := string(c) + + if option := s.lookup.shortNames[shortname]; option != nil { + // Only the last short argument can consume an argument from + // the arguments list, and only if it's non optional + canarg := (i+utf8.RuneLen(c) == len(optname)) && !option.OptionalArgument + + if err := p.parseOption(s, shortname, option, canarg, argument); err != nil { + return err + } + } else { + return newErrorf(ErrUnknownFlag, "unknown flag `%s'", shortname) + } + + // Only the first option can have a concatted argument, so just + // clear argument here + argument = nil + } + + return nil +} + +func (p *parseState) addArgs(args ...string) error { + for len(p.positional) > 0 && len(args) > 0 { + arg := p.positional[0] + + if err := convert(args[0], arg.value, arg.tag); err != nil { + p.err = err + return err + } + + if !arg.isRemaining() { + p.positional = p.positional[1:] + } + + args = args[1:] + } + + p.retargs = append(p.retargs, args...) + return nil +} + +func (p *Parser) parseNonOption(s *parseState) error { + if len(s.positional) > 0 { + return s.addArgs(s.arg) + } + + if len(s.command.commands) > 0 && len(s.retargs) == 0 { + if cmd := s.lookup.commands[s.arg]; cmd != nil { + s.command.Active = cmd + cmd.fillParseState(s) + + return nil + } else if !s.command.SubcommandsOptional { + s.addArgs(s.arg) + return newErrorf(ErrUnknownCommand, "Unknown command `%s'", s.arg) + } + } + + if (p.Options & PassAfterNonOption) != None { + // If PassAfterNonOption is set then all remaining arguments + // are considered positional + if err := s.addArgs(s.arg); err != nil { + return err + } + + if err := s.addArgs(s.args...); err != nil { + return err + } + + s.args = []string{} + } else { + return s.addArgs(s.arg) + } + + return nil +} + +func (p *Parser) showBuiltinHelp() error { + var b bytes.Buffer + + p.WriteHelp(&b) + return newError(ErrHelp, b.String()) +} + +func (p *Parser) printError(err error) error { + if err != nil && (p.Options&PrintErrors) != None { + flagsErr, ok := err.(*Error) + + if ok && flagsErr.Type == ErrHelp { + fmt.Fprintln(os.Stdout, err) + } else { + fmt.Fprintln(os.Stderr, err) + } + } + + return err +} + +func (p *Parser) clearIsSet() { + p.eachCommand(func(c *Command) { + c.eachGroup(func(g *Group) { + for _, option := range g.options { + option.isSet = false + } + }) + }, true) +} diff --git a/vendor/github.com/jessevdk/go-flags/termsize.go b/vendor/github.com/jessevdk/go-flags/termsize.go new file mode 100644 index 00000000..1ca6a850 --- /dev/null +++ b/vendor/github.com/jessevdk/go-flags/termsize.go @@ -0,0 +1,28 @@ +// +build !windows,!plan9,!solaris,!appengine + +package flags + +import ( + "syscall" + "unsafe" +) + +type winsize struct { + row, col uint16 + xpixel, ypixel uint16 +} + +func getTerminalColumns() int { + ws := winsize{} + + if tIOCGWINSZ != 0 { + syscall.Syscall(syscall.SYS_IOCTL, + uintptr(0), + uintptr(tIOCGWINSZ), + uintptr(unsafe.Pointer(&ws))) + + return int(ws.col) + } + + return 80 +} diff --git a/vendor/github.com/jessevdk/go-flags/termsize_nosysioctl.go b/vendor/github.com/jessevdk/go-flags/termsize_nosysioctl.go new file mode 100644 index 00000000..3d5385b0 --- /dev/null +++ b/vendor/github.com/jessevdk/go-flags/termsize_nosysioctl.go @@ -0,0 +1,7 @@ +// +build windows plan9 solaris appengine + +package flags + +func getTerminalColumns() int { + return 80 +} diff --git a/vendor/github.com/jessevdk/go-flags/tiocgwinsz_bsdish.go b/vendor/github.com/jessevdk/go-flags/tiocgwinsz_bsdish.go new file mode 100644 index 00000000..fcc11860 --- /dev/null +++ b/vendor/github.com/jessevdk/go-flags/tiocgwinsz_bsdish.go @@ -0,0 +1,7 @@ +// +build darwin freebsd netbsd openbsd + +package flags + +const ( + tIOCGWINSZ = 0x40087468 +) diff --git a/vendor/github.com/jessevdk/go-flags/tiocgwinsz_linux.go b/vendor/github.com/jessevdk/go-flags/tiocgwinsz_linux.go new file mode 100644 index 00000000..e3975e28 --- /dev/null +++ b/vendor/github.com/jessevdk/go-flags/tiocgwinsz_linux.go @@ -0,0 +1,7 @@ +// +build linux + +package flags + +const ( + tIOCGWINSZ = 0x5413 +) diff --git a/vendor/github.com/jessevdk/go-flags/tiocgwinsz_other.go b/vendor/github.com/jessevdk/go-flags/tiocgwinsz_other.go new file mode 100644 index 00000000..30821515 --- /dev/null +++ b/vendor/github.com/jessevdk/go-flags/tiocgwinsz_other.go @@ -0,0 +1,7 @@ +// +build !darwin,!freebsd,!netbsd,!openbsd,!linux + +package flags + +const ( + tIOCGWINSZ = 0 +) diff --git a/vendor/github.com/lucasb-eyer/go-colorful/.gitignore b/vendor/github.com/lucasb-eyer/go-colorful/.gitignore new file mode 100644 index 00000000..47fda8ee --- /dev/null +++ b/vendor/github.com/lucasb-eyer/go-colorful/.gitignore @@ -0,0 +1,28 @@ +# Compiled Object files, Static and Dynamic libs (Shared Objects) +*.o +*.a +*.so + +# Folders +_obj +_test + +# Vim swap files +.*.sw? + +# Architecture specific extensions/prefixes +*.[568vq] +[568vq].out + +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* + +_testmain.go + +*.exe + +# Code coverage stuff +coverage.out diff --git a/vendor/github.com/lucasb-eyer/go-colorful/.travis.yml b/vendor/github.com/lucasb-eyer/go-colorful/.travis.yml new file mode 100644 index 00000000..ca5aed4d --- /dev/null +++ b/vendor/github.com/lucasb-eyer/go-colorful/.travis.yml @@ -0,0 +1,8 @@ +language: go +install: + - go get golang.org/x/tools/cmd/cover + - go get gopkg.in/DATA-DOG/go-sqlmock.v1 + - go get github.com/mattn/goveralls +script: + - go test -v -covermode=count -coverprofile=coverage.out + - if [[ "$TRAVIS_PULL_REQUEST" = "false" ]]; then $HOME/gopath/bin/goveralls -coverprofile=coverage.out -service=travis-ci -repotoken $COVERALLS_TOKEN; fi diff --git a/vendor/github.com/lucasb-eyer/go-colorful/LICENSE b/vendor/github.com/lucasb-eyer/go-colorful/LICENSE new file mode 100644 index 00000000..4e402a00 --- /dev/null +++ b/vendor/github.com/lucasb-eyer/go-colorful/LICENSE @@ -0,0 +1,7 @@ +Copyright (c) 2013 Lucas Beyer + +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/lucasb-eyer/go-colorful/README.md b/vendor/github.com/lucasb-eyer/go-colorful/README.md new file mode 100644 index 00000000..8c89c382 --- /dev/null +++ b/vendor/github.com/lucasb-eyer/go-colorful/README.md @@ -0,0 +1,488 @@ +go-colorful +=========== +A library for playing with colors in go (golang). + +[![Build Status](https://travis-ci.org/lucasb-eyer/go-colorful.svg?branch=master)](https://travis-ci.org/lucasb-eyer/go-colorful) +[![Coverage Status](https://coveralls.io/repos/github/lucasb-eyer/go-colorful/badge.svg?branch=master)](https://coveralls.io/github/lucasb-eyer/go-colorful?branch=master) + +Why? +==== +I love games. I make games. I love detail and I get lost in detail. +One such detail popped up during the development of [Memory Which Does Not Suck](https://github.com/lucasb-eyer/mwdns/), +when we wanted the server to assign the players random colors. Sometimes +two players got very similar colors, which bugged me. The very same evening, +[I want hue](http://tools.medialab.sciences-po.fr/iwanthue/) was the top post +on HackerNews' frontpage and showed me how to Do It Right™. Last but not +least, there was no library for handling color spaces available in go. Colorful +does just that and implements Go's `color.Color` interface. + +What? +===== +Go-Colorful stores colors in RGB and provides methods from converting these to various color-spaces. Currently supported colorspaces are: + +- **RGB:** All three of Red, Green and Blue in [0..1]. +- **HSL:** Hue in [0..360], Saturation and Luminance in [0..1]. For legacy reasons; please forget that it exists. +- **HSV:** Hue in [0..360], Saturation and Value in [0..1]. You're better off using HCL, see below. +- **Hex RGB:** The "internet" color format, as in #FF00FF. +- **Linear RGB:** See [gamma correct rendering](http://www.sjbrown.co.uk/2004/05/14/gamma-correct-rendering/). +- **CIE-XYZ:** CIE's standard color space, almost in [0..1]. +- **CIE-xyY:** encodes chromacity in x and y and luminance in Y, all in [0..1] +- **CIE-L\*a\*b\*:** A *perceptually uniform* color space, i.e. distances are meaningful. L\* in [0..1] and a\*, b\* almost in [-1..1]. +- **CIE-L\*u\*v\*:** Very similar to CIE-L\*a\*b\*, there is [no consensus](http://en.wikipedia.org/wiki/CIELUV#Historical_background) on which one is "better". +- **CIE-L\*C\*h° (HCL):** This is generally the [most useful](http://vis4.net/blog/posts/avoid-equidistant-hsv-colors/) one; CIE-L\*a\*b\* space in polar coordinates, i.e. a *better* HSV. H° is in [0..360], C\* almost in [-1..1] and L\* as in CIE-L\*a\*b\*. + +For the colorspaces where it makes sense (XYZ, Lab, Luv, HCl), the +[D65](http://en.wikipedia.org/wiki/Illuminant_D65) is used as reference white +by default but methods for using your own reference white are provided. + +A coordinate being *almost in* a range means that generally it is, but for very +bright colors and depending on the reference white, it might overflow this +range slightly. For example, C\* of #0000ff is 1.338. + +Unit-tests are provided. + +Nice, but what's it useful for? +------------------------------- + +- Converting color spaces. Some people like to do that. +- Blending (interpolating) between colors in a "natural" look by using the right colorspace. +- Generating random colors under some constraints (e.g. colors of the same shade, or shades of one color.) +- Generating gorgeous random palettes with distinct colors of a same temperature. + +What not (yet)? +=============== +There are a few features which are currently missing and might be useful. +I just haven't implemented them yet because I didn't have the need for it. +Pull requests welcome. + +- Sorting colors (potentially using above mentioned distances) + +So which colorspace should I use? +================================= +It depends on what you want to do. I think the folks from *I want hue* are +on-spot when they say that RGB fits to how *screens produce* color, CIE L\*a\*b\* +fits how *humans perceive* color and HCL fits how *humans think* colors. + +Whenever you'd use HSV, rather go for CIE-L\*C\*h°. for fixed lightness L\* and +chroma C\* values, the hue angle h° rotates through colors of the same +perceived brightness and intensity. + +How? +==== + +### Installing +Installing the library is as easy as + +```bash +$ go get github.com/lucasb-eyer/go-colorful +``` + +The package can then be used through an + +```go +import "github.com/lucasb-eyer/go-colorful" +``` + +### Basic usage + +Create a beautiful blue color using different source space: + +```go +// Any of the following should be the same +c := colorful.Color{0.313725, 0.478431, 0.721569} +c, err := colorful.Hex("#517AB8") +if err != nil{ + log.Fatal(err) +} +c = colorful.Hsv(216.0, 0.56, 0.722) +c = colorful.Xyz(0.189165, 0.190837, 0.480248) +c = colorful.Xyy(0.219895, 0.221839, 0.190837) +c = colorful.Lab(0.507850, 0.040585,-0.370945) +c = colorful.Luv(0.507849,-0.194172,-0.567924) +c = colorful.Hcl(276.2440, 0.373160, 0.507849) +fmt.Printf("RGB values: %v, %v, %v", c.R, c.G, c.B) +``` + +And then converting this color back into various color spaces: + +```go +hex := c.Hex() +h, s, v := c.Hsv() +x, y, z := c.Xyz() +x, y, Y := c.Xyy() +l, a, b := c.Lab() +l, u, v := c.Luv() +h, c, l := c.Hcl() +``` + +Note that, because of Go's unfortunate choice of requiring an initial uppercase, +the name of the functions relating to the xyY space are just off. If you have +any good suggestion, please open an issue. (I don't consider XyY good.) + +### The `color.Color` interface +Because a `colorful.Color` implements Go's `color.Color` interface (found in the +`image/color` package), it can be used anywhere that expects a `color.Color`. + +Furthermore, you can convert anything that implements the `color.Color` interface +into a `colorful.Color` using the `MakeColor` function: + +```go +c, ok := colorful.MakeColor(color.Gray16{12345}) +``` + +**Caveat:** Be aware that this latter conversion (using `MakeColor`) hits a +corner-case when alpha is exactly zero. Because `color.Color` uses pre-multiplied +alpha colors, this means the RGB values are lost (set to 0) and it's impossible +to recover them. In such a case `MakeColor` will return `false` as its second value. + +### Comparing colors +In the RGB color space, the Euclidian distance between colors *doesn't* correspond +to visual/perceptual distance. This means that two pairs of colors which have the +same distance in RGB space can look much further apart. This is fixed by the +CIE-L\*a\*b\*, CIE-L\*u\*v\* and CIE-L\*C\*h° color spaces. +Thus you should only compare colors in any of these space. +(Note that the distance in CIE-L\*a\*b\* and CIE-L\*C\*h° are the same, since it's the same space but in cylindrical coordinates) + +![Color distance comparison](doc/colordist/colordist.png) + +The two colors shown on the top look much more different than the two shown on +the bottom. Still, in RGB space, their distance is the same. +Here is a little example program which shows the distances between the top two +and bottom two colors in RGB, CIE-L\*a\*b\* and CIE-L\*u\*v\* space. You can find it in `doc/colordist/colordist.go`. + +```go +package main + +import "fmt" +import "github.com/lucasb-eyer/go-colorful" + +func main() { + c1a := colorful.Color{150.0/255.0, 10.0/255.0, 150.0/255.0} + c1b := colorful.Color{ 53.0/255.0, 10.0/255.0, 150.0/255.0} + c2a := colorful.Color{10.0/255.0, 150.0/255.0, 50.0/255.0} + c2b := colorful.Color{99.9/255.0, 150.0/255.0, 10.0/255.0} + + fmt.Printf("DistanceRgb: c1: %v\tand c2: %v\n", c1a.DistanceRgb(c1b), c2a.DistanceRgb(c2b)) + fmt.Printf("DistanceLab: c1: %v\tand c2: %v\n", c1a.DistanceLab(c1b), c2a.DistanceLab(c2b)) + fmt.Printf("DistanceLuv: c1: %v\tand c2: %v\n", c1a.DistanceLuv(c1b), c2a.DistanceLuv(c2b)) + fmt.Printf("DistanceCIE76: c1: %v\tand c2: %v\n", c1a.DistanceCIE76(c1b), c2a.DistanceCIE76(c2b)) + fmt.Printf("DistanceCIE94: c1: %v\tand c2: %v\n", c1a.DistanceCIE94(c1b), c2a.DistanceCIE94(c2b)) +} +``` + +Running the above program shows that you should always prefer any of the CIE distances: + +```bash +$ go run colordist.go +DistanceRgb: c1: 0.3803921568627451 and c2: 0.3858713931171159 +DistanceLab: c1: 0.3204845831279805 and c2: 0.2439715175856528 +DistanceLuv: c1: 0.5134369614199698 and c2: 0.25686928398606323 +DistanceCIE76: c1: 0.3204845831279805 and c2: 0.2439715175856528 +DistanceCIE94: c1: 0.19799168128511327 and c2: 0.12207136371167401 +``` + +It also shows that `DistanceLab` is more formally known as `DistanceCIE76` and +has been superseded by the slightly more accurate, but much more expensive +`DistanceCIE94`. + +Note that `AlmostEqualRgb` is provided mainly for (unit-)testing purposes. Use +it only if you really know what you're doing. It will eat your cat. + +### Blending colors +Blending is highly connected to distance, since it basically "walks through" the +colorspace thus, if the colorspace maps distances well, the walk is "smooth". + +Colorful comes with blending functions in RGB, HSV and any of the LAB spaces. +Of course, you'd rather want to use the blending functions of the LAB spaces since +these spaces map distances well but, just in case, here is an example showing +you how the blendings (`#fdffcc` to `#242a42`) are done in the various spaces: + +![Blending colors in different spaces.](doc/colorblend/colorblend.png) + +What you see is that HSV is really bad: it adds some green, which is not present +in the original colors at all! RGB is much better, but it stays light a little +too long. LUV and LAB both hit the right lightness but LAB has a little more +color. HCL works in the same vein as HSV (both cylindrical interpolations) but +it does it right in that there is no green appearing and the lighthness changes +in a linear manner. + +While this seems all good, you need to know one thing: When interpolating in any +of the CIE color spaces, you might get invalid RGB colors! This is important if +the starting and ending colors are user-input or random. An example of where this +happens is when blending between `#eeef61` and `#1e3140`: + +![Invalid RGB colors may crop up when blending in CIE spaces.](doc/colorblend/invalid.png) + +You can test whether a color is a valid RGB color by calling the `IsValid` method +and indeed, calling IsValid will return false for the redish colors on the bottom. +One way to "fix" this is to get a valid color close to the invalid one by calling +`Clamped`, which always returns a nearby valid color. Doing this, we get the +following result, which is satisfactory: + +![Fixing invalid RGB colors by clamping them to the valid range.](doc/colorblend/clamped.png) + +The following is the code creating the above three images; it can be found in `doc/colorblend/colorblend.go` + +```go +package main + +import "fmt" +import "github.com/lucasb-eyer/go-colorful" +import "image" +import "image/draw" +import "image/png" +import "os" + +func main() { + blocks := 10 + blockw := 40 + img := image.NewRGBA(image.Rect(0,0,blocks*blockw,200)) + + c1, _ := colorful.Hex("#fdffcc") + c2, _ := colorful.Hex("#242a42") + + // Use these colors to get invalid RGB in the gradient. + //c1, _ := colorful.Hex("#EEEF61") + //c2, _ := colorful.Hex("#1E3140") + + for i := 0 ; i < blocks ; i++ { + draw.Draw(img, image.Rect(i*blockw, 0,(i+1)*blockw, 40), &image.Uniform{c1.BlendHsv(c2, float64(i)/float64(blocks-1))}, image.ZP, draw.Src) + draw.Draw(img, image.Rect(i*blockw, 40,(i+1)*blockw, 80), &image.Uniform{c1.BlendLuv(c2, float64(i)/float64(blocks-1))}, image.ZP, draw.Src) + draw.Draw(img, image.Rect(i*blockw, 80,(i+1)*blockw,120), &image.Uniform{c1.BlendRgb(c2, float64(i)/float64(blocks-1))}, image.ZP, draw.Src) + draw.Draw(img, image.Rect(i*blockw,120,(i+1)*blockw,160), &image.Uniform{c1.BlendLab(c2, float64(i)/float64(blocks-1))}, image.ZP, draw.Src) + draw.Draw(img, image.Rect(i*blockw,160,(i+1)*blockw,200), &image.Uniform{c1.BlendHcl(c2, float64(i)/float64(blocks-1))}, image.ZP, draw.Src) + + // This can be used to "fix" invalid colors in the gradient. + //draw.Draw(img, image.Rect(i*blockw,160,(i+1)*blockw,200), &image.Uniform{c1.BlendHcl(c2, float64(i)/float64(blocks-1)).Clamped()}, image.ZP, draw.Src) + } + + toimg, err := os.Create("colorblend.png") + if err != nil { + fmt.Printf("Error: %v", err) + return + } + defer toimg.Close() + + png.Encode(toimg, img) +} +``` + +#### Generating color gradients +A very common reason to blend colors is creating gradients. There is an example +program in [doc/gradientgen.go](doc/gradientgen/gradientgen.go); it doesn't use any API +which hasn't been used in the previous example code, so I won't bother pasting +the code in here. Just look at that gorgeous gradient it generated in HCL space: + +!["Spectral" colorbrewer gradient in HCL space.](doc/gradientgen/gradientgen.png) + +### Getting random colors +It is sometimes necessary to generate random colors. You could simply do this +on your own by generating colors with random values. By restricting the random +values to a range smaller than [0..1] and using a space such as CIE-H\*C\*l° or +HSV, you can generate both random shades of a color or random colors of a +lightness: + +```go +random_blue := colorful.Hcl(180.0+rand.Float64()*50.0, 0.2+rand.Float64()*0.8, 0.3+rand.Float64()*0.7) +random_dark := colorful.Hcl(rand.Float64()*360.0, rand.Float64(), rand.Float64()*0.4) +random_light := colorful.Hcl(rand.Float64()*360.0, rand.Float64(), 0.6+rand.Float64()*0.4) +``` + +Since getting random "warm" and "happy" colors is quite a common task, there +are some helper functions: + +```go +colorful.WarmColor() +colorful.HappyColor() +colorful.FastWarmColor() +colorful.FastHappyColor() +``` + +The ones prefixed by `Fast` are faster but less coherent since they use the HSV +space as opposed to the regular ones which use CIE-L\*C\*h° space. The +following picture shows the warm colors in the top two rows and happy colors +in the bottom two rows. Within these, the first is the regular one and the +second is the fast one. + +![Warm, fast warm, happy and fast happy random colors, respectively.](doc/colorgens/colorgens.png) + +Don't forget to initialize the random seed! You can see the code used for +generating this picture in `doc/colorgens/colorgens.go`. + +### Getting random palettes +As soon as you need to generate more than one random color, you probably want +them to be distinguishible. Playing against an opponent which has almost the +same blue as I do is not fun. This is where random palettes can help. + +These palettes are generated using an algorithm which ensures that all colors +on the palette are as distinguishible as possible. Again, there is a `Fast` +method which works in HSV and is less perceptually uniform and a non-`Fast` +method which works in CIE spaces. For more theory on `SoftPalette`, check out +[I want hue](http://tools.medialab.sciences-po.fr/iwanthue/theory.php). Yet +again, there is a `Happy` and a `Warm` version, which do what you expect, but +now there is an additional `Soft` version, which is more configurable: you can +give a constraint on the color space in order to get colors within a certain *feel*. + +Let's start with the simple methods first, all they take is the amount of +colors to generate, which could, for example, be the player count. They return +an array of `colorful.Color` objects: + +```go +pal1, err1 := colorful.WarmPalette(10) +pal2 := colorful.FastWarmPalette(10) +pal3, err3 := colorful.HappyPalette(10) +pal4 := colorful.FastHappyPalette(10) +pal5, err5 := colorful.SoftPalette(10) +``` + +Note that the non-fast methods *may* fail if you ask for way too many colors. +Let's move on to the advanced one, namely `SoftPaletteEx`. Besides the color +count, this function takes a `SoftPaletteSettings` object as argument. The +interesting part here is its `CheckColor` member, which is a boolean function +taking three floating points as arguments: `l`, `a` and `b`. This function +should return `true` for colors which lie within the region you want and `false` +otherwise. The other members are `Iteration`, which should be within [5..100] +where higher means slower but more exact palette, and `ManySamples` which you +should set to `true` in case your `CheckColor` constraint rejects a large part +of the color space. + +For example, to create a palette of 10 brownish colors, you'd call it like this: + +```go +func isbrowny(l, a, b float64) bool { + h, c, L := colorful.LabToHcl(l, a, b) + return 10.0 < h && h < 50.0 && 0.1 < c && c < 0.5 && L < 0.5 +} +// Since the above function is pretty restrictive, we set ManySamples to true. +brownies := colorful.SoftPaletteEx(10, colorful.SoftPaletteSettings{isbrowny, 50, true}) +``` + +The following picture shows the palettes generated by all of these methods +(sourcecode in `doc/palettegens/palettegens.go`), in the order they were presented, i.e. +from top to bottom: `Warm`, `FastWarm`, `Happy`, `FastHappy`, `Soft`, +`SoftEx(isbrowny)`. All of them contain some randomness, so YMMV. + +![All example palettes](doc/palettegens/palettegens.png) + +### Sorting colors +TODO: Sort using dist fn. + +### Using linear RGB for computations +There are two methods for transforming RGB<->Linear RGB: a fast and almost precise one, +and a slow and precise one. + +```go +r, g, b := colorful.Hex("#FF0000").FastLinearRgb() +``` + +TODO: describe some more. + +### Want to use some other reference point? + +```go +c := colorful.LabWhiteRef(0.507850, 0.040585,-0.370945, colorful.D50) +l, a, b := c.LabWhiteRef(colorful.D50) +``` + +### Reading and writing colors from databases + +The type `HexColor` makes it easy to store colors as strings in a database. It +implements the [https://godoc.org/database/sql#Scanner](database/sql.Scanner) +and [database/sql/driver.Value](https://godoc.org/database/sql/driver.Value) +interfaces which provide automatic type conversion. + +Example: + +```go +var hc HexColor +_, err := db.QueryRow("SELECT '#ff0000';").Scan(&hc) +// hc == HexColor{R: 1, G: 0, B: 0}; err == nil +``` + +FAQ +=== + +### Q: I get all f!@#ed up values! Your library sucks! +A: You probably provided values in the wrong range. For example, RGB values are +expected to reside between 0 and 1, *not* between 0 and 255. Normalize your colors. + +### Q: Lab/Luv/HCl seem broken! Your library sucks! +They look like this: + + + +A: You're likely trying to generate and display colors that can't be represented by RGB, +and thus monitors. When you're trying to convert, say, `HCL(190.0, 1.0, 1.0).RGB255()`, +you're asking for RGB values of `(-2105.254 300.680 286.185)`, which clearly don't exist, +and the `RGB255` function just casts these numbers to `uint8`, creating wrap-around and +what looks like a completely broken gradient. What you want to do, is either use more +reasonable values of colors which actually exist in RGB, or just `Clamp()` the resulting +color to its nearest existing one, living with the consequences: +`HCL(190.0, 1.0, 1.0).Clamp().RGB255()`. It will look something like this: + + + +[Here's an issue going in-depth about this](https://github.com/lucasb-eyer/go-colorful/issues/14), +as well as [my answer](https://github.com/lucasb-eyer/go-colorful/issues/14#issuecomment-324205385), +both with code and pretty pictures. Also note that this was somewhat covered above in the +["Blending colors" section](https://github.com/lucasb-eyer/go-colorful#blending-colors). + +### Q: In a tight loop, conversion to Lab/Luv/HCl/... are slooooow! +A: Yes, they are. +This library aims for correctness, readability, and modularity; it wasn't written with speed in mind. +A large part of the slowness comes from these conversions going through `LinearRgb` which uses powers. +I implemented a fast approximation to `LinearRgb` called `FastLinearRgb` by using Taylor approximations. +The approximation is roughly 5x faster and precise up to roughly 0.5%, +the major caveat being that if the input values are outside the range 0-1, accuracy drops dramatically. +You can use these in your conversions as follows: + +```go +col := // Get your color somehow +l, a, b := XyzToLab(LinearRgbToXyz(col.LinearRgb())) +``` + +If you need faster versions of `Distance*` and `Blend*` that make use of this fast approximation, +feel free to implement them and open a pull-request, I'll happily accept. + +The derivation of these functions can be followed in [this Jupyter notebook](doc/LinearRGB Approximations.ipynb). +Here's the main figure showing the approximation quality: + +![approximation quality](doc/approx-quality.png) + +More speed could be gained by using SIMD instructions in many places. +You can also get more speed for specific conversions by approximating the full conversion function, +but that is outside the scope of this library. +Thanks to [@ZirconiumX](https://github.com/ZirconiumX) for starting this investigation, +see [issue #18](https://github.com/lucasb-eyer/go-colorful/issues/18) for details. + +### Q: Why would `MakeColor` ever fail!? +A: `MakeColor` fails when the alpha channel is zero. In that case, the +conversion is undefined. See [issue 21](https://github.com/lucasb-eyer/go-colorful/issues/21) +as well as the short caveat note in the ["The `color.Color` interface"](README.md#the-colorcolor-interface) +section above. + +Who? +==== + +This library has been developed by Lucas Beyer with contributions from +Bastien Dejean (@baskerville), Phil Kulak (@pkulak) and Christian Muehlhaeuser (@muesli). + +Release Notes +============= + +### Version 1.0 +- API Breaking change in `MakeColor`: instead of `panic`ing when alpha is zero, it now returns a secondary, boolean return value indicating success. See [the color.Color interface](https://github.com/lucasb-eyer/go-colorful#the-colorcolor-interface) section and [this FAQ entry](https://github.com/lucasb-eyer/go-colorful#q-why-would-makecolor-ever-fail) for details. + +### Version 0.9 +- Initial version number after having ignored versioning for a long time :) + +License: MIT +============ +Copyright (c) 2013 Lucas Beyer + +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/lucasb-eyer/go-colorful/colorgens.go b/vendor/github.com/lucasb-eyer/go-colorful/colorgens.go new file mode 100644 index 00000000..2e2e49e1 --- /dev/null +++ b/vendor/github.com/lucasb-eyer/go-colorful/colorgens.go @@ -0,0 +1,55 @@ +// Various ways to generate single random colors + +package colorful + +import ( + "math/rand" +) + +// Creates a random dark, "warm" color through a restricted HSV space. +func FastWarmColor() Color { + return Hsv( + rand.Float64()*360.0, + 0.5+rand.Float64()*0.3, + 0.3+rand.Float64()*0.3) +} + +// Creates a random dark, "warm" color through restricted HCL space. +// This is slower than FastWarmColor but will likely give you colors which have +// the same "warmness" if you run it many times. +func WarmColor() (c Color) { + for c = randomWarm(); !c.IsValid(); c = randomWarm() { + } + return +} + +func randomWarm() Color { + return Hcl( + rand.Float64()*360.0, + 0.1+rand.Float64()*0.3, + 0.2+rand.Float64()*0.3) +} + +// Creates a random bright, "pimpy" color through a restricted HSV space. +func FastHappyColor() Color { + return Hsv( + rand.Float64()*360.0, + 0.7+rand.Float64()*0.3, + 0.6+rand.Float64()*0.3) +} + +// Creates a random bright, "pimpy" color through restricted HCL space. +// This is slower than FastHappyColor but will likely give you colors which +// have the same "brightness" if you run it many times. +func HappyColor() (c Color) { + for c = randomPimp(); !c.IsValid(); c = randomPimp() { + } + return +} + +func randomPimp() Color { + return Hcl( + rand.Float64()*360.0, + 0.5+rand.Float64()*0.3, + 0.5+rand.Float64()*0.3) +} diff --git a/vendor/github.com/lucasb-eyer/go-colorful/colors.go b/vendor/github.com/lucasb-eyer/go-colorful/colors.go new file mode 100644 index 00000000..febf94c7 --- /dev/null +++ b/vendor/github.com/lucasb-eyer/go-colorful/colors.go @@ -0,0 +1,819 @@ +// The colorful package provides all kinds of functions for working with colors. +package colorful + +import ( + "fmt" + "image/color" + "math" +) + +// A color is stored internally using sRGB (standard RGB) values in the range 0-1 +type Color struct { + R, G, B float64 +} + +// Implement the Go color.Color interface. +func (col Color) RGBA() (r, g, b, a uint32) { + r = uint32(col.R*65535.0 + 0.5) + g = uint32(col.G*65535.0 + 0.5) + b = uint32(col.B*65535.0 + 0.5) + a = 0xFFFF + return +} + +// Constructs a colorful.Color from something implementing color.Color +func MakeColor(col color.Color) (Color, bool) { + r, g, b, a := col.RGBA() + if a == 0 { + return Color{0, 0, 0}, false + } + + // Since color.Color is alpha pre-multiplied, we need to divide the + // RGB values by alpha again in order to get back the original RGB. + r *= 0xffff + r /= a + g *= 0xffff + g /= a + b *= 0xffff + b /= a + + return Color{float64(r) / 65535.0, float64(g) / 65535.0, float64(b) / 65535.0}, true +} + +// Might come in handy sometimes to reduce boilerplate code. +func (col Color) RGB255() (r, g, b uint8) { + r = uint8(col.R*255.0 + 0.5) + g = uint8(col.G*255.0 + 0.5) + b = uint8(col.B*255.0 + 0.5) + return +} + +// This is the tolerance used when comparing colors using AlmostEqualRgb. +const Delta = 1.0 / 255.0 + +// This is the default reference white point. +var D65 = [3]float64{0.95047, 1.00000, 1.08883} + +// And another one. +var D50 = [3]float64{0.96422, 1.00000, 0.82521} + +// Checks whether the color exists in RGB space, i.e. all values are in [0..1] +func (c Color) IsValid() bool { + return 0.0 <= c.R && c.R <= 1.0 && + 0.0 <= c.G && c.G <= 1.0 && + 0.0 <= c.B && c.B <= 1.0 +} + +func clamp01(v float64) float64 { + return math.Max(0.0, math.Min(v, 1.0)) +} + +// Returns Clamps the color into valid range, clamping each value to [0..1] +// If the color is valid already, this is a no-op. +func (c Color) Clamped() Color { + return Color{clamp01(c.R), clamp01(c.G), clamp01(c.B)} +} + +func sq(v float64) float64 { + return v * v +} + +func cub(v float64) float64 { + return v * v * v +} + +// DistanceRgb computes the distance between two colors in RGB space. +// This is not a good measure! Rather do it in Lab space. +func (c1 Color) DistanceRgb(c2 Color) float64 { + return math.Sqrt(sq(c1.R-c2.R) + sq(c1.G-c2.G) + sq(c1.B-c2.B)) +} + +// Check for equality between colors within the tolerance Delta (1/255). +func (c1 Color) AlmostEqualRgb(c2 Color) bool { + return math.Abs(c1.R-c2.R)+ + math.Abs(c1.G-c2.G)+ + math.Abs(c1.B-c2.B) < 3.0*Delta +} + +// You don't really want to use this, do you? Go for BlendLab, BlendLuv or BlendHcl. +func (c1 Color) BlendRgb(c2 Color, t float64) Color { + return Color{c1.R + t*(c2.R-c1.R), + c1.G + t*(c2.G-c1.G), + c1.B + t*(c2.B-c1.B)} +} + +// Utility used by Hxx color-spaces for interpolating between two angles in [0,360]. +func interp_angle(a0, a1, t float64) float64 { + // Based on the answer here: http://stackoverflow.com/a/14498790/2366315 + // With potential proof that it works here: http://math.stackexchange.com/a/2144499 + delta := math.Mod(math.Mod(a1-a0, 360.0)+540, 360.0) - 180.0 + return math.Mod(a0+t*delta+360.0, 360.0) +} + +/// HSV /// +/////////// +// From http://en.wikipedia.org/wiki/HSL_and_HSV +// Note that h is in [0..360] and s,v in [0..1] + +// Hsv returns the Hue [0..360], Saturation and Value [0..1] of the color. +func (col Color) Hsv() (h, s, v float64) { + min := math.Min(math.Min(col.R, col.G), col.B) + v = math.Max(math.Max(col.R, col.G), col.B) + C := v - min + + s = 0.0 + if v != 0.0 { + s = C / v + } + + h = 0.0 // We use 0 instead of undefined as in wp. + if min != v { + if v == col.R { + h = math.Mod((col.G-col.B)/C, 6.0) + } + if v == col.G { + h = (col.B-col.R)/C + 2.0 + } + if v == col.B { + h = (col.R-col.G)/C + 4.0 + } + h *= 60.0 + if h < 0.0 { + h += 360.0 + } + } + return +} + +// Hsv creates a new Color given a Hue in [0..360], a Saturation and a Value in [0..1] +func Hsv(H, S, V float64) Color { + Hp := H / 60.0 + C := V * S + X := C * (1.0 - math.Abs(math.Mod(Hp, 2.0)-1.0)) + + m := V - C + r, g, b := 0.0, 0.0, 0.0 + + switch { + case 0.0 <= Hp && Hp < 1.0: + r = C + g = X + case 1.0 <= Hp && Hp < 2.0: + r = X + g = C + case 2.0 <= Hp && Hp < 3.0: + g = C + b = X + case 3.0 <= Hp && Hp < 4.0: + g = X + b = C + case 4.0 <= Hp && Hp < 5.0: + r = X + b = C + case 5.0 <= Hp && Hp < 6.0: + r = C + b = X + } + + return Color{m + r, m + g, m + b} +} + +// You don't really want to use this, do you? Go for BlendLab, BlendLuv or BlendHcl. +func (c1 Color) BlendHsv(c2 Color, t float64) Color { + h1, s1, v1 := c1.Hsv() + h2, s2, v2 := c2.Hsv() + + // We know that h are both in [0..360] + return Hsv(interp_angle(h1, h2, t), s1+t*(s2-s1), v1+t*(v2-v1)) +} + +/// HSL /// +/////////// + +// Hsl returns the Hue [0..360], Saturation [0..1], and Luminance (lightness) [0..1] of the color. +func (col Color) Hsl() (h, s, l float64) { + min := math.Min(math.Min(col.R, col.G), col.B) + max := math.Max(math.Max(col.R, col.G), col.B) + + l = (max + min) / 2 + + if min == max { + s = 0 + h = 0 + } else { + if l < 0.5 { + s = (max - min) / (max + min) + } else { + s = (max - min) / (2.0 - max - min) + } + + if max == col.R { + h = (col.G - col.B) / (max - min) + } else if max == col.G { + h = 2.0 + (col.B-col.R)/(max-min) + } else { + h = 4.0 + (col.R-col.G)/(max-min) + } + + h *= 60 + + if h < 0 { + h += 360 + } + } + + return +} + +// Hsl creates a new Color given a Hue in [0..360], a Saturation [0..1], and a Luminance (lightness) in [0..1] +func Hsl(h, s, l float64) Color { + if s == 0 { + return Color{l, l, l} + } + + var r, g, b float64 + var t1 float64 + var t2 float64 + var tr float64 + var tg float64 + var tb float64 + + if l < 0.5 { + t1 = l * (1.0 + s) + } else { + t1 = l + s - l*s + } + + t2 = 2*l - t1 + h = h / 360 + tr = h + 1.0/3.0 + tg = h + tb = h - 1.0/3.0 + + if tr < 0 { + tr++ + } + if tr > 1 { + tr-- + } + if tg < 0 { + tg++ + } + if tg > 1 { + tg-- + } + if tb < 0 { + tb++ + } + if tb > 1 { + tb-- + } + + // Red + if 6*tr < 1 { + r = t2 + (t1-t2)*6*tr + } else if 2*tr < 1 { + r = t1 + } else if 3*tr < 2 { + r = t2 + (t1-t2)*(2.0/3.0-tr)*6 + } else { + r = t2 + } + + // Green + if 6*tg < 1 { + g = t2 + (t1-t2)*6*tg + } else if 2*tg < 1 { + g = t1 + } else if 3*tg < 2 { + g = t2 + (t1-t2)*(2.0/3.0-tg)*6 + } else { + g = t2 + } + + // Blue + if 6*tb < 1 { + b = t2 + (t1-t2)*6*tb + } else if 2*tb < 1 { + b = t1 + } else if 3*tb < 2 { + b = t2 + (t1-t2)*(2.0/3.0-tb)*6 + } else { + b = t2 + } + + return Color{r, g, b} +} + +/// Hex /// +/////////// + +// Hex returns the hex "html" representation of the color, as in #ff0080. +func (col Color) Hex() string { + // Add 0.5 for rounding + return fmt.Sprintf("#%02x%02x%02x", uint8(col.R*255.0+0.5), uint8(col.G*255.0+0.5), uint8(col.B*255.0+0.5)) +} + +// Hex parses a "html" hex color-string, either in the 3 "#f0c" or 6 "#ff1034" digits form. +func Hex(scol string) (Color, error) { + format := "#%02x%02x%02x" + factor := 1.0 / 255.0 + if len(scol) == 4 { + format = "#%1x%1x%1x" + factor = 1.0 / 15.0 + } + + var r, g, b uint8 + n, err := fmt.Sscanf(scol, format, &r, &g, &b) + if err != nil { + return Color{}, err + } + if n != 3 { + return Color{}, fmt.Errorf("color: %v is not a hex-color", scol) + } + + return Color{float64(r) * factor, float64(g) * factor, float64(b) * factor}, nil +} + +/// Linear /// +////////////// +// http://www.sjbrown.co.uk/2004/05/14/gamma-correct-rendering/ +// http://www.brucelindbloom.com/Eqn_RGB_to_XYZ.html + +func linearize(v float64) float64 { + if v <= 0.04045 { + return v / 12.92 + } + return math.Pow((v+0.055)/1.055, 2.4) +} + +// LinearRgb converts the color into the linear RGB space (see http://www.sjbrown.co.uk/2004/05/14/gamma-correct-rendering/). +func (col Color) LinearRgb() (r, g, b float64) { + r = linearize(col.R) + g = linearize(col.G) + b = linearize(col.B) + return +} + +// A much faster and still quite precise linearization using a 6th-order Taylor approximation. +// See the accompanying Jupyter notebook for derivation of the constants. +func linearize_fast(v float64) float64 { + v1 := v - 0.5 + v2 := v1 * v1 + v3 := v2 * v1 + v4 := v2 * v2 + //v5 := v3*v2 + return -0.248750514614486 + 0.925583310193438*v + 1.16740237321695*v2 + 0.280457026598666*v3 - 0.0757991963780179*v4 //+ 0.0437040411548932*v5 +} + +// FastLinearRgb is much faster than and almost as accurate as LinearRgb. +// BUT it is important to NOTE that they only produce good results for valid colors r,g,b in [0,1]. +func (col Color) FastLinearRgb() (r, g, b float64) { + r = linearize_fast(col.R) + g = linearize_fast(col.G) + b = linearize_fast(col.B) + return +} + +func delinearize(v float64) float64 { + if v <= 0.0031308 { + return 12.92 * v + } + return 1.055*math.Pow(v, 1.0/2.4) - 0.055 +} + +// LinearRgb creates an sRGB color out of the given linear RGB color (see http://www.sjbrown.co.uk/2004/05/14/gamma-correct-rendering/). +func LinearRgb(r, g, b float64) Color { + return Color{delinearize(r), delinearize(g), delinearize(b)} +} + +func delinearize_fast(v float64) float64 { + // This function (fractional root) is much harder to linearize, so we need to split. + if v > 0.2 { + v1 := v - 0.6 + v2 := v1 * v1 + v3 := v2 * v1 + v4 := v2 * v2 + v5 := v3 * v2 + return 0.442430344268235 + 0.592178981271708*v - 0.287864782562636*v2 + 0.253214392068985*v3 - 0.272557158129811*v4 + 0.325554383321718*v5 + } else if v > 0.03 { + v1 := v - 0.115 + v2 := v1 * v1 + v3 := v2 * v1 + v4 := v2 * v2 + v5 := v3 * v2 + return 0.194915592891669 + 1.55227076330229*v - 3.93691860257828*v2 + 18.0679839248761*v3 - 101.468750302746*v4 + 632.341487393927*v5 + } else { + v1 := v - 0.015 + v2 := v1 * v1 + v3 := v2 * v1 + v4 := v2 * v2 + v5 := v3 * v2 + // You can clearly see from the involved constants that the low-end is highly nonlinear. + return 0.0519565234928877 + 5.09316778537561*v - 99.0338180489702*v2 + 3484.52322764895*v3 - 150028.083412663*v4 + 7168008.42971613*v5 + } +} + +// FastLinearRgb is much faster than and almost as accurate as LinearRgb. +// BUT it is important to NOTE that they only produce good results for valid inputs r,g,b in [0,1]. +func FastLinearRgb(r, g, b float64) Color { + return Color{delinearize_fast(r), delinearize_fast(g), delinearize_fast(b)} +} + +// XyzToLinearRgb converts from CIE XYZ-space to Linear RGB space. +func XyzToLinearRgb(x, y, z float64) (r, g, b float64) { + r = 3.2404542*x - 1.5371385*y - 0.4985314*z + g = -0.9692660*x + 1.8760108*y + 0.0415560*z + b = 0.0556434*x - 0.2040259*y + 1.0572252*z + return +} + +func LinearRgbToXyz(r, g, b float64) (x, y, z float64) { + x = 0.4124564*r + 0.3575761*g + 0.1804375*b + y = 0.2126729*r + 0.7151522*g + 0.0721750*b + z = 0.0193339*r + 0.1191920*g + 0.9503041*b + return +} + +/// XYZ /// +/////////// +// http://www.sjbrown.co.uk/2004/05/14/gamma-correct-rendering/ + +func (col Color) Xyz() (x, y, z float64) { + return LinearRgbToXyz(col.LinearRgb()) +} + +func Xyz(x, y, z float64) Color { + return LinearRgb(XyzToLinearRgb(x, y, z)) +} + +/// xyY /// +/////////// +// http://www.brucelindbloom.com/Eqn_XYZ_to_xyY.html + +// Well, the name is bad, since it's xyY but Golang needs me to start with a +// capital letter to make the method public. +func XyzToXyy(X, Y, Z float64) (x, y, Yout float64) { + return XyzToXyyWhiteRef(X, Y, Z, D65) +} + +func XyzToXyyWhiteRef(X, Y, Z float64, wref [3]float64) (x, y, Yout float64) { + Yout = Y + N := X + Y + Z + if math.Abs(N) < 1e-14 { + // When we have black, Bruce Lindbloom recommends to use + // the reference white's chromacity for x and y. + x = wref[0] / (wref[0] + wref[1] + wref[2]) + y = wref[1] / (wref[0] + wref[1] + wref[2]) + } else { + x = X / N + y = Y / N + } + return +} + +func XyyToXyz(x, y, Y float64) (X, Yout, Z float64) { + Yout = Y + + if -1e-14 < y && y < 1e-14 { + X = 0.0 + Z = 0.0 + } else { + X = Y / y * x + Z = Y / y * (1.0 - x - y) + } + + return +} + +// Converts the given color to CIE xyY space using D65 as reference white. +// (Note that the reference white is only used for black input.) +// x, y and Y are in [0..1] +func (col Color) Xyy() (x, y, Y float64) { + return XyzToXyy(col.Xyz()) +} + +// Converts the given color to CIE xyY space, taking into account +// a given reference white. (i.e. the monitor's white) +// (Note that the reference white is only used for black input.) +// x, y and Y are in [0..1] +func (col Color) XyyWhiteRef(wref [3]float64) (x, y, Y float64) { + X, Y2, Z := col.Xyz() + return XyzToXyyWhiteRef(X, Y2, Z, wref) +} + +// Generates a color by using data given in CIE xyY space. +// x, y and Y are in [0..1] +func Xyy(x, y, Y float64) Color { + return Xyz(XyyToXyz(x, y, Y)) +} + +/// L*a*b* /// +////////////// +// http://en.wikipedia.org/wiki/Lab_color_space#CIELAB-CIEXYZ_conversions +// For L*a*b*, we need to L*a*b*<->XYZ->RGB and the first one is device dependent. + +func lab_f(t float64) float64 { + if t > 6.0/29.0*6.0/29.0*6.0/29.0 { + return math.Cbrt(t) + } + return t/3.0*29.0/6.0*29.0/6.0 + 4.0/29.0 +} + +func XyzToLab(x, y, z float64) (l, a, b float64) { + // Use D65 white as reference point by default. + // http://www.fredmiranda.com/forum/topic/1035332 + // http://en.wikipedia.org/wiki/Standard_illuminant + return XyzToLabWhiteRef(x, y, z, D65) +} + +func XyzToLabWhiteRef(x, y, z float64, wref [3]float64) (l, a, b float64) { + fy := lab_f(y / wref[1]) + l = 1.16*fy - 0.16 + a = 5.0 * (lab_f(x/wref[0]) - fy) + b = 2.0 * (fy - lab_f(z/wref[2])) + return +} + +func lab_finv(t float64) float64 { + if t > 6.0/29.0 { + return t * t * t + } + return 3.0 * 6.0 / 29.0 * 6.0 / 29.0 * (t - 4.0/29.0) +} + +func LabToXyz(l, a, b float64) (x, y, z float64) { + // D65 white (see above). + return LabToXyzWhiteRef(l, a, b, D65) +} + +func LabToXyzWhiteRef(l, a, b float64, wref [3]float64) (x, y, z float64) { + l2 := (l + 0.16) / 1.16 + x = wref[0] * lab_finv(l2+a/5.0) + y = wref[1] * lab_finv(l2) + z = wref[2] * lab_finv(l2-b/2.0) + return +} + +// Converts the given color to CIE L*a*b* space using D65 as reference white. +func (col Color) Lab() (l, a, b float64) { + return XyzToLab(col.Xyz()) +} + +// Converts the given color to CIE L*a*b* space, taking into account +// a given reference white. (i.e. the monitor's white) +func (col Color) LabWhiteRef(wref [3]float64) (l, a, b float64) { + x, y, z := col.Xyz() + return XyzToLabWhiteRef(x, y, z, wref) +} + +// Generates a color by using data given in CIE L*a*b* space using D65 as reference white. +// WARNING: many combinations of `l`, `a`, and `b` values do not have corresponding +// valid RGB values, check the FAQ in the README if you're unsure. +func Lab(l, a, b float64) Color { + return Xyz(LabToXyz(l, a, b)) +} + +// Generates a color by using data given in CIE L*a*b* space, taking +// into account a given reference white. (i.e. the monitor's white) +func LabWhiteRef(l, a, b float64, wref [3]float64) Color { + return Xyz(LabToXyzWhiteRef(l, a, b, wref)) +} + +// DistanceLab is a good measure of visual similarity between two colors! +// A result of 0 would mean identical colors, while a result of 1 or higher +// means the colors differ a lot. +func (c1 Color) DistanceLab(c2 Color) float64 { + l1, a1, b1 := c1.Lab() + l2, a2, b2 := c2.Lab() + return math.Sqrt(sq(l1-l2) + sq(a1-a2) + sq(b1-b2)) +} + +// That's actually the same, but I don't want to break code. +func (c1 Color) DistanceCIE76(c2 Color) float64 { + return c1.DistanceLab(c2) +} + +// Uses the CIE94 formula to calculate color distance. More accurate than +// DistanceLab, but also more work. +func (cl Color) DistanceCIE94(cr Color) float64 { + l1, a1, b1 := cl.Lab() + l2, a2, b2 := cr.Lab() + + // NOTE: Since all those formulas expect L,a,b values 100x larger than we + // have them in this library, we either need to adjust all constants + // in the formula, or convert the ranges of L,a,b before, and then + // scale the distances down again. The latter is less error-prone. + l1, a1, b1 = l1*100.0, a1*100.0, b1*100.0 + l2, a2, b2 = l2*100.0, a2*100.0, b2*100.0 + + kl := 1.0 // 2.0 for textiles + kc := 1.0 + kh := 1.0 + k1 := 0.045 // 0.048 for textiles + k2 := 0.015 // 0.014 for textiles. + + deltaL := l1 - l2 + c1 := math.Sqrt(sq(a1) + sq(b1)) + c2 := math.Sqrt(sq(a2) + sq(b2)) + deltaCab := c1 - c2 + + // Not taking Sqrt here for stability, and it's unnecessary. + deltaHab2 := sq(a1-a2) + sq(b1-b2) - sq(deltaCab) + sl := 1.0 + sc := 1.0 + k1*c1 + sh := 1.0 + k2*c1 + + vL2 := sq(deltaL / (kl * sl)) + vC2 := sq(deltaCab / (kc * sc)) + vH2 := deltaHab2 / sq(kh*sh) + + return math.Sqrt(vL2+vC2+vH2) * 0.01 // See above. +} + +// BlendLab blends two colors in the L*a*b* color-space, which should result in a smoother blend. +// t == 0 results in c1, t == 1 results in c2 +func (c1 Color) BlendLab(c2 Color, t float64) Color { + l1, a1, b1 := c1.Lab() + l2, a2, b2 := c2.Lab() + return Lab(l1+t*(l2-l1), + a1+t*(a2-a1), + b1+t*(b2-b1)) +} + +/// L*u*v* /// +////////////// +// http://en.wikipedia.org/wiki/CIELUV#XYZ_.E2.86.92_CIELUV_and_CIELUV_.E2.86.92_XYZ_conversions +// For L*u*v*, we need to L*u*v*<->XYZ<->RGB and the first one is device dependent. + +func XyzToLuv(x, y, z float64) (l, a, b float64) { + // Use D65 white as reference point by default. + // http://www.fredmiranda.com/forum/topic/1035332 + // http://en.wikipedia.org/wiki/Standard_illuminant + return XyzToLuvWhiteRef(x, y, z, D65) +} + +func XyzToLuvWhiteRef(x, y, z float64, wref [3]float64) (l, u, v float64) { + if y/wref[1] <= 6.0/29.0*6.0/29.0*6.0/29.0 { + l = y / wref[1] * 29.0 / 3.0 * 29.0 / 3.0 * 29.0 / 3.0 + } else { + l = 1.16*math.Cbrt(y/wref[1]) - 0.16 + } + ubis, vbis := xyz_to_uv(x, y, z) + un, vn := xyz_to_uv(wref[0], wref[1], wref[2]) + u = 13.0 * l * (ubis - un) + v = 13.0 * l * (vbis - vn) + return +} + +// For this part, we do as R's graphics.hcl does, not as wikipedia does. +// Or is it the same? +func xyz_to_uv(x, y, z float64) (u, v float64) { + denom := x + 15.0*y + 3.0*z + if denom == 0.0 { + u, v = 0.0, 0.0 + } else { + u = 4.0 * x / denom + v = 9.0 * y / denom + } + return +} + +func LuvToXyz(l, u, v float64) (x, y, z float64) { + // D65 white (see above). + return LuvToXyzWhiteRef(l, u, v, D65) +} + +func LuvToXyzWhiteRef(l, u, v float64, wref [3]float64) (x, y, z float64) { + //y = wref[1] * lab_finv((l + 0.16) / 1.16) + if l <= 0.08 { + y = wref[1] * l * 100.0 * 3.0 / 29.0 * 3.0 / 29.0 * 3.0 / 29.0 + } else { + y = wref[1] * cub((l+0.16)/1.16) + } + un, vn := xyz_to_uv(wref[0], wref[1], wref[2]) + if l != 0.0 { + ubis := u/(13.0*l) + un + vbis := v/(13.0*l) + vn + x = y * 9.0 * ubis / (4.0 * vbis) + z = y * (12.0 - 3.0*ubis - 20.0*vbis) / (4.0 * vbis) + } else { + x, y = 0.0, 0.0 + } + return +} + +// Converts the given color to CIE L*u*v* space using D65 as reference white. +// L* is in [0..1] and both u* and v* are in about [-1..1] +func (col Color) Luv() (l, u, v float64) { + return XyzToLuv(col.Xyz()) +} + +// Converts the given color to CIE L*u*v* space, taking into account +// a given reference white. (i.e. the monitor's white) +// L* is in [0..1] and both u* and v* are in about [-1..1] +func (col Color) LuvWhiteRef(wref [3]float64) (l, u, v float64) { + x, y, z := col.Xyz() + return XyzToLuvWhiteRef(x, y, z, wref) +} + +// Generates a color by using data given in CIE L*u*v* space using D65 as reference white. +// L* is in [0..1] and both u* and v* are in about [-1..1] +// WARNING: many combinations of `l`, `a`, and `b` values do not have corresponding +// valid RGB values, check the FAQ in the README if you're unsure. +func Luv(l, u, v float64) Color { + return Xyz(LuvToXyz(l, u, v)) +} + +// Generates a color by using data given in CIE L*u*v* space, taking +// into account a given reference white. (i.e. the monitor's white) +// L* is in [0..1] and both u* and v* are in about [-1..1] +func LuvWhiteRef(l, u, v float64, wref [3]float64) Color { + return Xyz(LuvToXyzWhiteRef(l, u, v, wref)) +} + +// DistanceLuv is a good measure of visual similarity between two colors! +// A result of 0 would mean identical colors, while a result of 1 or higher +// means the colors differ a lot. +func (c1 Color) DistanceLuv(c2 Color) float64 { + l1, u1, v1 := c1.Luv() + l2, u2, v2 := c2.Luv() + return math.Sqrt(sq(l1-l2) + sq(u1-u2) + sq(v1-v2)) +} + +// BlendLuv blends two colors in the CIE-L*u*v* color-space, which should result in a smoother blend. +// t == 0 results in c1, t == 1 results in c2 +func (c1 Color) BlendLuv(c2 Color, t float64) Color { + l1, u1, v1 := c1.Luv() + l2, u2, v2 := c2.Luv() + return Luv(l1+t*(l2-l1), + u1+t*(u2-u1), + v1+t*(v2-v1)) +} + +/// HCL /// +/////////// +// HCL is nothing else than L*a*b* in cylindrical coordinates! +// (this was wrong on English wikipedia, I fixed it, let's hope the fix stays.) +// But it is widely popular since it is a "correct HSV" +// http://www.hunterlab.com/appnotes/an09_96a.pdf + +// Converts the given color to HCL space using D65 as reference white. +// H values are in [0..360], C and L values are in [0..1] although C can overshoot 1.0 +func (col Color) Hcl() (h, c, l float64) { + return col.HclWhiteRef(D65) +} + +func LabToHcl(L, a, b float64) (h, c, l float64) { + // Oops, floating point workaround necessary if a ~= b and both are very small (i.e. almost zero). + if math.Abs(b-a) > 1e-4 && math.Abs(a) > 1e-4 { + h = math.Mod(57.29577951308232087721*math.Atan2(b, a)+360.0, 360.0) // Rad2Deg + } else { + h = 0.0 + } + c = math.Sqrt(sq(a) + sq(b)) + l = L + return +} + +// Converts the given color to HCL space, taking into account +// a given reference white. (i.e. the monitor's white) +// H values are in [0..360], C and L values are in [0..1] +func (col Color) HclWhiteRef(wref [3]float64) (h, c, l float64) { + L, a, b := col.LabWhiteRef(wref) + return LabToHcl(L, a, b) +} + +// Generates a color by using data given in HCL space using D65 as reference white. +// H values are in [0..360], C and L values are in [0..1] +// WARNING: many combinations of `l`, `a`, and `b` values do not have corresponding +// valid RGB values, check the FAQ in the README if you're unsure. +func Hcl(h, c, l float64) Color { + return HclWhiteRef(h, c, l, D65) +} + +func HclToLab(h, c, l float64) (L, a, b float64) { + H := 0.01745329251994329576 * h // Deg2Rad + a = c * math.Cos(H) + b = c * math.Sin(H) + L = l + return +} + +// Generates a color by using data given in HCL space, taking +// into account a given reference white. (i.e. the monitor's white) +// H values are in [0..360], C and L values are in [0..1] +func HclWhiteRef(h, c, l float64, wref [3]float64) Color { + L, a, b := HclToLab(h, c, l) + return LabWhiteRef(L, a, b, wref) +} + +// BlendHcl blends two colors in the CIE-L*C*h° color-space, which should result in a smoother blend. +// t == 0 results in c1, t == 1 results in c2 +func (col1 Color) BlendHcl(col2 Color, t float64) Color { + h1, c1, l1 := col1.Hcl() + h2, c2, l2 := col2.Hcl() + + // We know that h are both in [0..360] + return Hcl(interp_angle(h1, h2, t), c1+t*(c2-c1), l1+t*(l2-l1)) +} diff --git a/vendor/github.com/lucasb-eyer/go-colorful/happy_palettegen.go b/vendor/github.com/lucasb-eyer/go-colorful/happy_palettegen.go new file mode 100644 index 00000000..bb66dfa4 --- /dev/null +++ b/vendor/github.com/lucasb-eyer/go-colorful/happy_palettegen.go @@ -0,0 +1,25 @@ +package colorful + +import ( + "math/rand" +) + +// Uses the HSV color space to generate colors with similar S,V but distributed +// evenly along their Hue. This is fast but not always pretty. +// If you've got time to spare, use Lab (the non-fast below). +func FastHappyPalette(colorsCount int) (colors []Color) { + colors = make([]Color, colorsCount) + + for i := 0; i < colorsCount; i++ { + colors[i] = Hsv(float64(i)*(360.0/float64(colorsCount)), 0.8+rand.Float64()*0.2, 0.65+rand.Float64()*0.2) + } + return +} + +func HappyPalette(colorsCount int) ([]Color, error) { + pimpy := func(l, a, b float64) bool { + _, c, _ := LabToHcl(l, a, b) + return 0.3 <= c && 0.4 <= l && l <= 0.8 + } + return SoftPaletteEx(colorsCount, SoftPaletteSettings{pimpy, 50, true}) +} diff --git a/vendor/github.com/lucasb-eyer/go-colorful/hexcolor.go b/vendor/github.com/lucasb-eyer/go-colorful/hexcolor.go new file mode 100644 index 00000000..86a5ed98 --- /dev/null +++ b/vendor/github.com/lucasb-eyer/go-colorful/hexcolor.go @@ -0,0 +1,37 @@ +package colorful + +import ( + "database/sql/driver" + "fmt" + "reflect" +) + +// A HexColor is a Color stored as a hex string "#rrggbb". It implements the +// database/sql.Scanner and database/sql/driver.Value interfaces. +type HexColor Color + +type errUnsupportedType struct { + got interface{} + want reflect.Type +} + +func (hc *HexColor) Scan(value interface{}) error { + s, ok := value.(string) + if !ok { + return errUnsupportedType{got: reflect.TypeOf(value), want: reflect.TypeOf("")} + } + c, err := Hex(s) + if err != nil { + return err + } + *hc = HexColor(c) + return nil +} + +func (hc *HexColor) Value() (driver.Value, error) { + return Color(*hc).Hex(), nil +} + +func (e errUnsupportedType) Error() string { + return fmt.Sprintf("unsupported type: got %v, want a %s", e.got, e.want) +} diff --git a/vendor/github.com/lucasb-eyer/go-colorful/soft_palettegen.go b/vendor/github.com/lucasb-eyer/go-colorful/soft_palettegen.go new file mode 100644 index 00000000..0154ac9b --- /dev/null +++ b/vendor/github.com/lucasb-eyer/go-colorful/soft_palettegen.go @@ -0,0 +1,185 @@ +// Largely inspired by the descriptions in http://lab.medialab.sciences-po.fr/iwanthue/ +// but written from scratch. + +package colorful + +import ( + "fmt" + "math" + "math/rand" +) + +// The algorithm works in L*a*b* color space and converts to RGB in the end. +// L* in [0..1], a* and b* in [-1..1] +type lab_t struct { + L, A, B float64 +} + +type SoftPaletteSettings struct { + // A function which can be used to restrict the allowed color-space. + CheckColor func(l, a, b float64) bool + + // The higher, the better quality but the slower. Usually two figures. + Iterations int + + // Use up to 160000 or 8000 samples of the L*a*b* space (and thus calls to CheckColor). + // Set this to true only if your CheckColor shapes the Lab space weirdly. + ManySamples bool +} + +// Yeah, windows-stype Foo, FooEx, screw you golang... +// Uses K-means to cluster the color-space and return the means of the clusters +// as a new palette of distinctive colors. Falls back to K-medoid if the mean +// happens to fall outside of the color-space, which can only happen if you +// specify a CheckColor function. +func SoftPaletteEx(colorsCount int, settings SoftPaletteSettings) ([]Color, error) { + + // Checks whether it's a valid RGB and also fulfills the potentially provided constraint. + check := func(col lab_t) bool { + c := Lab(col.L, col.A, col.B) + return c.IsValid() && (settings.CheckColor == nil || settings.CheckColor(col.L, col.A, col.B)) + } + + // Sample the color space. These will be the points k-means is run on. + dl := 0.05 + dab := 0.1 + if settings.ManySamples { + dl = 0.01 + dab = 0.05 + } + + samples := make([]lab_t, 0, int(1.0/dl*2.0/dab*2.0/dab)) + for l := 0.0; l <= 1.0; l += dl { + for a := -1.0; a <= 1.0; a += dab { + for b := -1.0; b <= 1.0; b += dab { + if check(lab_t{l, a, b}) { + samples = append(samples, lab_t{l, a, b}) + } + } + } + } + + // That would cause some infinite loops down there... + if len(samples) < colorsCount { + return nil, fmt.Errorf("palettegen: more colors requested (%v) than samples available (%v). Your requested color count may be wrong, you might want to use many samples or your constraint function makes the valid color space too small.", colorsCount, len(samples)) + } else if len(samples) == colorsCount { + return labs2cols(samples), nil // Oops? + } + + // We take the initial means out of the samples, so they are in fact medoids. + // This helps us avoid infinite loops or arbitrary cutoffs with too restrictive constraints. + means := make([]lab_t, colorsCount) + for i := 0; i < colorsCount; i++ { + for means[i] = samples[rand.Intn(len(samples))]; in(means, i, means[i]); means[i] = samples[rand.Intn(len(samples))] { + } + } + + clusters := make([]int, len(samples)) + samples_used := make([]bool, len(samples)) + + // The actual k-means/medoid iterations + for i := 0; i < settings.Iterations; i++ { + // Reassing the samples to clusters, i.e. to their closest mean. + // By the way, also check if any sample is used as a medoid and if so, mark that. + for isample, sample := range samples { + samples_used[isample] = false + mindist := math.Inf(+1) + for imean, mean := range means { + dist := lab_dist(sample, mean) + if dist < mindist { + mindist = dist + clusters[isample] = imean + } + + // Mark samples which are used as a medoid. + if lab_eq(sample, mean) { + samples_used[isample] = true + } + } + } + + // Compute new means according to the samples. + for imean := range means { + // The new mean is the average of all samples belonging to it.. + nsamples := 0 + newmean := lab_t{0.0, 0.0, 0.0} + for isample, sample := range samples { + if clusters[isample] == imean { + nsamples++ + newmean.L += sample.L + newmean.A += sample.A + newmean.B += sample.B + } + } + if nsamples > 0 { + newmean.L /= float64(nsamples) + newmean.A /= float64(nsamples) + newmean.B /= float64(nsamples) + } else { + // That mean doesn't have any samples? Get a new mean from the sample list! + var inewmean int + for inewmean = rand.Intn(len(samples_used)); samples_used[inewmean]; inewmean = rand.Intn(len(samples_used)) { + } + newmean = samples[inewmean] + samples_used[inewmean] = true + } + + // But now we still need to check whether the new mean is an allowed color. + if nsamples > 0 && check(newmean) { + // It does, life's good (TM) + means[imean] = newmean + } else { + // New mean isn't an allowed color or doesn't have any samples! + // Switch to medoid mode and pick the closest (unused) sample. + // This should always find something thanks to len(samples) >= colorsCount + mindist := math.Inf(+1) + for isample, sample := range samples { + if !samples_used[isample] { + dist := lab_dist(sample, newmean) + if dist < mindist { + mindist = dist + newmean = sample + } + } + } + } + } + } + return labs2cols(means), nil +} + +// A wrapper which uses common parameters. +func SoftPalette(colorsCount int) ([]Color, error) { + return SoftPaletteEx(colorsCount, SoftPaletteSettings{nil, 50, false}) +} + +func in(haystack []lab_t, upto int, needle lab_t) bool { + for i := 0; i < upto && i < len(haystack); i++ { + if haystack[i] == needle { + return true + } + } + return false +} + +const LAB_DELTA = 1e-6 + +func lab_eq(lab1, lab2 lab_t) bool { + return math.Abs(lab1.L-lab2.L) < LAB_DELTA && + math.Abs(lab1.A-lab2.A) < LAB_DELTA && + math.Abs(lab1.B-lab2.B) < LAB_DELTA +} + +// That's faster than using colorful's DistanceLab since we would have to +// convert back and forth for that. Here is no conversion. +func lab_dist(lab1, lab2 lab_t) float64 { + return math.Sqrt(sq(lab1.L-lab2.L) + sq(lab1.A-lab2.A) + sq(lab1.B-lab2.B)) +} + +func labs2cols(labs []lab_t) (cols []Color) { + cols = make([]Color, len(labs)) + for k, v := range labs { + cols[k] = Lab(v.L, v.A, v.B) + } + return cols +} diff --git a/vendor/github.com/lucasb-eyer/go-colorful/warm_palettegen.go b/vendor/github.com/lucasb-eyer/go-colorful/warm_palettegen.go new file mode 100644 index 00000000..00f42a5c --- /dev/null +++ b/vendor/github.com/lucasb-eyer/go-colorful/warm_palettegen.go @@ -0,0 +1,25 @@ +package colorful + +import ( + "math/rand" +) + +// Uses the HSV color space to generate colors with similar S,V but distributed +// evenly along their Hue. This is fast but not always pretty. +// If you've got time to spare, use Lab (the non-fast below). +func FastWarmPalette(colorsCount int) (colors []Color) { + colors = make([]Color, colorsCount) + + for i := 0; i < colorsCount; i++ { + colors[i] = Hsv(float64(i)*(360.0/float64(colorsCount)), 0.55+rand.Float64()*0.2, 0.35+rand.Float64()*0.2) + } + return +} + +func WarmPalette(colorsCount int) ([]Color, error) { + warmy := func(l, a, b float64) bool { + _, c, _ := LabToHcl(l, a, b) + return 0.1 <= c && c <= 0.4 && 0.2 <= l && l <= 0.5 + } + return SoftPaletteEx(colorsCount, SoftPaletteSettings{warmy, 50, true}) +} diff --git a/vendor/github.com/mattn/go-runewidth/.travis.yml b/vendor/github.com/mattn/go-runewidth/.travis.yml new file mode 100644 index 00000000..5c9c2a30 --- /dev/null +++ b/vendor/github.com/mattn/go-runewidth/.travis.yml @@ -0,0 +1,8 @@ +language: go +go: + - tip +before_install: + - go get github.com/mattn/goveralls + - go get golang.org/x/tools/cmd/cover +script: + - $HOME/gopath/bin/goveralls -repotoken lAKAWPzcGsD3A8yBX3BGGtRUdJ6CaGERL diff --git a/vendor/github.com/mattn/go-runewidth/LICENSE b/vendor/github.com/mattn/go-runewidth/LICENSE new file mode 100644 index 00000000..91b5cef3 --- /dev/null +++ b/vendor/github.com/mattn/go-runewidth/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Yasuhiro Matsumoto + +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/mattn/go-runewidth/README.mkd b/vendor/github.com/mattn/go-runewidth/README.mkd new file mode 100644 index 00000000..66663a94 --- /dev/null +++ b/vendor/github.com/mattn/go-runewidth/README.mkd @@ -0,0 +1,27 @@ +go-runewidth +============ + +[![Build Status](https://travis-ci.org/mattn/go-runewidth.png?branch=master)](https://travis-ci.org/mattn/go-runewidth) +[![Coverage Status](https://coveralls.io/repos/mattn/go-runewidth/badge.png?branch=HEAD)](https://coveralls.io/r/mattn/go-runewidth?branch=HEAD) +[![GoDoc](https://godoc.org/github.com/mattn/go-runewidth?status.svg)](http://godoc.org/github.com/mattn/go-runewidth) +[![Go Report Card](https://goreportcard.com/badge/github.com/mattn/go-runewidth)](https://goreportcard.com/report/github.com/mattn/go-runewidth) + +Provides functions to get fixed width of the character or string. + +Usage +----- + +```go +runewidth.StringWidth("つのだ☆HIRO") == 12 +``` + + +Author +------ + +Yasuhiro Matsumoto + +License +------- + +under the MIT License: http://mattn.mit-license.org/2013 diff --git a/vendor/github.com/mattn/go-runewidth/runewidth.go b/vendor/github.com/mattn/go-runewidth/runewidth.go new file mode 100644 index 00000000..2164497a --- /dev/null +++ b/vendor/github.com/mattn/go-runewidth/runewidth.go @@ -0,0 +1,1223 @@ +package runewidth + +var ( + // EastAsianWidth will be set true if the current locale is CJK + EastAsianWidth = IsEastAsian() + + // DefaultCondition is a condition in current locale + DefaultCondition = &Condition{EastAsianWidth} +) + +type interval struct { + first rune + last rune +} + +type table []interval + +func inTables(r rune, ts ...table) bool { + for _, t := range ts { + if inTable(r, t) { + return true + } + } + return false +} + +func inTable(r rune, t table) bool { + // func (t table) IncludesRune(r rune) bool { + if r < t[0].first { + return false + } + + bot := 0 + top := len(t) - 1 + for top >= bot { + mid := (bot + top) / 2 + + switch { + case t[mid].last < r: + bot = mid + 1 + case t[mid].first > r: + top = mid - 1 + default: + return true + } + } + + return false +} + +var private = table{ + {0x00E000, 0x00F8FF}, {0x0F0000, 0x0FFFFD}, {0x100000, 0x10FFFD}, +} + +var nonprint = table{ + {0x0000, 0x001F}, {0x007F, 0x009F}, {0x00AD, 0x00AD}, + {0x070F, 0x070F}, {0x180B, 0x180E}, {0x200B, 0x200F}, + {0x202A, 0x202E}, {0x206A, 0x206F}, {0xD800, 0xDFFF}, + {0xFEFF, 0xFEFF}, {0xFFF9, 0xFFFB}, {0xFFFE, 0xFFFF}, +} + +var combining = table{ + {0x0300, 0x036F}, {0x0483, 0x0489}, {0x0591, 0x05BD}, + {0x05BF, 0x05BF}, {0x05C1, 0x05C2}, {0x05C4, 0x05C5}, + {0x05C7, 0x05C7}, {0x0610, 0x061A}, {0x064B, 0x065F}, + {0x0670, 0x0670}, {0x06D6, 0x06DC}, {0x06DF, 0x06E4}, + {0x06E7, 0x06E8}, {0x06EA, 0x06ED}, {0x0711, 0x0711}, + {0x0730, 0x074A}, {0x07A6, 0x07B0}, {0x07EB, 0x07F3}, + {0x0816, 0x0819}, {0x081B, 0x0823}, {0x0825, 0x0827}, + {0x0829, 0x082D}, {0x0859, 0x085B}, {0x08D4, 0x08E1}, + {0x08E3, 0x0903}, {0x093A, 0x093C}, {0x093E, 0x094F}, + {0x0951, 0x0957}, {0x0962, 0x0963}, {0x0981, 0x0983}, + {0x09BC, 0x09BC}, {0x09BE, 0x09C4}, {0x09C7, 0x09C8}, + {0x09CB, 0x09CD}, {0x09D7, 0x09D7}, {0x09E2, 0x09E3}, + {0x0A01, 0x0A03}, {0x0A3C, 0x0A3C}, {0x0A3E, 0x0A42}, + {0x0A47, 0x0A48}, {0x0A4B, 0x0A4D}, {0x0A51, 0x0A51}, + {0x0A70, 0x0A71}, {0x0A75, 0x0A75}, {0x0A81, 0x0A83}, + {0x0ABC, 0x0ABC}, {0x0ABE, 0x0AC5}, {0x0AC7, 0x0AC9}, + {0x0ACB, 0x0ACD}, {0x0AE2, 0x0AE3}, {0x0B01, 0x0B03}, + {0x0B3C, 0x0B3C}, {0x0B3E, 0x0B44}, {0x0B47, 0x0B48}, + {0x0B4B, 0x0B4D}, {0x0B56, 0x0B57}, {0x0B62, 0x0B63}, + {0x0B82, 0x0B82}, {0x0BBE, 0x0BC2}, {0x0BC6, 0x0BC8}, + {0x0BCA, 0x0BCD}, {0x0BD7, 0x0BD7}, {0x0C00, 0x0C03}, + {0x0C3E, 0x0C44}, {0x0C46, 0x0C48}, {0x0C4A, 0x0C4D}, + {0x0C55, 0x0C56}, {0x0C62, 0x0C63}, {0x0C81, 0x0C83}, + {0x0CBC, 0x0CBC}, {0x0CBE, 0x0CC4}, {0x0CC6, 0x0CC8}, + {0x0CCA, 0x0CCD}, {0x0CD5, 0x0CD6}, {0x0CE2, 0x0CE3}, + {0x0D01, 0x0D03}, {0x0D3E, 0x0D44}, {0x0D46, 0x0D48}, + {0x0D4A, 0x0D4D}, {0x0D57, 0x0D57}, {0x0D62, 0x0D63}, + {0x0D82, 0x0D83}, {0x0DCA, 0x0DCA}, {0x0DCF, 0x0DD4}, + {0x0DD6, 0x0DD6}, {0x0DD8, 0x0DDF}, {0x0DF2, 0x0DF3}, + {0x0E31, 0x0E31}, {0x0E34, 0x0E3A}, {0x0E47, 0x0E4E}, + {0x0EB1, 0x0EB1}, {0x0EB4, 0x0EB9}, {0x0EBB, 0x0EBC}, + {0x0EC8, 0x0ECD}, {0x0F18, 0x0F19}, {0x0F35, 0x0F35}, + {0x0F37, 0x0F37}, {0x0F39, 0x0F39}, {0x0F3E, 0x0F3F}, + {0x0F71, 0x0F84}, {0x0F86, 0x0F87}, {0x0F8D, 0x0F97}, + {0x0F99, 0x0FBC}, {0x0FC6, 0x0FC6}, {0x102B, 0x103E}, + {0x1056, 0x1059}, {0x105E, 0x1060}, {0x1062, 0x1064}, + {0x1067, 0x106D}, {0x1071, 0x1074}, {0x1082, 0x108D}, + {0x108F, 0x108F}, {0x109A, 0x109D}, {0x135D, 0x135F}, + {0x1712, 0x1714}, {0x1732, 0x1734}, {0x1752, 0x1753}, + {0x1772, 0x1773}, {0x17B4, 0x17D3}, {0x17DD, 0x17DD}, + {0x180B, 0x180D}, {0x1885, 0x1886}, {0x18A9, 0x18A9}, + {0x1920, 0x192B}, {0x1930, 0x193B}, {0x1A17, 0x1A1B}, + {0x1A55, 0x1A5E}, {0x1A60, 0x1A7C}, {0x1A7F, 0x1A7F}, + {0x1AB0, 0x1ABE}, {0x1B00, 0x1B04}, {0x1B34, 0x1B44}, + {0x1B6B, 0x1B73}, {0x1B80, 0x1B82}, {0x1BA1, 0x1BAD}, + {0x1BE6, 0x1BF3}, {0x1C24, 0x1C37}, {0x1CD0, 0x1CD2}, + {0x1CD4, 0x1CE8}, {0x1CED, 0x1CED}, {0x1CF2, 0x1CF4}, + {0x1CF8, 0x1CF9}, {0x1DC0, 0x1DF5}, {0x1DFB, 0x1DFF}, + {0x20D0, 0x20F0}, {0x2CEF, 0x2CF1}, {0x2D7F, 0x2D7F}, + {0x2DE0, 0x2DFF}, {0x302A, 0x302F}, {0x3099, 0x309A}, + {0xA66F, 0xA672}, {0xA674, 0xA67D}, {0xA69E, 0xA69F}, + {0xA6F0, 0xA6F1}, {0xA802, 0xA802}, {0xA806, 0xA806}, + {0xA80B, 0xA80B}, {0xA823, 0xA827}, {0xA880, 0xA881}, + {0xA8B4, 0xA8C5}, {0xA8E0, 0xA8F1}, {0xA926, 0xA92D}, + {0xA947, 0xA953}, {0xA980, 0xA983}, {0xA9B3, 0xA9C0}, + {0xA9E5, 0xA9E5}, {0xAA29, 0xAA36}, {0xAA43, 0xAA43}, + {0xAA4C, 0xAA4D}, {0xAA7B, 0xAA7D}, {0xAAB0, 0xAAB0}, + {0xAAB2, 0xAAB4}, {0xAAB7, 0xAAB8}, {0xAABE, 0xAABF}, + {0xAAC1, 0xAAC1}, {0xAAEB, 0xAAEF}, {0xAAF5, 0xAAF6}, + {0xABE3, 0xABEA}, {0xABEC, 0xABED}, {0xFB1E, 0xFB1E}, + {0xFE00, 0xFE0F}, {0xFE20, 0xFE2F}, {0x101FD, 0x101FD}, + {0x102E0, 0x102E0}, {0x10376, 0x1037A}, {0x10A01, 0x10A03}, + {0x10A05, 0x10A06}, {0x10A0C, 0x10A0F}, {0x10A38, 0x10A3A}, + {0x10A3F, 0x10A3F}, {0x10AE5, 0x10AE6}, {0x11000, 0x11002}, + {0x11038, 0x11046}, {0x1107F, 0x11082}, {0x110B0, 0x110BA}, + {0x11100, 0x11102}, {0x11127, 0x11134}, {0x11173, 0x11173}, + {0x11180, 0x11182}, {0x111B3, 0x111C0}, {0x111CA, 0x111CC}, + {0x1122C, 0x11237}, {0x1123E, 0x1123E}, {0x112DF, 0x112EA}, + {0x11300, 0x11303}, {0x1133C, 0x1133C}, {0x1133E, 0x11344}, + {0x11347, 0x11348}, {0x1134B, 0x1134D}, {0x11357, 0x11357}, + {0x11362, 0x11363}, {0x11366, 0x1136C}, {0x11370, 0x11374}, + {0x11435, 0x11446}, {0x114B0, 0x114C3}, {0x115AF, 0x115B5}, + {0x115B8, 0x115C0}, {0x115DC, 0x115DD}, {0x11630, 0x11640}, + {0x116AB, 0x116B7}, {0x1171D, 0x1172B}, {0x11C2F, 0x11C36}, + {0x11C38, 0x11C3F}, {0x11C92, 0x11CA7}, {0x11CA9, 0x11CB6}, + {0x16AF0, 0x16AF4}, {0x16B30, 0x16B36}, {0x16F51, 0x16F7E}, + {0x16F8F, 0x16F92}, {0x1BC9D, 0x1BC9E}, {0x1D165, 0x1D169}, + {0x1D16D, 0x1D172}, {0x1D17B, 0x1D182}, {0x1D185, 0x1D18B}, + {0x1D1AA, 0x1D1AD}, {0x1D242, 0x1D244}, {0x1DA00, 0x1DA36}, + {0x1DA3B, 0x1DA6C}, {0x1DA75, 0x1DA75}, {0x1DA84, 0x1DA84}, + {0x1DA9B, 0x1DA9F}, {0x1DAA1, 0x1DAAF}, {0x1E000, 0x1E006}, + {0x1E008, 0x1E018}, {0x1E01B, 0x1E021}, {0x1E023, 0x1E024}, + {0x1E026, 0x1E02A}, {0x1E8D0, 0x1E8D6}, {0x1E944, 0x1E94A}, + {0xE0100, 0xE01EF}, +} + +var doublewidth = table{ + {0x1100, 0x115F}, {0x231A, 0x231B}, {0x2329, 0x232A}, + {0x23E9, 0x23EC}, {0x23F0, 0x23F0}, {0x23F3, 0x23F3}, + {0x25FD, 0x25FE}, {0x2614, 0x2615}, {0x2648, 0x2653}, + {0x267F, 0x267F}, {0x2693, 0x2693}, {0x26A1, 0x26A1}, + {0x26AA, 0x26AB}, {0x26BD, 0x26BE}, {0x26C4, 0x26C5}, + {0x26CE, 0x26CE}, {0x26D4, 0x26D4}, {0x26EA, 0x26EA}, + {0x26F2, 0x26F3}, {0x26F5, 0x26F5}, {0x26FA, 0x26FA}, + {0x26FD, 0x26FD}, {0x2705, 0x2705}, {0x270A, 0x270B}, + {0x2728, 0x2728}, {0x274C, 0x274C}, {0x274E, 0x274E}, + {0x2753, 0x2755}, {0x2757, 0x2757}, {0x2795, 0x2797}, + {0x27B0, 0x27B0}, {0x27BF, 0x27BF}, {0x2B1B, 0x2B1C}, + {0x2B50, 0x2B50}, {0x2B55, 0x2B55}, {0x2E80, 0x2E99}, + {0x2E9B, 0x2EF3}, {0x2F00, 0x2FD5}, {0x2FF0, 0x2FFB}, + {0x3000, 0x303E}, {0x3041, 0x3096}, {0x3099, 0x30FF}, + {0x3105, 0x312D}, {0x3131, 0x318E}, {0x3190, 0x31BA}, + {0x31C0, 0x31E3}, {0x31F0, 0x321E}, {0x3220, 0x3247}, + {0x3250, 0x32FE}, {0x3300, 0x4DBF}, {0x4E00, 0xA48C}, + {0xA490, 0xA4C6}, {0xA960, 0xA97C}, {0xAC00, 0xD7A3}, + {0xF900, 0xFAFF}, {0xFE10, 0xFE19}, {0xFE30, 0xFE52}, + {0xFE54, 0xFE66}, {0xFE68, 0xFE6B}, {0xFF01, 0xFF60}, + {0xFFE0, 0xFFE6}, {0x16FE0, 0x16FE0}, {0x17000, 0x187EC}, + {0x18800, 0x18AF2}, {0x1B000, 0x1B001}, {0x1F004, 0x1F004}, + {0x1F0CF, 0x1F0CF}, {0x1F18E, 0x1F18E}, {0x1F191, 0x1F19A}, + {0x1F200, 0x1F202}, {0x1F210, 0x1F23B}, {0x1F240, 0x1F248}, + {0x1F250, 0x1F251}, {0x1F300, 0x1F320}, {0x1F32D, 0x1F335}, + {0x1F337, 0x1F37C}, {0x1F37E, 0x1F393}, {0x1F3A0, 0x1F3CA}, + {0x1F3CF, 0x1F3D3}, {0x1F3E0, 0x1F3F0}, {0x1F3F4, 0x1F3F4}, + {0x1F3F8, 0x1F43E}, {0x1F440, 0x1F440}, {0x1F442, 0x1F4FC}, + {0x1F4FF, 0x1F53D}, {0x1F54B, 0x1F54E}, {0x1F550, 0x1F567}, + {0x1F57A, 0x1F57A}, {0x1F595, 0x1F596}, {0x1F5A4, 0x1F5A4}, + {0x1F5FB, 0x1F64F}, {0x1F680, 0x1F6C5}, {0x1F6CC, 0x1F6CC}, + {0x1F6D0, 0x1F6D2}, {0x1F6EB, 0x1F6EC}, {0x1F6F4, 0x1F6F6}, + {0x1F910, 0x1F91E}, {0x1F920, 0x1F927}, {0x1F930, 0x1F930}, + {0x1F933, 0x1F93E}, {0x1F940, 0x1F94B}, {0x1F950, 0x1F95E}, + {0x1F980, 0x1F991}, {0x1F9C0, 0x1F9C0}, {0x20000, 0x2FFFD}, + {0x30000, 0x3FFFD}, +} + +var ambiguous = table{ + {0x00A1, 0x00A1}, {0x00A4, 0x00A4}, {0x00A7, 0x00A8}, + {0x00AA, 0x00AA}, {0x00AD, 0x00AE}, {0x00B0, 0x00B4}, + {0x00B6, 0x00BA}, {0x00BC, 0x00BF}, {0x00C6, 0x00C6}, + {0x00D0, 0x00D0}, {0x00D7, 0x00D8}, {0x00DE, 0x00E1}, + {0x00E6, 0x00E6}, {0x00E8, 0x00EA}, {0x00EC, 0x00ED}, + {0x00F0, 0x00F0}, {0x00F2, 0x00F3}, {0x00F7, 0x00FA}, + {0x00FC, 0x00FC}, {0x00FE, 0x00FE}, {0x0101, 0x0101}, + {0x0111, 0x0111}, {0x0113, 0x0113}, {0x011B, 0x011B}, + {0x0126, 0x0127}, {0x012B, 0x012B}, {0x0131, 0x0133}, + {0x0138, 0x0138}, {0x013F, 0x0142}, {0x0144, 0x0144}, + {0x0148, 0x014B}, {0x014D, 0x014D}, {0x0152, 0x0153}, + {0x0166, 0x0167}, {0x016B, 0x016B}, {0x01CE, 0x01CE}, + {0x01D0, 0x01D0}, {0x01D2, 0x01D2}, {0x01D4, 0x01D4}, + {0x01D6, 0x01D6}, {0x01D8, 0x01D8}, {0x01DA, 0x01DA}, + {0x01DC, 0x01DC}, {0x0251, 0x0251}, {0x0261, 0x0261}, + {0x02C4, 0x02C4}, {0x02C7, 0x02C7}, {0x02C9, 0x02CB}, + {0x02CD, 0x02CD}, {0x02D0, 0x02D0}, {0x02D8, 0x02DB}, + {0x02DD, 0x02DD}, {0x02DF, 0x02DF}, {0x0300, 0x036F}, + {0x0391, 0x03A1}, {0x03A3, 0x03A9}, {0x03B1, 0x03C1}, + {0x03C3, 0x03C9}, {0x0401, 0x0401}, {0x0410, 0x044F}, + {0x0451, 0x0451}, {0x2010, 0x2010}, {0x2013, 0x2016}, + {0x2018, 0x2019}, {0x201C, 0x201D}, {0x2020, 0x2022}, + {0x2024, 0x2027}, {0x2030, 0x2030}, {0x2032, 0x2033}, + {0x2035, 0x2035}, {0x203B, 0x203B}, {0x203E, 0x203E}, + {0x2074, 0x2074}, {0x207F, 0x207F}, {0x2081, 0x2084}, + {0x20AC, 0x20AC}, {0x2103, 0x2103}, {0x2105, 0x2105}, + {0x2109, 0x2109}, {0x2113, 0x2113}, {0x2116, 0x2116}, + {0x2121, 0x2122}, {0x2126, 0x2126}, {0x212B, 0x212B}, + {0x2153, 0x2154}, {0x215B, 0x215E}, {0x2160, 0x216B}, + {0x2170, 0x2179}, {0x2189, 0x2189}, {0x2190, 0x2199}, + {0x21B8, 0x21B9}, {0x21D2, 0x21D2}, {0x21D4, 0x21D4}, + {0x21E7, 0x21E7}, {0x2200, 0x2200}, {0x2202, 0x2203}, + {0x2207, 0x2208}, {0x220B, 0x220B}, {0x220F, 0x220F}, + {0x2211, 0x2211}, {0x2215, 0x2215}, {0x221A, 0x221A}, + {0x221D, 0x2220}, {0x2223, 0x2223}, {0x2225, 0x2225}, + {0x2227, 0x222C}, {0x222E, 0x222E}, {0x2234, 0x2237}, + {0x223C, 0x223D}, {0x2248, 0x2248}, {0x224C, 0x224C}, + {0x2252, 0x2252}, {0x2260, 0x2261}, {0x2264, 0x2267}, + {0x226A, 0x226B}, {0x226E, 0x226F}, {0x2282, 0x2283}, + {0x2286, 0x2287}, {0x2295, 0x2295}, {0x2299, 0x2299}, + {0x22A5, 0x22A5}, {0x22BF, 0x22BF}, {0x2312, 0x2312}, + {0x2460, 0x24E9}, {0x24EB, 0x254B}, {0x2550, 0x2573}, + {0x2580, 0x258F}, {0x2592, 0x2595}, {0x25A0, 0x25A1}, + {0x25A3, 0x25A9}, {0x25B2, 0x25B3}, {0x25B6, 0x25B7}, + {0x25BC, 0x25BD}, {0x25C0, 0x25C1}, {0x25C6, 0x25C8}, + {0x25CB, 0x25CB}, {0x25CE, 0x25D1}, {0x25E2, 0x25E5}, + {0x25EF, 0x25EF}, {0x2605, 0x2606}, {0x2609, 0x2609}, + {0x260E, 0x260F}, {0x261C, 0x261C}, {0x261E, 0x261E}, + {0x2640, 0x2640}, {0x2642, 0x2642}, {0x2660, 0x2661}, + {0x2663, 0x2665}, {0x2667, 0x266A}, {0x266C, 0x266D}, + {0x266F, 0x266F}, {0x269E, 0x269F}, {0x26BF, 0x26BF}, + {0x26C6, 0x26CD}, {0x26CF, 0x26D3}, {0x26D5, 0x26E1}, + {0x26E3, 0x26E3}, {0x26E8, 0x26E9}, {0x26EB, 0x26F1}, + {0x26F4, 0x26F4}, {0x26F6, 0x26F9}, {0x26FB, 0x26FC}, + {0x26FE, 0x26FF}, {0x273D, 0x273D}, {0x2776, 0x277F}, + {0x2B56, 0x2B59}, {0x3248, 0x324F}, {0xE000, 0xF8FF}, + {0xFE00, 0xFE0F}, {0xFFFD, 0xFFFD}, {0x1F100, 0x1F10A}, + {0x1F110, 0x1F12D}, {0x1F130, 0x1F169}, {0x1F170, 0x1F18D}, + {0x1F18F, 0x1F190}, {0x1F19B, 0x1F1AC}, {0xE0100, 0xE01EF}, + {0xF0000, 0xFFFFD}, {0x100000, 0x10FFFD}, +} + +var emoji = table{ + {0x1F1E6, 0x1F1FF}, {0x1F321, 0x1F321}, {0x1F324, 0x1F32C}, + {0x1F336, 0x1F336}, {0x1F37D, 0x1F37D}, {0x1F396, 0x1F397}, + {0x1F399, 0x1F39B}, {0x1F39E, 0x1F39F}, {0x1F3CB, 0x1F3CE}, + {0x1F3D4, 0x1F3DF}, {0x1F3F3, 0x1F3F5}, {0x1F3F7, 0x1F3F7}, + {0x1F43F, 0x1F43F}, {0x1F441, 0x1F441}, {0x1F4FD, 0x1F4FD}, + {0x1F549, 0x1F54A}, {0x1F56F, 0x1F570}, {0x1F573, 0x1F579}, + {0x1F587, 0x1F587}, {0x1F58A, 0x1F58D}, {0x1F590, 0x1F590}, + {0x1F5A5, 0x1F5A5}, {0x1F5A8, 0x1F5A8}, {0x1F5B1, 0x1F5B2}, + {0x1F5BC, 0x1F5BC}, {0x1F5C2, 0x1F5C4}, {0x1F5D1, 0x1F5D3}, + {0x1F5DC, 0x1F5DE}, {0x1F5E1, 0x1F5E1}, {0x1F5E3, 0x1F5E3}, + {0x1F5E8, 0x1F5E8}, {0x1F5EF, 0x1F5EF}, {0x1F5F3, 0x1F5F3}, + {0x1F5FA, 0x1F5FA}, {0x1F6CB, 0x1F6CF}, {0x1F6E0, 0x1F6E5}, + {0x1F6E9, 0x1F6E9}, {0x1F6F0, 0x1F6F0}, {0x1F6F3, 0x1F6F3}, +} + +var notassigned = table{ + {0x0378, 0x0379}, {0x0380, 0x0383}, {0x038B, 0x038B}, + {0x038D, 0x038D}, {0x03A2, 0x03A2}, {0x0530, 0x0530}, + {0x0557, 0x0558}, {0x0560, 0x0560}, {0x0588, 0x0588}, + {0x058B, 0x058C}, {0x0590, 0x0590}, {0x05C8, 0x05CF}, + {0x05EB, 0x05EF}, {0x05F5, 0x05FF}, {0x061D, 0x061D}, + {0x070E, 0x070E}, {0x074B, 0x074C}, {0x07B2, 0x07BF}, + {0x07FB, 0x07FF}, {0x082E, 0x082F}, {0x083F, 0x083F}, + {0x085C, 0x085D}, {0x085F, 0x089F}, {0x08B5, 0x08B5}, + {0x08BE, 0x08D3}, {0x0984, 0x0984}, {0x098D, 0x098E}, + {0x0991, 0x0992}, {0x09A9, 0x09A9}, {0x09B1, 0x09B1}, + {0x09B3, 0x09B5}, {0x09BA, 0x09BB}, {0x09C5, 0x09C6}, + {0x09C9, 0x09CA}, {0x09CF, 0x09D6}, {0x09D8, 0x09DB}, + {0x09DE, 0x09DE}, {0x09E4, 0x09E5}, {0x09FC, 0x0A00}, + {0x0A04, 0x0A04}, {0x0A0B, 0x0A0E}, {0x0A11, 0x0A12}, + {0x0A29, 0x0A29}, {0x0A31, 0x0A31}, {0x0A34, 0x0A34}, + {0x0A37, 0x0A37}, {0x0A3A, 0x0A3B}, {0x0A3D, 0x0A3D}, + {0x0A43, 0x0A46}, {0x0A49, 0x0A4A}, {0x0A4E, 0x0A50}, + {0x0A52, 0x0A58}, {0x0A5D, 0x0A5D}, {0x0A5F, 0x0A65}, + {0x0A76, 0x0A80}, {0x0A84, 0x0A84}, {0x0A8E, 0x0A8E}, + {0x0A92, 0x0A92}, {0x0AA9, 0x0AA9}, {0x0AB1, 0x0AB1}, + {0x0AB4, 0x0AB4}, {0x0ABA, 0x0ABB}, {0x0AC6, 0x0AC6}, + {0x0ACA, 0x0ACA}, {0x0ACE, 0x0ACF}, {0x0AD1, 0x0ADF}, + {0x0AE4, 0x0AE5}, {0x0AF2, 0x0AF8}, {0x0AFA, 0x0B00}, + {0x0B04, 0x0B04}, {0x0B0D, 0x0B0E}, {0x0B11, 0x0B12}, + {0x0B29, 0x0B29}, {0x0B31, 0x0B31}, {0x0B34, 0x0B34}, + {0x0B3A, 0x0B3B}, {0x0B45, 0x0B46}, {0x0B49, 0x0B4A}, + {0x0B4E, 0x0B55}, {0x0B58, 0x0B5B}, {0x0B5E, 0x0B5E}, + {0x0B64, 0x0B65}, {0x0B78, 0x0B81}, {0x0B84, 0x0B84}, + {0x0B8B, 0x0B8D}, {0x0B91, 0x0B91}, {0x0B96, 0x0B98}, + {0x0B9B, 0x0B9B}, {0x0B9D, 0x0B9D}, {0x0BA0, 0x0BA2}, + {0x0BA5, 0x0BA7}, {0x0BAB, 0x0BAD}, {0x0BBA, 0x0BBD}, + {0x0BC3, 0x0BC5}, {0x0BC9, 0x0BC9}, {0x0BCE, 0x0BCF}, + {0x0BD1, 0x0BD6}, {0x0BD8, 0x0BE5}, {0x0BFB, 0x0BFF}, + {0x0C04, 0x0C04}, {0x0C0D, 0x0C0D}, {0x0C11, 0x0C11}, + {0x0C29, 0x0C29}, {0x0C3A, 0x0C3C}, {0x0C45, 0x0C45}, + {0x0C49, 0x0C49}, {0x0C4E, 0x0C54}, {0x0C57, 0x0C57}, + {0x0C5B, 0x0C5F}, {0x0C64, 0x0C65}, {0x0C70, 0x0C77}, + {0x0C84, 0x0C84}, {0x0C8D, 0x0C8D}, {0x0C91, 0x0C91}, + {0x0CA9, 0x0CA9}, {0x0CB4, 0x0CB4}, {0x0CBA, 0x0CBB}, + {0x0CC5, 0x0CC5}, {0x0CC9, 0x0CC9}, {0x0CCE, 0x0CD4}, + {0x0CD7, 0x0CDD}, {0x0CDF, 0x0CDF}, {0x0CE4, 0x0CE5}, + {0x0CF0, 0x0CF0}, {0x0CF3, 0x0D00}, {0x0D04, 0x0D04}, + {0x0D0D, 0x0D0D}, {0x0D11, 0x0D11}, {0x0D3B, 0x0D3C}, + {0x0D45, 0x0D45}, {0x0D49, 0x0D49}, {0x0D50, 0x0D53}, + {0x0D64, 0x0D65}, {0x0D80, 0x0D81}, {0x0D84, 0x0D84}, + {0x0D97, 0x0D99}, {0x0DB2, 0x0DB2}, {0x0DBC, 0x0DBC}, + {0x0DBE, 0x0DBF}, {0x0DC7, 0x0DC9}, {0x0DCB, 0x0DCE}, + {0x0DD5, 0x0DD5}, {0x0DD7, 0x0DD7}, {0x0DE0, 0x0DE5}, + {0x0DF0, 0x0DF1}, {0x0DF5, 0x0E00}, {0x0E3B, 0x0E3E}, + {0x0E5C, 0x0E80}, {0x0E83, 0x0E83}, {0x0E85, 0x0E86}, + {0x0E89, 0x0E89}, {0x0E8B, 0x0E8C}, {0x0E8E, 0x0E93}, + {0x0E98, 0x0E98}, {0x0EA0, 0x0EA0}, {0x0EA4, 0x0EA4}, + {0x0EA6, 0x0EA6}, {0x0EA8, 0x0EA9}, {0x0EAC, 0x0EAC}, + {0x0EBA, 0x0EBA}, {0x0EBE, 0x0EBF}, {0x0EC5, 0x0EC5}, + {0x0EC7, 0x0EC7}, {0x0ECE, 0x0ECF}, {0x0EDA, 0x0EDB}, + {0x0EE0, 0x0EFF}, {0x0F48, 0x0F48}, {0x0F6D, 0x0F70}, + {0x0F98, 0x0F98}, {0x0FBD, 0x0FBD}, {0x0FCD, 0x0FCD}, + {0x0FDB, 0x0FFF}, {0x10C6, 0x10C6}, {0x10C8, 0x10CC}, + {0x10CE, 0x10CF}, {0x1249, 0x1249}, {0x124E, 0x124F}, + {0x1257, 0x1257}, {0x1259, 0x1259}, {0x125E, 0x125F}, + {0x1289, 0x1289}, {0x128E, 0x128F}, {0x12B1, 0x12B1}, + {0x12B6, 0x12B7}, {0x12BF, 0x12BF}, {0x12C1, 0x12C1}, + {0x12C6, 0x12C7}, {0x12D7, 0x12D7}, {0x1311, 0x1311}, + {0x1316, 0x1317}, {0x135B, 0x135C}, {0x137D, 0x137F}, + {0x139A, 0x139F}, {0x13F6, 0x13F7}, {0x13FE, 0x13FF}, + {0x169D, 0x169F}, {0x16F9, 0x16FF}, {0x170D, 0x170D}, + {0x1715, 0x171F}, {0x1737, 0x173F}, {0x1754, 0x175F}, + {0x176D, 0x176D}, {0x1771, 0x1771}, {0x1774, 0x177F}, + {0x17DE, 0x17DF}, {0x17EA, 0x17EF}, {0x17FA, 0x17FF}, + {0x180F, 0x180F}, {0x181A, 0x181F}, {0x1878, 0x187F}, + {0x18AB, 0x18AF}, {0x18F6, 0x18FF}, {0x191F, 0x191F}, + {0x192C, 0x192F}, {0x193C, 0x193F}, {0x1941, 0x1943}, + {0x196E, 0x196F}, {0x1975, 0x197F}, {0x19AC, 0x19AF}, + {0x19CA, 0x19CF}, {0x19DB, 0x19DD}, {0x1A1C, 0x1A1D}, + {0x1A5F, 0x1A5F}, {0x1A7D, 0x1A7E}, {0x1A8A, 0x1A8F}, + {0x1A9A, 0x1A9F}, {0x1AAE, 0x1AAF}, {0x1ABF, 0x1AFF}, + {0x1B4C, 0x1B4F}, {0x1B7D, 0x1B7F}, {0x1BF4, 0x1BFB}, + {0x1C38, 0x1C3A}, {0x1C4A, 0x1C4C}, {0x1C89, 0x1CBF}, + {0x1CC8, 0x1CCF}, {0x1CF7, 0x1CF7}, {0x1CFA, 0x1CFF}, + {0x1DF6, 0x1DFA}, {0x1F16, 0x1F17}, {0x1F1E, 0x1F1F}, + {0x1F46, 0x1F47}, {0x1F4E, 0x1F4F}, {0x1F58, 0x1F58}, + {0x1F5A, 0x1F5A}, {0x1F5C, 0x1F5C}, {0x1F5E, 0x1F5E}, + {0x1F7E, 0x1F7F}, {0x1FB5, 0x1FB5}, {0x1FC5, 0x1FC5}, + {0x1FD4, 0x1FD5}, {0x1FDC, 0x1FDC}, {0x1FF0, 0x1FF1}, + {0x1FF5, 0x1FF5}, {0x1FFF, 0x1FFF}, {0x2065, 0x2065}, + {0x2072, 0x2073}, {0x208F, 0x208F}, {0x209D, 0x209F}, + {0x20BF, 0x20CF}, {0x20F1, 0x20FF}, {0x218C, 0x218F}, + {0x23FF, 0x23FF}, {0x2427, 0x243F}, {0x244B, 0x245F}, + {0x2B74, 0x2B75}, {0x2B96, 0x2B97}, {0x2BBA, 0x2BBC}, + {0x2BC9, 0x2BC9}, {0x2BD2, 0x2BEB}, {0x2BF0, 0x2BFF}, + {0x2C2F, 0x2C2F}, {0x2C5F, 0x2C5F}, {0x2CF4, 0x2CF8}, + {0x2D26, 0x2D26}, {0x2D28, 0x2D2C}, {0x2D2E, 0x2D2F}, + {0x2D68, 0x2D6E}, {0x2D71, 0x2D7E}, {0x2D97, 0x2D9F}, + {0x2DA7, 0x2DA7}, {0x2DAF, 0x2DAF}, {0x2DB7, 0x2DB7}, + {0x2DBF, 0x2DBF}, {0x2DC7, 0x2DC7}, {0x2DCF, 0x2DCF}, + {0x2DD7, 0x2DD7}, {0x2DDF, 0x2DDF}, {0x2E45, 0x2E7F}, + {0x2E9A, 0x2E9A}, {0x2EF4, 0x2EFF}, {0x2FD6, 0x2FEF}, + {0x2FFC, 0x2FFF}, {0x3040, 0x3040}, {0x3097, 0x3098}, + {0x3100, 0x3104}, {0x312E, 0x3130}, {0x318F, 0x318F}, + {0x31BB, 0x31BF}, {0x31E4, 0x31EF}, {0x321F, 0x321F}, + {0x32FF, 0x32FF}, {0x4DB6, 0x4DBF}, {0x9FD6, 0x9FFF}, + {0xA48D, 0xA48F}, {0xA4C7, 0xA4CF}, {0xA62C, 0xA63F}, + {0xA6F8, 0xA6FF}, {0xA7AF, 0xA7AF}, {0xA7B8, 0xA7F6}, + {0xA82C, 0xA82F}, {0xA83A, 0xA83F}, {0xA878, 0xA87F}, + {0xA8C6, 0xA8CD}, {0xA8DA, 0xA8DF}, {0xA8FE, 0xA8FF}, + {0xA954, 0xA95E}, {0xA97D, 0xA97F}, {0xA9CE, 0xA9CE}, + {0xA9DA, 0xA9DD}, {0xA9FF, 0xA9FF}, {0xAA37, 0xAA3F}, + {0xAA4E, 0xAA4F}, {0xAA5A, 0xAA5B}, {0xAAC3, 0xAADA}, + {0xAAF7, 0xAB00}, {0xAB07, 0xAB08}, {0xAB0F, 0xAB10}, + {0xAB17, 0xAB1F}, {0xAB27, 0xAB27}, {0xAB2F, 0xAB2F}, + {0xAB66, 0xAB6F}, {0xABEE, 0xABEF}, {0xABFA, 0xABFF}, + {0xD7A4, 0xD7AF}, {0xD7C7, 0xD7CA}, {0xD7FC, 0xD7FF}, + {0xFA6E, 0xFA6F}, {0xFADA, 0xFAFF}, {0xFB07, 0xFB12}, + {0xFB18, 0xFB1C}, {0xFB37, 0xFB37}, {0xFB3D, 0xFB3D}, + {0xFB3F, 0xFB3F}, {0xFB42, 0xFB42}, {0xFB45, 0xFB45}, + {0xFBC2, 0xFBD2}, {0xFD40, 0xFD4F}, {0xFD90, 0xFD91}, + {0xFDC8, 0xFDEF}, {0xFDFE, 0xFDFF}, {0xFE1A, 0xFE1F}, + {0xFE53, 0xFE53}, {0xFE67, 0xFE67}, {0xFE6C, 0xFE6F}, + {0xFE75, 0xFE75}, {0xFEFD, 0xFEFE}, {0xFF00, 0xFF00}, + {0xFFBF, 0xFFC1}, {0xFFC8, 0xFFC9}, {0xFFD0, 0xFFD1}, + {0xFFD8, 0xFFD9}, {0xFFDD, 0xFFDF}, {0xFFE7, 0xFFE7}, + {0xFFEF, 0xFFF8}, {0xFFFE, 0xFFFF}, {0x1000C, 0x1000C}, + {0x10027, 0x10027}, {0x1003B, 0x1003B}, {0x1003E, 0x1003E}, + {0x1004E, 0x1004F}, {0x1005E, 0x1007F}, {0x100FB, 0x100FF}, + {0x10103, 0x10106}, {0x10134, 0x10136}, {0x1018F, 0x1018F}, + {0x1019C, 0x1019F}, {0x101A1, 0x101CF}, {0x101FE, 0x1027F}, + {0x1029D, 0x1029F}, {0x102D1, 0x102DF}, {0x102FC, 0x102FF}, + {0x10324, 0x1032F}, {0x1034B, 0x1034F}, {0x1037B, 0x1037F}, + {0x1039E, 0x1039E}, {0x103C4, 0x103C7}, {0x103D6, 0x103FF}, + {0x1049E, 0x1049F}, {0x104AA, 0x104AF}, {0x104D4, 0x104D7}, + {0x104FC, 0x104FF}, {0x10528, 0x1052F}, {0x10564, 0x1056E}, + {0x10570, 0x105FF}, {0x10737, 0x1073F}, {0x10756, 0x1075F}, + {0x10768, 0x107FF}, {0x10806, 0x10807}, {0x10809, 0x10809}, + {0x10836, 0x10836}, {0x10839, 0x1083B}, {0x1083D, 0x1083E}, + {0x10856, 0x10856}, {0x1089F, 0x108A6}, {0x108B0, 0x108DF}, + {0x108F3, 0x108F3}, {0x108F6, 0x108FA}, {0x1091C, 0x1091E}, + {0x1093A, 0x1093E}, {0x10940, 0x1097F}, {0x109B8, 0x109BB}, + {0x109D0, 0x109D1}, {0x10A04, 0x10A04}, {0x10A07, 0x10A0B}, + {0x10A14, 0x10A14}, {0x10A18, 0x10A18}, {0x10A34, 0x10A37}, + {0x10A3B, 0x10A3E}, {0x10A48, 0x10A4F}, {0x10A59, 0x10A5F}, + {0x10AA0, 0x10ABF}, {0x10AE7, 0x10AEA}, {0x10AF7, 0x10AFF}, + {0x10B36, 0x10B38}, {0x10B56, 0x10B57}, {0x10B73, 0x10B77}, + {0x10B92, 0x10B98}, {0x10B9D, 0x10BA8}, {0x10BB0, 0x10BFF}, + {0x10C49, 0x10C7F}, {0x10CB3, 0x10CBF}, {0x10CF3, 0x10CF9}, + {0x10D00, 0x10E5F}, {0x10E7F, 0x10FFF}, {0x1104E, 0x11051}, + {0x11070, 0x1107E}, {0x110C2, 0x110CF}, {0x110E9, 0x110EF}, + {0x110FA, 0x110FF}, {0x11135, 0x11135}, {0x11144, 0x1114F}, + {0x11177, 0x1117F}, {0x111CE, 0x111CF}, {0x111E0, 0x111E0}, + {0x111F5, 0x111FF}, {0x11212, 0x11212}, {0x1123F, 0x1127F}, + {0x11287, 0x11287}, {0x11289, 0x11289}, {0x1128E, 0x1128E}, + {0x1129E, 0x1129E}, {0x112AA, 0x112AF}, {0x112EB, 0x112EF}, + {0x112FA, 0x112FF}, {0x11304, 0x11304}, {0x1130D, 0x1130E}, + {0x11311, 0x11312}, {0x11329, 0x11329}, {0x11331, 0x11331}, + {0x11334, 0x11334}, {0x1133A, 0x1133B}, {0x11345, 0x11346}, + {0x11349, 0x1134A}, {0x1134E, 0x1134F}, {0x11351, 0x11356}, + {0x11358, 0x1135C}, {0x11364, 0x11365}, {0x1136D, 0x1136F}, + {0x11375, 0x113FF}, {0x1145A, 0x1145A}, {0x1145C, 0x1145C}, + {0x1145E, 0x1147F}, {0x114C8, 0x114CF}, {0x114DA, 0x1157F}, + {0x115B6, 0x115B7}, {0x115DE, 0x115FF}, {0x11645, 0x1164F}, + {0x1165A, 0x1165F}, {0x1166D, 0x1167F}, {0x116B8, 0x116BF}, + {0x116CA, 0x116FF}, {0x1171A, 0x1171C}, {0x1172C, 0x1172F}, + {0x11740, 0x1189F}, {0x118F3, 0x118FE}, {0x11900, 0x11ABF}, + {0x11AF9, 0x11BFF}, {0x11C09, 0x11C09}, {0x11C37, 0x11C37}, + {0x11C46, 0x11C4F}, {0x11C6D, 0x11C6F}, {0x11C90, 0x11C91}, + {0x11CA8, 0x11CA8}, {0x11CB7, 0x11FFF}, {0x1239A, 0x123FF}, + {0x1246F, 0x1246F}, {0x12475, 0x1247F}, {0x12544, 0x12FFF}, + {0x1342F, 0x143FF}, {0x14647, 0x167FF}, {0x16A39, 0x16A3F}, + {0x16A5F, 0x16A5F}, {0x16A6A, 0x16A6D}, {0x16A70, 0x16ACF}, + {0x16AEE, 0x16AEF}, {0x16AF6, 0x16AFF}, {0x16B46, 0x16B4F}, + {0x16B5A, 0x16B5A}, {0x16B62, 0x16B62}, {0x16B78, 0x16B7C}, + {0x16B90, 0x16EFF}, {0x16F45, 0x16F4F}, {0x16F7F, 0x16F8E}, + {0x16FA0, 0x16FDF}, {0x16FE1, 0x16FFF}, {0x187ED, 0x187FF}, + {0x18AF3, 0x1AFFF}, {0x1B002, 0x1BBFF}, {0x1BC6B, 0x1BC6F}, + {0x1BC7D, 0x1BC7F}, {0x1BC89, 0x1BC8F}, {0x1BC9A, 0x1BC9B}, + {0x1BCA4, 0x1CFFF}, {0x1D0F6, 0x1D0FF}, {0x1D127, 0x1D128}, + {0x1D1E9, 0x1D1FF}, {0x1D246, 0x1D2FF}, {0x1D357, 0x1D35F}, + {0x1D372, 0x1D3FF}, {0x1D455, 0x1D455}, {0x1D49D, 0x1D49D}, + {0x1D4A0, 0x1D4A1}, {0x1D4A3, 0x1D4A4}, {0x1D4A7, 0x1D4A8}, + {0x1D4AD, 0x1D4AD}, {0x1D4BA, 0x1D4BA}, {0x1D4BC, 0x1D4BC}, + {0x1D4C4, 0x1D4C4}, {0x1D506, 0x1D506}, {0x1D50B, 0x1D50C}, + {0x1D515, 0x1D515}, {0x1D51D, 0x1D51D}, {0x1D53A, 0x1D53A}, + {0x1D53F, 0x1D53F}, {0x1D545, 0x1D545}, {0x1D547, 0x1D549}, + {0x1D551, 0x1D551}, {0x1D6A6, 0x1D6A7}, {0x1D7CC, 0x1D7CD}, + {0x1DA8C, 0x1DA9A}, {0x1DAA0, 0x1DAA0}, {0x1DAB0, 0x1DFFF}, + {0x1E007, 0x1E007}, {0x1E019, 0x1E01A}, {0x1E022, 0x1E022}, + {0x1E025, 0x1E025}, {0x1E02B, 0x1E7FF}, {0x1E8C5, 0x1E8C6}, + {0x1E8D7, 0x1E8FF}, {0x1E94B, 0x1E94F}, {0x1E95A, 0x1E95D}, + {0x1E960, 0x1EDFF}, {0x1EE04, 0x1EE04}, {0x1EE20, 0x1EE20}, + {0x1EE23, 0x1EE23}, {0x1EE25, 0x1EE26}, {0x1EE28, 0x1EE28}, + {0x1EE33, 0x1EE33}, {0x1EE38, 0x1EE38}, {0x1EE3A, 0x1EE3A}, + {0x1EE3C, 0x1EE41}, {0x1EE43, 0x1EE46}, {0x1EE48, 0x1EE48}, + {0x1EE4A, 0x1EE4A}, {0x1EE4C, 0x1EE4C}, {0x1EE50, 0x1EE50}, + {0x1EE53, 0x1EE53}, {0x1EE55, 0x1EE56}, {0x1EE58, 0x1EE58}, + {0x1EE5A, 0x1EE5A}, {0x1EE5C, 0x1EE5C}, {0x1EE5E, 0x1EE5E}, + {0x1EE60, 0x1EE60}, {0x1EE63, 0x1EE63}, {0x1EE65, 0x1EE66}, + {0x1EE6B, 0x1EE6B}, {0x1EE73, 0x1EE73}, {0x1EE78, 0x1EE78}, + {0x1EE7D, 0x1EE7D}, {0x1EE7F, 0x1EE7F}, {0x1EE8A, 0x1EE8A}, + {0x1EE9C, 0x1EEA0}, {0x1EEA4, 0x1EEA4}, {0x1EEAA, 0x1EEAA}, + {0x1EEBC, 0x1EEEF}, {0x1EEF2, 0x1EFFF}, {0x1F02C, 0x1F02F}, + {0x1F094, 0x1F09F}, {0x1F0AF, 0x1F0B0}, {0x1F0C0, 0x1F0C0}, + {0x1F0D0, 0x1F0D0}, {0x1F0F6, 0x1F0FF}, {0x1F10D, 0x1F10F}, + {0x1F12F, 0x1F12F}, {0x1F16C, 0x1F16F}, {0x1F1AD, 0x1F1E5}, + {0x1F203, 0x1F20F}, {0x1F23C, 0x1F23F}, {0x1F249, 0x1F24F}, + {0x1F252, 0x1F2FF}, {0x1F6D3, 0x1F6DF}, {0x1F6ED, 0x1F6EF}, + {0x1F6F7, 0x1F6FF}, {0x1F774, 0x1F77F}, {0x1F7D5, 0x1F7FF}, + {0x1F80C, 0x1F80F}, {0x1F848, 0x1F84F}, {0x1F85A, 0x1F85F}, + {0x1F888, 0x1F88F}, {0x1F8AE, 0x1F90F}, {0x1F91F, 0x1F91F}, + {0x1F928, 0x1F92F}, {0x1F931, 0x1F932}, {0x1F93F, 0x1F93F}, + {0x1F94C, 0x1F94F}, {0x1F95F, 0x1F97F}, {0x1F992, 0x1F9BF}, + {0x1F9C1, 0x1FFFF}, {0x2A6D7, 0x2A6FF}, {0x2B735, 0x2B73F}, + {0x2B81E, 0x2B81F}, {0x2CEA2, 0x2F7FF}, {0x2FA1E, 0xE0000}, + {0xE0002, 0xE001F}, {0xE0080, 0xE00FF}, {0xE01F0, 0xEFFFF}, + {0xFFFFE, 0xFFFFF}, +} + +var neutral = table{ + {0x0000, 0x001F}, {0x007F, 0x007F}, {0x0080, 0x009F}, + {0x00A0, 0x00A0}, {0x00A9, 0x00A9}, {0x00AB, 0x00AB}, + {0x00B5, 0x00B5}, {0x00BB, 0x00BB}, {0x00C0, 0x00C5}, + {0x00C7, 0x00CF}, {0x00D1, 0x00D6}, {0x00D9, 0x00DD}, + {0x00E2, 0x00E5}, {0x00E7, 0x00E7}, {0x00EB, 0x00EB}, + {0x00EE, 0x00EF}, {0x00F1, 0x00F1}, {0x00F4, 0x00F6}, + {0x00FB, 0x00FB}, {0x00FD, 0x00FD}, {0x00FF, 0x00FF}, + {0x0100, 0x0100}, {0x0102, 0x0110}, {0x0112, 0x0112}, + {0x0114, 0x011A}, {0x011C, 0x0125}, {0x0128, 0x012A}, + {0x012C, 0x0130}, {0x0134, 0x0137}, {0x0139, 0x013E}, + {0x0143, 0x0143}, {0x0145, 0x0147}, {0x014C, 0x014C}, + {0x014E, 0x0151}, {0x0154, 0x0165}, {0x0168, 0x016A}, + {0x016C, 0x017F}, {0x0180, 0x01BA}, {0x01BB, 0x01BB}, + {0x01BC, 0x01BF}, {0x01C0, 0x01C3}, {0x01C4, 0x01CD}, + {0x01CF, 0x01CF}, {0x01D1, 0x01D1}, {0x01D3, 0x01D3}, + {0x01D5, 0x01D5}, {0x01D7, 0x01D7}, {0x01D9, 0x01D9}, + {0x01DB, 0x01DB}, {0x01DD, 0x024F}, {0x0250, 0x0250}, + {0x0252, 0x0260}, {0x0262, 0x0293}, {0x0294, 0x0294}, + {0x0295, 0x02AF}, {0x02B0, 0x02C1}, {0x02C2, 0x02C3}, + {0x02C5, 0x02C5}, {0x02C6, 0x02C6}, {0x02C8, 0x02C8}, + {0x02CC, 0x02CC}, {0x02CE, 0x02CF}, {0x02D1, 0x02D1}, + {0x02D2, 0x02D7}, {0x02DC, 0x02DC}, {0x02DE, 0x02DE}, + {0x02E0, 0x02E4}, {0x02E5, 0x02EB}, {0x02EC, 0x02EC}, + {0x02ED, 0x02ED}, {0x02EE, 0x02EE}, {0x02EF, 0x02FF}, + {0x0370, 0x0373}, {0x0374, 0x0374}, {0x0375, 0x0375}, + {0x0376, 0x0377}, {0x037A, 0x037A}, {0x037B, 0x037D}, + {0x037E, 0x037E}, {0x037F, 0x037F}, {0x0384, 0x0385}, + {0x0386, 0x0386}, {0x0387, 0x0387}, {0x0388, 0x038A}, + {0x038C, 0x038C}, {0x038E, 0x0390}, {0x03AA, 0x03B0}, + {0x03C2, 0x03C2}, {0x03CA, 0x03F5}, {0x03F6, 0x03F6}, + {0x03F7, 0x03FF}, {0x0400, 0x0400}, {0x0402, 0x040F}, + {0x0450, 0x0450}, {0x0452, 0x0481}, {0x0482, 0x0482}, + {0x0483, 0x0487}, {0x0488, 0x0489}, {0x048A, 0x04FF}, + {0x0500, 0x052F}, {0x0531, 0x0556}, {0x0559, 0x0559}, + {0x055A, 0x055F}, {0x0561, 0x0587}, {0x0589, 0x0589}, + {0x058A, 0x058A}, {0x058D, 0x058E}, {0x058F, 0x058F}, + {0x0591, 0x05BD}, {0x05BE, 0x05BE}, {0x05BF, 0x05BF}, + {0x05C0, 0x05C0}, {0x05C1, 0x05C2}, {0x05C3, 0x05C3}, + {0x05C4, 0x05C5}, {0x05C6, 0x05C6}, {0x05C7, 0x05C7}, + {0x05D0, 0x05EA}, {0x05F0, 0x05F2}, {0x05F3, 0x05F4}, + {0x0600, 0x0605}, {0x0606, 0x0608}, {0x0609, 0x060A}, + {0x060B, 0x060B}, {0x060C, 0x060D}, {0x060E, 0x060F}, + {0x0610, 0x061A}, {0x061B, 0x061B}, {0x061C, 0x061C}, + {0x061E, 0x061F}, {0x0620, 0x063F}, {0x0640, 0x0640}, + {0x0641, 0x064A}, {0x064B, 0x065F}, {0x0660, 0x0669}, + {0x066A, 0x066D}, {0x066E, 0x066F}, {0x0670, 0x0670}, + {0x0671, 0x06D3}, {0x06D4, 0x06D4}, {0x06D5, 0x06D5}, + {0x06D6, 0x06DC}, {0x06DD, 0x06DD}, {0x06DE, 0x06DE}, + {0x06DF, 0x06E4}, {0x06E5, 0x06E6}, {0x06E7, 0x06E8}, + {0x06E9, 0x06E9}, {0x06EA, 0x06ED}, {0x06EE, 0x06EF}, + {0x06F0, 0x06F9}, {0x06FA, 0x06FC}, {0x06FD, 0x06FE}, + {0x06FF, 0x06FF}, {0x0700, 0x070D}, {0x070F, 0x070F}, + {0x0710, 0x0710}, {0x0711, 0x0711}, {0x0712, 0x072F}, + {0x0730, 0x074A}, {0x074D, 0x074F}, {0x0750, 0x077F}, + {0x0780, 0x07A5}, {0x07A6, 0x07B0}, {0x07B1, 0x07B1}, + {0x07C0, 0x07C9}, {0x07CA, 0x07EA}, {0x07EB, 0x07F3}, + {0x07F4, 0x07F5}, {0x07F6, 0x07F6}, {0x07F7, 0x07F9}, + {0x07FA, 0x07FA}, {0x0800, 0x0815}, {0x0816, 0x0819}, + {0x081A, 0x081A}, {0x081B, 0x0823}, {0x0824, 0x0824}, + {0x0825, 0x0827}, {0x0828, 0x0828}, {0x0829, 0x082D}, + {0x0830, 0x083E}, {0x0840, 0x0858}, {0x0859, 0x085B}, + {0x085E, 0x085E}, {0x08A0, 0x08B4}, {0x08B6, 0x08BD}, + {0x08D4, 0x08E1}, {0x08E2, 0x08E2}, {0x08E3, 0x08FF}, + {0x0900, 0x0902}, {0x0903, 0x0903}, {0x0904, 0x0939}, + {0x093A, 0x093A}, {0x093B, 0x093B}, {0x093C, 0x093C}, + {0x093D, 0x093D}, {0x093E, 0x0940}, {0x0941, 0x0948}, + {0x0949, 0x094C}, {0x094D, 0x094D}, {0x094E, 0x094F}, + {0x0950, 0x0950}, {0x0951, 0x0957}, {0x0958, 0x0961}, + {0x0962, 0x0963}, {0x0964, 0x0965}, {0x0966, 0x096F}, + {0x0970, 0x0970}, {0x0971, 0x0971}, {0x0972, 0x097F}, + {0x0980, 0x0980}, {0x0981, 0x0981}, {0x0982, 0x0983}, + {0x0985, 0x098C}, {0x098F, 0x0990}, {0x0993, 0x09A8}, + {0x09AA, 0x09B0}, {0x09B2, 0x09B2}, {0x09B6, 0x09B9}, + {0x09BC, 0x09BC}, {0x09BD, 0x09BD}, {0x09BE, 0x09C0}, + {0x09C1, 0x09C4}, {0x09C7, 0x09C8}, {0x09CB, 0x09CC}, + {0x09CD, 0x09CD}, {0x09CE, 0x09CE}, {0x09D7, 0x09D7}, + {0x09DC, 0x09DD}, {0x09DF, 0x09E1}, {0x09E2, 0x09E3}, + {0x09E6, 0x09EF}, {0x09F0, 0x09F1}, {0x09F2, 0x09F3}, + {0x09F4, 0x09F9}, {0x09FA, 0x09FA}, {0x09FB, 0x09FB}, + {0x0A01, 0x0A02}, {0x0A03, 0x0A03}, {0x0A05, 0x0A0A}, + {0x0A0F, 0x0A10}, {0x0A13, 0x0A28}, {0x0A2A, 0x0A30}, + {0x0A32, 0x0A33}, {0x0A35, 0x0A36}, {0x0A38, 0x0A39}, + {0x0A3C, 0x0A3C}, {0x0A3E, 0x0A40}, {0x0A41, 0x0A42}, + {0x0A47, 0x0A48}, {0x0A4B, 0x0A4D}, {0x0A51, 0x0A51}, + {0x0A59, 0x0A5C}, {0x0A5E, 0x0A5E}, {0x0A66, 0x0A6F}, + {0x0A70, 0x0A71}, {0x0A72, 0x0A74}, {0x0A75, 0x0A75}, + {0x0A81, 0x0A82}, {0x0A83, 0x0A83}, {0x0A85, 0x0A8D}, + {0x0A8F, 0x0A91}, {0x0A93, 0x0AA8}, {0x0AAA, 0x0AB0}, + {0x0AB2, 0x0AB3}, {0x0AB5, 0x0AB9}, {0x0ABC, 0x0ABC}, + {0x0ABD, 0x0ABD}, {0x0ABE, 0x0AC0}, {0x0AC1, 0x0AC5}, + {0x0AC7, 0x0AC8}, {0x0AC9, 0x0AC9}, {0x0ACB, 0x0ACC}, + {0x0ACD, 0x0ACD}, {0x0AD0, 0x0AD0}, {0x0AE0, 0x0AE1}, + {0x0AE2, 0x0AE3}, {0x0AE6, 0x0AEF}, {0x0AF0, 0x0AF0}, + {0x0AF1, 0x0AF1}, {0x0AF9, 0x0AF9}, {0x0B01, 0x0B01}, + {0x0B02, 0x0B03}, {0x0B05, 0x0B0C}, {0x0B0F, 0x0B10}, + {0x0B13, 0x0B28}, {0x0B2A, 0x0B30}, {0x0B32, 0x0B33}, + {0x0B35, 0x0B39}, {0x0B3C, 0x0B3C}, {0x0B3D, 0x0B3D}, + {0x0B3E, 0x0B3E}, {0x0B3F, 0x0B3F}, {0x0B40, 0x0B40}, + {0x0B41, 0x0B44}, {0x0B47, 0x0B48}, {0x0B4B, 0x0B4C}, + {0x0B4D, 0x0B4D}, {0x0B56, 0x0B56}, {0x0B57, 0x0B57}, + {0x0B5C, 0x0B5D}, {0x0B5F, 0x0B61}, {0x0B62, 0x0B63}, + {0x0B66, 0x0B6F}, {0x0B70, 0x0B70}, {0x0B71, 0x0B71}, + {0x0B72, 0x0B77}, {0x0B82, 0x0B82}, {0x0B83, 0x0B83}, + {0x0B85, 0x0B8A}, {0x0B8E, 0x0B90}, {0x0B92, 0x0B95}, + {0x0B99, 0x0B9A}, {0x0B9C, 0x0B9C}, {0x0B9E, 0x0B9F}, + {0x0BA3, 0x0BA4}, {0x0BA8, 0x0BAA}, {0x0BAE, 0x0BB9}, + {0x0BBE, 0x0BBF}, {0x0BC0, 0x0BC0}, {0x0BC1, 0x0BC2}, + {0x0BC6, 0x0BC8}, {0x0BCA, 0x0BCC}, {0x0BCD, 0x0BCD}, + {0x0BD0, 0x0BD0}, {0x0BD7, 0x0BD7}, {0x0BE6, 0x0BEF}, + {0x0BF0, 0x0BF2}, {0x0BF3, 0x0BF8}, {0x0BF9, 0x0BF9}, + {0x0BFA, 0x0BFA}, {0x0C00, 0x0C00}, {0x0C01, 0x0C03}, + {0x0C05, 0x0C0C}, {0x0C0E, 0x0C10}, {0x0C12, 0x0C28}, + {0x0C2A, 0x0C39}, {0x0C3D, 0x0C3D}, {0x0C3E, 0x0C40}, + {0x0C41, 0x0C44}, {0x0C46, 0x0C48}, {0x0C4A, 0x0C4D}, + {0x0C55, 0x0C56}, {0x0C58, 0x0C5A}, {0x0C60, 0x0C61}, + {0x0C62, 0x0C63}, {0x0C66, 0x0C6F}, {0x0C78, 0x0C7E}, + {0x0C7F, 0x0C7F}, {0x0C80, 0x0C80}, {0x0C81, 0x0C81}, + {0x0C82, 0x0C83}, {0x0C85, 0x0C8C}, {0x0C8E, 0x0C90}, + {0x0C92, 0x0CA8}, {0x0CAA, 0x0CB3}, {0x0CB5, 0x0CB9}, + {0x0CBC, 0x0CBC}, {0x0CBD, 0x0CBD}, {0x0CBE, 0x0CBE}, + {0x0CBF, 0x0CBF}, {0x0CC0, 0x0CC4}, {0x0CC6, 0x0CC6}, + {0x0CC7, 0x0CC8}, {0x0CCA, 0x0CCB}, {0x0CCC, 0x0CCD}, + {0x0CD5, 0x0CD6}, {0x0CDE, 0x0CDE}, {0x0CE0, 0x0CE1}, + {0x0CE2, 0x0CE3}, {0x0CE6, 0x0CEF}, {0x0CF1, 0x0CF2}, + {0x0D01, 0x0D01}, {0x0D02, 0x0D03}, {0x0D05, 0x0D0C}, + {0x0D0E, 0x0D10}, {0x0D12, 0x0D3A}, {0x0D3D, 0x0D3D}, + {0x0D3E, 0x0D40}, {0x0D41, 0x0D44}, {0x0D46, 0x0D48}, + {0x0D4A, 0x0D4C}, {0x0D4D, 0x0D4D}, {0x0D4E, 0x0D4E}, + {0x0D4F, 0x0D4F}, {0x0D54, 0x0D56}, {0x0D57, 0x0D57}, + {0x0D58, 0x0D5E}, {0x0D5F, 0x0D61}, {0x0D62, 0x0D63}, + {0x0D66, 0x0D6F}, {0x0D70, 0x0D78}, {0x0D79, 0x0D79}, + {0x0D7A, 0x0D7F}, {0x0D82, 0x0D83}, {0x0D85, 0x0D96}, + {0x0D9A, 0x0DB1}, {0x0DB3, 0x0DBB}, {0x0DBD, 0x0DBD}, + {0x0DC0, 0x0DC6}, {0x0DCA, 0x0DCA}, {0x0DCF, 0x0DD1}, + {0x0DD2, 0x0DD4}, {0x0DD6, 0x0DD6}, {0x0DD8, 0x0DDF}, + {0x0DE6, 0x0DEF}, {0x0DF2, 0x0DF3}, {0x0DF4, 0x0DF4}, + {0x0E01, 0x0E30}, {0x0E31, 0x0E31}, {0x0E32, 0x0E33}, + {0x0E34, 0x0E3A}, {0x0E3F, 0x0E3F}, {0x0E40, 0x0E45}, + {0x0E46, 0x0E46}, {0x0E47, 0x0E4E}, {0x0E4F, 0x0E4F}, + {0x0E50, 0x0E59}, {0x0E5A, 0x0E5B}, {0x0E81, 0x0E82}, + {0x0E84, 0x0E84}, {0x0E87, 0x0E88}, {0x0E8A, 0x0E8A}, + {0x0E8D, 0x0E8D}, {0x0E94, 0x0E97}, {0x0E99, 0x0E9F}, + {0x0EA1, 0x0EA3}, {0x0EA5, 0x0EA5}, {0x0EA7, 0x0EA7}, + {0x0EAA, 0x0EAB}, {0x0EAD, 0x0EB0}, {0x0EB1, 0x0EB1}, + {0x0EB2, 0x0EB3}, {0x0EB4, 0x0EB9}, {0x0EBB, 0x0EBC}, + {0x0EBD, 0x0EBD}, {0x0EC0, 0x0EC4}, {0x0EC6, 0x0EC6}, + {0x0EC8, 0x0ECD}, {0x0ED0, 0x0ED9}, {0x0EDC, 0x0EDF}, + {0x0F00, 0x0F00}, {0x0F01, 0x0F03}, {0x0F04, 0x0F12}, + {0x0F13, 0x0F13}, {0x0F14, 0x0F14}, {0x0F15, 0x0F17}, + {0x0F18, 0x0F19}, {0x0F1A, 0x0F1F}, {0x0F20, 0x0F29}, + {0x0F2A, 0x0F33}, {0x0F34, 0x0F34}, {0x0F35, 0x0F35}, + {0x0F36, 0x0F36}, {0x0F37, 0x0F37}, {0x0F38, 0x0F38}, + {0x0F39, 0x0F39}, {0x0F3A, 0x0F3A}, {0x0F3B, 0x0F3B}, + {0x0F3C, 0x0F3C}, {0x0F3D, 0x0F3D}, {0x0F3E, 0x0F3F}, + {0x0F40, 0x0F47}, {0x0F49, 0x0F6C}, {0x0F71, 0x0F7E}, + {0x0F7F, 0x0F7F}, {0x0F80, 0x0F84}, {0x0F85, 0x0F85}, + {0x0F86, 0x0F87}, {0x0F88, 0x0F8C}, {0x0F8D, 0x0F97}, + {0x0F99, 0x0FBC}, {0x0FBE, 0x0FC5}, {0x0FC6, 0x0FC6}, + {0x0FC7, 0x0FCC}, {0x0FCE, 0x0FCF}, {0x0FD0, 0x0FD4}, + {0x0FD5, 0x0FD8}, {0x0FD9, 0x0FDA}, {0x1000, 0x102A}, + {0x102B, 0x102C}, {0x102D, 0x1030}, {0x1031, 0x1031}, + {0x1032, 0x1037}, {0x1038, 0x1038}, {0x1039, 0x103A}, + {0x103B, 0x103C}, {0x103D, 0x103E}, {0x103F, 0x103F}, + {0x1040, 0x1049}, {0x104A, 0x104F}, {0x1050, 0x1055}, + {0x1056, 0x1057}, {0x1058, 0x1059}, {0x105A, 0x105D}, + {0x105E, 0x1060}, {0x1061, 0x1061}, {0x1062, 0x1064}, + {0x1065, 0x1066}, {0x1067, 0x106D}, {0x106E, 0x1070}, + {0x1071, 0x1074}, {0x1075, 0x1081}, {0x1082, 0x1082}, + {0x1083, 0x1084}, {0x1085, 0x1086}, {0x1087, 0x108C}, + {0x108D, 0x108D}, {0x108E, 0x108E}, {0x108F, 0x108F}, + {0x1090, 0x1099}, {0x109A, 0x109C}, {0x109D, 0x109D}, + {0x109E, 0x109F}, {0x10A0, 0x10C5}, {0x10C7, 0x10C7}, + {0x10CD, 0x10CD}, {0x10D0, 0x10FA}, {0x10FB, 0x10FB}, + {0x10FC, 0x10FC}, {0x10FD, 0x10FF}, {0x1160, 0x11FF}, + {0x1200, 0x1248}, {0x124A, 0x124D}, {0x1250, 0x1256}, + {0x1258, 0x1258}, {0x125A, 0x125D}, {0x1260, 0x1288}, + {0x128A, 0x128D}, {0x1290, 0x12B0}, {0x12B2, 0x12B5}, + {0x12B8, 0x12BE}, {0x12C0, 0x12C0}, {0x12C2, 0x12C5}, + {0x12C8, 0x12D6}, {0x12D8, 0x1310}, {0x1312, 0x1315}, + {0x1318, 0x135A}, {0x135D, 0x135F}, {0x1360, 0x1368}, + {0x1369, 0x137C}, {0x1380, 0x138F}, {0x1390, 0x1399}, + {0x13A0, 0x13F5}, {0x13F8, 0x13FD}, {0x1400, 0x1400}, + {0x1401, 0x166C}, {0x166D, 0x166E}, {0x166F, 0x167F}, + {0x1680, 0x1680}, {0x1681, 0x169A}, {0x169B, 0x169B}, + {0x169C, 0x169C}, {0x16A0, 0x16EA}, {0x16EB, 0x16ED}, + {0x16EE, 0x16F0}, {0x16F1, 0x16F8}, {0x1700, 0x170C}, + {0x170E, 0x1711}, {0x1712, 0x1714}, {0x1720, 0x1731}, + {0x1732, 0x1734}, {0x1735, 0x1736}, {0x1740, 0x1751}, + {0x1752, 0x1753}, {0x1760, 0x176C}, {0x176E, 0x1770}, + {0x1772, 0x1773}, {0x1780, 0x17B3}, {0x17B4, 0x17B5}, + {0x17B6, 0x17B6}, {0x17B7, 0x17BD}, {0x17BE, 0x17C5}, + {0x17C6, 0x17C6}, {0x17C7, 0x17C8}, {0x17C9, 0x17D3}, + {0x17D4, 0x17D6}, {0x17D7, 0x17D7}, {0x17D8, 0x17DA}, + {0x17DB, 0x17DB}, {0x17DC, 0x17DC}, {0x17DD, 0x17DD}, + {0x17E0, 0x17E9}, {0x17F0, 0x17F9}, {0x1800, 0x1805}, + {0x1806, 0x1806}, {0x1807, 0x180A}, {0x180B, 0x180D}, + {0x180E, 0x180E}, {0x1810, 0x1819}, {0x1820, 0x1842}, + {0x1843, 0x1843}, {0x1844, 0x1877}, {0x1880, 0x1884}, + {0x1885, 0x1886}, {0x1887, 0x18A8}, {0x18A9, 0x18A9}, + {0x18AA, 0x18AA}, {0x18B0, 0x18F5}, {0x1900, 0x191E}, + {0x1920, 0x1922}, {0x1923, 0x1926}, {0x1927, 0x1928}, + {0x1929, 0x192B}, {0x1930, 0x1931}, {0x1932, 0x1932}, + {0x1933, 0x1938}, {0x1939, 0x193B}, {0x1940, 0x1940}, + {0x1944, 0x1945}, {0x1946, 0x194F}, {0x1950, 0x196D}, + {0x1970, 0x1974}, {0x1980, 0x19AB}, {0x19B0, 0x19C9}, + {0x19D0, 0x19D9}, {0x19DA, 0x19DA}, {0x19DE, 0x19DF}, + {0x19E0, 0x19FF}, {0x1A00, 0x1A16}, {0x1A17, 0x1A18}, + {0x1A19, 0x1A1A}, {0x1A1B, 0x1A1B}, {0x1A1E, 0x1A1F}, + {0x1A20, 0x1A54}, {0x1A55, 0x1A55}, {0x1A56, 0x1A56}, + {0x1A57, 0x1A57}, {0x1A58, 0x1A5E}, {0x1A60, 0x1A60}, + {0x1A61, 0x1A61}, {0x1A62, 0x1A62}, {0x1A63, 0x1A64}, + {0x1A65, 0x1A6C}, {0x1A6D, 0x1A72}, {0x1A73, 0x1A7C}, + {0x1A7F, 0x1A7F}, {0x1A80, 0x1A89}, {0x1A90, 0x1A99}, + {0x1AA0, 0x1AA6}, {0x1AA7, 0x1AA7}, {0x1AA8, 0x1AAD}, + {0x1AB0, 0x1ABD}, {0x1ABE, 0x1ABE}, {0x1B00, 0x1B03}, + {0x1B04, 0x1B04}, {0x1B05, 0x1B33}, {0x1B34, 0x1B34}, + {0x1B35, 0x1B35}, {0x1B36, 0x1B3A}, {0x1B3B, 0x1B3B}, + {0x1B3C, 0x1B3C}, {0x1B3D, 0x1B41}, {0x1B42, 0x1B42}, + {0x1B43, 0x1B44}, {0x1B45, 0x1B4B}, {0x1B50, 0x1B59}, + {0x1B5A, 0x1B60}, {0x1B61, 0x1B6A}, {0x1B6B, 0x1B73}, + {0x1B74, 0x1B7C}, {0x1B80, 0x1B81}, {0x1B82, 0x1B82}, + {0x1B83, 0x1BA0}, {0x1BA1, 0x1BA1}, {0x1BA2, 0x1BA5}, + {0x1BA6, 0x1BA7}, {0x1BA8, 0x1BA9}, {0x1BAA, 0x1BAA}, + {0x1BAB, 0x1BAD}, {0x1BAE, 0x1BAF}, {0x1BB0, 0x1BB9}, + {0x1BBA, 0x1BBF}, {0x1BC0, 0x1BE5}, {0x1BE6, 0x1BE6}, + {0x1BE7, 0x1BE7}, {0x1BE8, 0x1BE9}, {0x1BEA, 0x1BEC}, + {0x1BED, 0x1BED}, {0x1BEE, 0x1BEE}, {0x1BEF, 0x1BF1}, + {0x1BF2, 0x1BF3}, {0x1BFC, 0x1BFF}, {0x1C00, 0x1C23}, + {0x1C24, 0x1C2B}, {0x1C2C, 0x1C33}, {0x1C34, 0x1C35}, + {0x1C36, 0x1C37}, {0x1C3B, 0x1C3F}, {0x1C40, 0x1C49}, + {0x1C4D, 0x1C4F}, {0x1C50, 0x1C59}, {0x1C5A, 0x1C77}, + {0x1C78, 0x1C7D}, {0x1C7E, 0x1C7F}, {0x1C80, 0x1C88}, + {0x1CC0, 0x1CC7}, {0x1CD0, 0x1CD2}, {0x1CD3, 0x1CD3}, + {0x1CD4, 0x1CE0}, {0x1CE1, 0x1CE1}, {0x1CE2, 0x1CE8}, + {0x1CE9, 0x1CEC}, {0x1CED, 0x1CED}, {0x1CEE, 0x1CF1}, + {0x1CF2, 0x1CF3}, {0x1CF4, 0x1CF4}, {0x1CF5, 0x1CF6}, + {0x1CF8, 0x1CF9}, {0x1D00, 0x1D2B}, {0x1D2C, 0x1D6A}, + {0x1D6B, 0x1D77}, {0x1D78, 0x1D78}, {0x1D79, 0x1D7F}, + {0x1D80, 0x1D9A}, {0x1D9B, 0x1DBF}, {0x1DC0, 0x1DF5}, + {0x1DFB, 0x1DFF}, {0x1E00, 0x1EFF}, {0x1F00, 0x1F15}, + {0x1F18, 0x1F1D}, {0x1F20, 0x1F45}, {0x1F48, 0x1F4D}, + {0x1F50, 0x1F57}, {0x1F59, 0x1F59}, {0x1F5B, 0x1F5B}, + {0x1F5D, 0x1F5D}, {0x1F5F, 0x1F7D}, {0x1F80, 0x1FB4}, + {0x1FB6, 0x1FBC}, {0x1FBD, 0x1FBD}, {0x1FBE, 0x1FBE}, + {0x1FBF, 0x1FC1}, {0x1FC2, 0x1FC4}, {0x1FC6, 0x1FCC}, + {0x1FCD, 0x1FCF}, {0x1FD0, 0x1FD3}, {0x1FD6, 0x1FDB}, + {0x1FDD, 0x1FDF}, {0x1FE0, 0x1FEC}, {0x1FED, 0x1FEF}, + {0x1FF2, 0x1FF4}, {0x1FF6, 0x1FFC}, {0x1FFD, 0x1FFE}, + {0x2000, 0x200A}, {0x200B, 0x200F}, {0x2011, 0x2012}, + {0x2017, 0x2017}, {0x201A, 0x201A}, {0x201B, 0x201B}, + {0x201E, 0x201E}, {0x201F, 0x201F}, {0x2023, 0x2023}, + {0x2028, 0x2028}, {0x2029, 0x2029}, {0x202A, 0x202E}, + {0x202F, 0x202F}, {0x2031, 0x2031}, {0x2034, 0x2034}, + {0x2036, 0x2038}, {0x2039, 0x2039}, {0x203A, 0x203A}, + {0x203C, 0x203D}, {0x203F, 0x2040}, {0x2041, 0x2043}, + {0x2044, 0x2044}, {0x2045, 0x2045}, {0x2046, 0x2046}, + {0x2047, 0x2051}, {0x2052, 0x2052}, {0x2053, 0x2053}, + {0x2054, 0x2054}, {0x2055, 0x205E}, {0x205F, 0x205F}, + {0x2060, 0x2064}, {0x2066, 0x206F}, {0x2070, 0x2070}, + {0x2071, 0x2071}, {0x2075, 0x2079}, {0x207A, 0x207C}, + {0x207D, 0x207D}, {0x207E, 0x207E}, {0x2080, 0x2080}, + {0x2085, 0x2089}, {0x208A, 0x208C}, {0x208D, 0x208D}, + {0x208E, 0x208E}, {0x2090, 0x209C}, {0x20A0, 0x20A8}, + {0x20AA, 0x20AB}, {0x20AD, 0x20BE}, {0x20D0, 0x20DC}, + {0x20DD, 0x20E0}, {0x20E1, 0x20E1}, {0x20E2, 0x20E4}, + {0x20E5, 0x20F0}, {0x2100, 0x2101}, {0x2102, 0x2102}, + {0x2104, 0x2104}, {0x2106, 0x2106}, {0x2107, 0x2107}, + {0x2108, 0x2108}, {0x210A, 0x2112}, {0x2114, 0x2114}, + {0x2115, 0x2115}, {0x2117, 0x2117}, {0x2118, 0x2118}, + {0x2119, 0x211D}, {0x211E, 0x2120}, {0x2123, 0x2123}, + {0x2124, 0x2124}, {0x2125, 0x2125}, {0x2127, 0x2127}, + {0x2128, 0x2128}, {0x2129, 0x2129}, {0x212A, 0x212A}, + {0x212C, 0x212D}, {0x212E, 0x212E}, {0x212F, 0x2134}, + {0x2135, 0x2138}, {0x2139, 0x2139}, {0x213A, 0x213B}, + {0x213C, 0x213F}, {0x2140, 0x2144}, {0x2145, 0x2149}, + {0x214A, 0x214A}, {0x214B, 0x214B}, {0x214C, 0x214D}, + {0x214E, 0x214E}, {0x214F, 0x214F}, {0x2150, 0x2152}, + {0x2155, 0x215A}, {0x215F, 0x215F}, {0x216C, 0x216F}, + {0x217A, 0x2182}, {0x2183, 0x2184}, {0x2185, 0x2188}, + {0x218A, 0x218B}, {0x219A, 0x219B}, {0x219C, 0x219F}, + {0x21A0, 0x21A0}, {0x21A1, 0x21A2}, {0x21A3, 0x21A3}, + {0x21A4, 0x21A5}, {0x21A6, 0x21A6}, {0x21A7, 0x21AD}, + {0x21AE, 0x21AE}, {0x21AF, 0x21B7}, {0x21BA, 0x21CD}, + {0x21CE, 0x21CF}, {0x21D0, 0x21D1}, {0x21D3, 0x21D3}, + {0x21D5, 0x21E6}, {0x21E8, 0x21F3}, {0x21F4, 0x21FF}, + {0x2201, 0x2201}, {0x2204, 0x2206}, {0x2209, 0x220A}, + {0x220C, 0x220E}, {0x2210, 0x2210}, {0x2212, 0x2214}, + {0x2216, 0x2219}, {0x221B, 0x221C}, {0x2221, 0x2222}, + {0x2224, 0x2224}, {0x2226, 0x2226}, {0x222D, 0x222D}, + {0x222F, 0x2233}, {0x2238, 0x223B}, {0x223E, 0x2247}, + {0x2249, 0x224B}, {0x224D, 0x2251}, {0x2253, 0x225F}, + {0x2262, 0x2263}, {0x2268, 0x2269}, {0x226C, 0x226D}, + {0x2270, 0x2281}, {0x2284, 0x2285}, {0x2288, 0x2294}, + {0x2296, 0x2298}, {0x229A, 0x22A4}, {0x22A6, 0x22BE}, + {0x22C0, 0x22FF}, {0x2300, 0x2307}, {0x2308, 0x2308}, + {0x2309, 0x2309}, {0x230A, 0x230A}, {0x230B, 0x230B}, + {0x230C, 0x2311}, {0x2313, 0x2319}, {0x231C, 0x231F}, + {0x2320, 0x2321}, {0x2322, 0x2328}, {0x232B, 0x237B}, + {0x237C, 0x237C}, {0x237D, 0x239A}, {0x239B, 0x23B3}, + {0x23B4, 0x23DB}, {0x23DC, 0x23E1}, {0x23E2, 0x23E8}, + {0x23ED, 0x23EF}, {0x23F1, 0x23F2}, {0x23F4, 0x23FE}, + {0x2400, 0x2426}, {0x2440, 0x244A}, {0x24EA, 0x24EA}, + {0x254C, 0x254F}, {0x2574, 0x257F}, {0x2590, 0x2591}, + {0x2596, 0x259F}, {0x25A2, 0x25A2}, {0x25AA, 0x25B1}, + {0x25B4, 0x25B5}, {0x25B8, 0x25BB}, {0x25BE, 0x25BF}, + {0x25C2, 0x25C5}, {0x25C9, 0x25CA}, {0x25CC, 0x25CD}, + {0x25D2, 0x25E1}, {0x25E6, 0x25EE}, {0x25F0, 0x25F7}, + {0x25F8, 0x25FC}, {0x25FF, 0x25FF}, {0x2600, 0x2604}, + {0x2607, 0x2608}, {0x260A, 0x260D}, {0x2610, 0x2613}, + {0x2616, 0x261B}, {0x261D, 0x261D}, {0x261F, 0x263F}, + {0x2641, 0x2641}, {0x2643, 0x2647}, {0x2654, 0x265F}, + {0x2662, 0x2662}, {0x2666, 0x2666}, {0x266B, 0x266B}, + {0x266E, 0x266E}, {0x2670, 0x267E}, {0x2680, 0x2692}, + {0x2694, 0x269D}, {0x26A0, 0x26A0}, {0x26A2, 0x26A9}, + {0x26AC, 0x26BC}, {0x26C0, 0x26C3}, {0x26E2, 0x26E2}, + {0x26E4, 0x26E7}, {0x2700, 0x2704}, {0x2706, 0x2709}, + {0x270C, 0x2727}, {0x2729, 0x273C}, {0x273E, 0x274B}, + {0x274D, 0x274D}, {0x274F, 0x2752}, {0x2756, 0x2756}, + {0x2758, 0x2767}, {0x2768, 0x2768}, {0x2769, 0x2769}, + {0x276A, 0x276A}, {0x276B, 0x276B}, {0x276C, 0x276C}, + {0x276D, 0x276D}, {0x276E, 0x276E}, {0x276F, 0x276F}, + {0x2770, 0x2770}, {0x2771, 0x2771}, {0x2772, 0x2772}, + {0x2773, 0x2773}, {0x2774, 0x2774}, {0x2775, 0x2775}, + {0x2780, 0x2793}, {0x2794, 0x2794}, {0x2798, 0x27AF}, + {0x27B1, 0x27BE}, {0x27C0, 0x27C4}, {0x27C5, 0x27C5}, + {0x27C6, 0x27C6}, {0x27C7, 0x27E5}, {0x27EE, 0x27EE}, + {0x27EF, 0x27EF}, {0x27F0, 0x27FF}, {0x2800, 0x28FF}, + {0x2900, 0x297F}, {0x2980, 0x2982}, {0x2983, 0x2983}, + {0x2984, 0x2984}, {0x2987, 0x2987}, {0x2988, 0x2988}, + {0x2989, 0x2989}, {0x298A, 0x298A}, {0x298B, 0x298B}, + {0x298C, 0x298C}, {0x298D, 0x298D}, {0x298E, 0x298E}, + {0x298F, 0x298F}, {0x2990, 0x2990}, {0x2991, 0x2991}, + {0x2992, 0x2992}, {0x2993, 0x2993}, {0x2994, 0x2994}, + {0x2995, 0x2995}, {0x2996, 0x2996}, {0x2997, 0x2997}, + {0x2998, 0x2998}, {0x2999, 0x29D7}, {0x29D8, 0x29D8}, + {0x29D9, 0x29D9}, {0x29DA, 0x29DA}, {0x29DB, 0x29DB}, + {0x29DC, 0x29FB}, {0x29FC, 0x29FC}, {0x29FD, 0x29FD}, + {0x29FE, 0x29FF}, {0x2A00, 0x2AFF}, {0x2B00, 0x2B1A}, + {0x2B1D, 0x2B2F}, {0x2B30, 0x2B44}, {0x2B45, 0x2B46}, + {0x2B47, 0x2B4C}, {0x2B4D, 0x2B4F}, {0x2B51, 0x2B54}, + {0x2B5A, 0x2B73}, {0x2B76, 0x2B95}, {0x2B98, 0x2BB9}, + {0x2BBD, 0x2BC8}, {0x2BCA, 0x2BD1}, {0x2BEC, 0x2BEF}, + {0x2C00, 0x2C2E}, {0x2C30, 0x2C5E}, {0x2C60, 0x2C7B}, + {0x2C7C, 0x2C7D}, {0x2C7E, 0x2C7F}, {0x2C80, 0x2CE4}, + {0x2CE5, 0x2CEA}, {0x2CEB, 0x2CEE}, {0x2CEF, 0x2CF1}, + {0x2CF2, 0x2CF3}, {0x2CF9, 0x2CFC}, {0x2CFD, 0x2CFD}, + {0x2CFE, 0x2CFF}, {0x2D00, 0x2D25}, {0x2D27, 0x2D27}, + {0x2D2D, 0x2D2D}, {0x2D30, 0x2D67}, {0x2D6F, 0x2D6F}, + {0x2D70, 0x2D70}, {0x2D7F, 0x2D7F}, {0x2D80, 0x2D96}, + {0x2DA0, 0x2DA6}, {0x2DA8, 0x2DAE}, {0x2DB0, 0x2DB6}, + {0x2DB8, 0x2DBE}, {0x2DC0, 0x2DC6}, {0x2DC8, 0x2DCE}, + {0x2DD0, 0x2DD6}, {0x2DD8, 0x2DDE}, {0x2DE0, 0x2DFF}, + {0x2E00, 0x2E01}, {0x2E02, 0x2E02}, {0x2E03, 0x2E03}, + {0x2E04, 0x2E04}, {0x2E05, 0x2E05}, {0x2E06, 0x2E08}, + {0x2E09, 0x2E09}, {0x2E0A, 0x2E0A}, {0x2E0B, 0x2E0B}, + {0x2E0C, 0x2E0C}, {0x2E0D, 0x2E0D}, {0x2E0E, 0x2E16}, + {0x2E17, 0x2E17}, {0x2E18, 0x2E19}, {0x2E1A, 0x2E1A}, + {0x2E1B, 0x2E1B}, {0x2E1C, 0x2E1C}, {0x2E1D, 0x2E1D}, + {0x2E1E, 0x2E1F}, {0x2E20, 0x2E20}, {0x2E21, 0x2E21}, + {0x2E22, 0x2E22}, {0x2E23, 0x2E23}, {0x2E24, 0x2E24}, + {0x2E25, 0x2E25}, {0x2E26, 0x2E26}, {0x2E27, 0x2E27}, + {0x2E28, 0x2E28}, {0x2E29, 0x2E29}, {0x2E2A, 0x2E2E}, + {0x2E2F, 0x2E2F}, {0x2E30, 0x2E39}, {0x2E3A, 0x2E3B}, + {0x2E3C, 0x2E3F}, {0x2E40, 0x2E40}, {0x2E41, 0x2E41}, + {0x2E42, 0x2E42}, {0x2E43, 0x2E44}, {0x303F, 0x303F}, + {0x4DC0, 0x4DFF}, {0xA4D0, 0xA4F7}, {0xA4F8, 0xA4FD}, + {0xA4FE, 0xA4FF}, {0xA500, 0xA60B}, {0xA60C, 0xA60C}, + {0xA60D, 0xA60F}, {0xA610, 0xA61F}, {0xA620, 0xA629}, + {0xA62A, 0xA62B}, {0xA640, 0xA66D}, {0xA66E, 0xA66E}, + {0xA66F, 0xA66F}, {0xA670, 0xA672}, {0xA673, 0xA673}, + {0xA674, 0xA67D}, {0xA67E, 0xA67E}, {0xA67F, 0xA67F}, + {0xA680, 0xA69B}, {0xA69C, 0xA69D}, {0xA69E, 0xA69F}, + {0xA6A0, 0xA6E5}, {0xA6E6, 0xA6EF}, {0xA6F0, 0xA6F1}, + {0xA6F2, 0xA6F7}, {0xA700, 0xA716}, {0xA717, 0xA71F}, + {0xA720, 0xA721}, {0xA722, 0xA76F}, {0xA770, 0xA770}, + {0xA771, 0xA787}, {0xA788, 0xA788}, {0xA789, 0xA78A}, + {0xA78B, 0xA78E}, {0xA78F, 0xA78F}, {0xA790, 0xA7AE}, + {0xA7B0, 0xA7B7}, {0xA7F7, 0xA7F7}, {0xA7F8, 0xA7F9}, + {0xA7FA, 0xA7FA}, {0xA7FB, 0xA7FF}, {0xA800, 0xA801}, + {0xA802, 0xA802}, {0xA803, 0xA805}, {0xA806, 0xA806}, + {0xA807, 0xA80A}, {0xA80B, 0xA80B}, {0xA80C, 0xA822}, + {0xA823, 0xA824}, {0xA825, 0xA826}, {0xA827, 0xA827}, + {0xA828, 0xA82B}, {0xA830, 0xA835}, {0xA836, 0xA837}, + {0xA838, 0xA838}, {0xA839, 0xA839}, {0xA840, 0xA873}, + {0xA874, 0xA877}, {0xA880, 0xA881}, {0xA882, 0xA8B3}, + {0xA8B4, 0xA8C3}, {0xA8C4, 0xA8C5}, {0xA8CE, 0xA8CF}, + {0xA8D0, 0xA8D9}, {0xA8E0, 0xA8F1}, {0xA8F2, 0xA8F7}, + {0xA8F8, 0xA8FA}, {0xA8FB, 0xA8FB}, {0xA8FC, 0xA8FC}, + {0xA8FD, 0xA8FD}, {0xA900, 0xA909}, {0xA90A, 0xA925}, + {0xA926, 0xA92D}, {0xA92E, 0xA92F}, {0xA930, 0xA946}, + {0xA947, 0xA951}, {0xA952, 0xA953}, {0xA95F, 0xA95F}, + {0xA980, 0xA982}, {0xA983, 0xA983}, {0xA984, 0xA9B2}, + {0xA9B3, 0xA9B3}, {0xA9B4, 0xA9B5}, {0xA9B6, 0xA9B9}, + {0xA9BA, 0xA9BB}, {0xA9BC, 0xA9BC}, {0xA9BD, 0xA9C0}, + {0xA9C1, 0xA9CD}, {0xA9CF, 0xA9CF}, {0xA9D0, 0xA9D9}, + {0xA9DE, 0xA9DF}, {0xA9E0, 0xA9E4}, {0xA9E5, 0xA9E5}, + {0xA9E6, 0xA9E6}, {0xA9E7, 0xA9EF}, {0xA9F0, 0xA9F9}, + {0xA9FA, 0xA9FE}, {0xAA00, 0xAA28}, {0xAA29, 0xAA2E}, + {0xAA2F, 0xAA30}, {0xAA31, 0xAA32}, {0xAA33, 0xAA34}, + {0xAA35, 0xAA36}, {0xAA40, 0xAA42}, {0xAA43, 0xAA43}, + {0xAA44, 0xAA4B}, {0xAA4C, 0xAA4C}, {0xAA4D, 0xAA4D}, + {0xAA50, 0xAA59}, {0xAA5C, 0xAA5F}, {0xAA60, 0xAA6F}, + {0xAA70, 0xAA70}, {0xAA71, 0xAA76}, {0xAA77, 0xAA79}, + {0xAA7A, 0xAA7A}, {0xAA7B, 0xAA7B}, {0xAA7C, 0xAA7C}, + {0xAA7D, 0xAA7D}, {0xAA7E, 0xAA7F}, {0xAA80, 0xAAAF}, + {0xAAB0, 0xAAB0}, {0xAAB1, 0xAAB1}, {0xAAB2, 0xAAB4}, + {0xAAB5, 0xAAB6}, {0xAAB7, 0xAAB8}, {0xAAB9, 0xAABD}, + {0xAABE, 0xAABF}, {0xAAC0, 0xAAC0}, {0xAAC1, 0xAAC1}, + {0xAAC2, 0xAAC2}, {0xAADB, 0xAADC}, {0xAADD, 0xAADD}, + {0xAADE, 0xAADF}, {0xAAE0, 0xAAEA}, {0xAAEB, 0xAAEB}, + {0xAAEC, 0xAAED}, {0xAAEE, 0xAAEF}, {0xAAF0, 0xAAF1}, + {0xAAF2, 0xAAF2}, {0xAAF3, 0xAAF4}, {0xAAF5, 0xAAF5}, + {0xAAF6, 0xAAF6}, {0xAB01, 0xAB06}, {0xAB09, 0xAB0E}, + {0xAB11, 0xAB16}, {0xAB20, 0xAB26}, {0xAB28, 0xAB2E}, + {0xAB30, 0xAB5A}, {0xAB5B, 0xAB5B}, {0xAB5C, 0xAB5F}, + {0xAB60, 0xAB65}, {0xAB70, 0xABBF}, {0xABC0, 0xABE2}, + {0xABE3, 0xABE4}, {0xABE5, 0xABE5}, {0xABE6, 0xABE7}, + {0xABE8, 0xABE8}, {0xABE9, 0xABEA}, {0xABEB, 0xABEB}, + {0xABEC, 0xABEC}, {0xABED, 0xABED}, {0xABF0, 0xABF9}, + {0xD7B0, 0xD7C6}, {0xD7CB, 0xD7FB}, {0xD800, 0xDB7F}, + {0xDB80, 0xDBFF}, {0xDC00, 0xDFFF}, {0xFB00, 0xFB06}, + {0xFB13, 0xFB17}, {0xFB1D, 0xFB1D}, {0xFB1E, 0xFB1E}, + {0xFB1F, 0xFB28}, {0xFB29, 0xFB29}, {0xFB2A, 0xFB36}, + {0xFB38, 0xFB3C}, {0xFB3E, 0xFB3E}, {0xFB40, 0xFB41}, + {0xFB43, 0xFB44}, {0xFB46, 0xFB4F}, {0xFB50, 0xFBB1}, + {0xFBB2, 0xFBC1}, {0xFBD3, 0xFD3D}, {0xFD3E, 0xFD3E}, + {0xFD3F, 0xFD3F}, {0xFD50, 0xFD8F}, {0xFD92, 0xFDC7}, + {0xFDF0, 0xFDFB}, {0xFDFC, 0xFDFC}, {0xFDFD, 0xFDFD}, + {0xFE20, 0xFE2F}, {0xFE70, 0xFE74}, {0xFE76, 0xFEFC}, + {0xFEFF, 0xFEFF}, {0xFFF9, 0xFFFB}, {0xFFFC, 0xFFFC}, + {0x10000, 0x1000B}, {0x1000D, 0x10026}, {0x10028, 0x1003A}, + {0x1003C, 0x1003D}, {0x1003F, 0x1004D}, {0x10050, 0x1005D}, + {0x10080, 0x100FA}, {0x10100, 0x10102}, {0x10107, 0x10133}, + {0x10137, 0x1013F}, {0x10140, 0x10174}, {0x10175, 0x10178}, + {0x10179, 0x10189}, {0x1018A, 0x1018B}, {0x1018C, 0x1018E}, + {0x10190, 0x1019B}, {0x101A0, 0x101A0}, {0x101D0, 0x101FC}, + {0x101FD, 0x101FD}, {0x10280, 0x1029C}, {0x102A0, 0x102D0}, + {0x102E0, 0x102E0}, {0x102E1, 0x102FB}, {0x10300, 0x1031F}, + {0x10320, 0x10323}, {0x10330, 0x10340}, {0x10341, 0x10341}, + {0x10342, 0x10349}, {0x1034A, 0x1034A}, {0x10350, 0x10375}, + {0x10376, 0x1037A}, {0x10380, 0x1039D}, {0x1039F, 0x1039F}, + {0x103A0, 0x103C3}, {0x103C8, 0x103CF}, {0x103D0, 0x103D0}, + {0x103D1, 0x103D5}, {0x10400, 0x1044F}, {0x10450, 0x1047F}, + {0x10480, 0x1049D}, {0x104A0, 0x104A9}, {0x104B0, 0x104D3}, + {0x104D8, 0x104FB}, {0x10500, 0x10527}, {0x10530, 0x10563}, + {0x1056F, 0x1056F}, {0x10600, 0x10736}, {0x10740, 0x10755}, + {0x10760, 0x10767}, {0x10800, 0x10805}, {0x10808, 0x10808}, + {0x1080A, 0x10835}, {0x10837, 0x10838}, {0x1083C, 0x1083C}, + {0x1083F, 0x1083F}, {0x10840, 0x10855}, {0x10857, 0x10857}, + {0x10858, 0x1085F}, {0x10860, 0x10876}, {0x10877, 0x10878}, + {0x10879, 0x1087F}, {0x10880, 0x1089E}, {0x108A7, 0x108AF}, + {0x108E0, 0x108F2}, {0x108F4, 0x108F5}, {0x108FB, 0x108FF}, + {0x10900, 0x10915}, {0x10916, 0x1091B}, {0x1091F, 0x1091F}, + {0x10920, 0x10939}, {0x1093F, 0x1093F}, {0x10980, 0x1099F}, + {0x109A0, 0x109B7}, {0x109BC, 0x109BD}, {0x109BE, 0x109BF}, + {0x109C0, 0x109CF}, {0x109D2, 0x109FF}, {0x10A00, 0x10A00}, + {0x10A01, 0x10A03}, {0x10A05, 0x10A06}, {0x10A0C, 0x10A0F}, + {0x10A10, 0x10A13}, {0x10A15, 0x10A17}, {0x10A19, 0x10A33}, + {0x10A38, 0x10A3A}, {0x10A3F, 0x10A3F}, {0x10A40, 0x10A47}, + {0x10A50, 0x10A58}, {0x10A60, 0x10A7C}, {0x10A7D, 0x10A7E}, + {0x10A7F, 0x10A7F}, {0x10A80, 0x10A9C}, {0x10A9D, 0x10A9F}, + {0x10AC0, 0x10AC7}, {0x10AC8, 0x10AC8}, {0x10AC9, 0x10AE4}, + {0x10AE5, 0x10AE6}, {0x10AEB, 0x10AEF}, {0x10AF0, 0x10AF6}, + {0x10B00, 0x10B35}, {0x10B39, 0x10B3F}, {0x10B40, 0x10B55}, + {0x10B58, 0x10B5F}, {0x10B60, 0x10B72}, {0x10B78, 0x10B7F}, + {0x10B80, 0x10B91}, {0x10B99, 0x10B9C}, {0x10BA9, 0x10BAF}, + {0x10C00, 0x10C48}, {0x10C80, 0x10CB2}, {0x10CC0, 0x10CF2}, + {0x10CFA, 0x10CFF}, {0x10E60, 0x10E7E}, {0x11000, 0x11000}, + {0x11001, 0x11001}, {0x11002, 0x11002}, {0x11003, 0x11037}, + {0x11038, 0x11046}, {0x11047, 0x1104D}, {0x11052, 0x11065}, + {0x11066, 0x1106F}, {0x1107F, 0x1107F}, {0x11080, 0x11081}, + {0x11082, 0x11082}, {0x11083, 0x110AF}, {0x110B0, 0x110B2}, + {0x110B3, 0x110B6}, {0x110B7, 0x110B8}, {0x110B9, 0x110BA}, + {0x110BB, 0x110BC}, {0x110BD, 0x110BD}, {0x110BE, 0x110C1}, + {0x110D0, 0x110E8}, {0x110F0, 0x110F9}, {0x11100, 0x11102}, + {0x11103, 0x11126}, {0x11127, 0x1112B}, {0x1112C, 0x1112C}, + {0x1112D, 0x11134}, {0x11136, 0x1113F}, {0x11140, 0x11143}, + {0x11150, 0x11172}, {0x11173, 0x11173}, {0x11174, 0x11175}, + {0x11176, 0x11176}, {0x11180, 0x11181}, {0x11182, 0x11182}, + {0x11183, 0x111B2}, {0x111B3, 0x111B5}, {0x111B6, 0x111BE}, + {0x111BF, 0x111C0}, {0x111C1, 0x111C4}, {0x111C5, 0x111C9}, + {0x111CA, 0x111CC}, {0x111CD, 0x111CD}, {0x111D0, 0x111D9}, + {0x111DA, 0x111DA}, {0x111DB, 0x111DB}, {0x111DC, 0x111DC}, + {0x111DD, 0x111DF}, {0x111E1, 0x111F4}, {0x11200, 0x11211}, + {0x11213, 0x1122B}, {0x1122C, 0x1122E}, {0x1122F, 0x11231}, + {0x11232, 0x11233}, {0x11234, 0x11234}, {0x11235, 0x11235}, + {0x11236, 0x11237}, {0x11238, 0x1123D}, {0x1123E, 0x1123E}, + {0x11280, 0x11286}, {0x11288, 0x11288}, {0x1128A, 0x1128D}, + {0x1128F, 0x1129D}, {0x1129F, 0x112A8}, {0x112A9, 0x112A9}, + {0x112B0, 0x112DE}, {0x112DF, 0x112DF}, {0x112E0, 0x112E2}, + {0x112E3, 0x112EA}, {0x112F0, 0x112F9}, {0x11300, 0x11301}, + {0x11302, 0x11303}, {0x11305, 0x1130C}, {0x1130F, 0x11310}, + {0x11313, 0x11328}, {0x1132A, 0x11330}, {0x11332, 0x11333}, + {0x11335, 0x11339}, {0x1133C, 0x1133C}, {0x1133D, 0x1133D}, + {0x1133E, 0x1133F}, {0x11340, 0x11340}, {0x11341, 0x11344}, + {0x11347, 0x11348}, {0x1134B, 0x1134D}, {0x11350, 0x11350}, + {0x11357, 0x11357}, {0x1135D, 0x11361}, {0x11362, 0x11363}, + {0x11366, 0x1136C}, {0x11370, 0x11374}, {0x11400, 0x11434}, + {0x11435, 0x11437}, {0x11438, 0x1143F}, {0x11440, 0x11441}, + {0x11442, 0x11444}, {0x11445, 0x11445}, {0x11446, 0x11446}, + {0x11447, 0x1144A}, {0x1144B, 0x1144F}, {0x11450, 0x11459}, + {0x1145B, 0x1145B}, {0x1145D, 0x1145D}, {0x11480, 0x114AF}, + {0x114B0, 0x114B2}, {0x114B3, 0x114B8}, {0x114B9, 0x114B9}, + {0x114BA, 0x114BA}, {0x114BB, 0x114BE}, {0x114BF, 0x114C0}, + {0x114C1, 0x114C1}, {0x114C2, 0x114C3}, {0x114C4, 0x114C5}, + {0x114C6, 0x114C6}, {0x114C7, 0x114C7}, {0x114D0, 0x114D9}, + {0x11580, 0x115AE}, {0x115AF, 0x115B1}, {0x115B2, 0x115B5}, + {0x115B8, 0x115BB}, {0x115BC, 0x115BD}, {0x115BE, 0x115BE}, + {0x115BF, 0x115C0}, {0x115C1, 0x115D7}, {0x115D8, 0x115DB}, + {0x115DC, 0x115DD}, {0x11600, 0x1162F}, {0x11630, 0x11632}, + {0x11633, 0x1163A}, {0x1163B, 0x1163C}, {0x1163D, 0x1163D}, + {0x1163E, 0x1163E}, {0x1163F, 0x11640}, {0x11641, 0x11643}, + {0x11644, 0x11644}, {0x11650, 0x11659}, {0x11660, 0x1166C}, + {0x11680, 0x116AA}, {0x116AB, 0x116AB}, {0x116AC, 0x116AC}, + {0x116AD, 0x116AD}, {0x116AE, 0x116AF}, {0x116B0, 0x116B5}, + {0x116B6, 0x116B6}, {0x116B7, 0x116B7}, {0x116C0, 0x116C9}, + {0x11700, 0x11719}, {0x1171D, 0x1171F}, {0x11720, 0x11721}, + {0x11722, 0x11725}, {0x11726, 0x11726}, {0x11727, 0x1172B}, + {0x11730, 0x11739}, {0x1173A, 0x1173B}, {0x1173C, 0x1173E}, + {0x1173F, 0x1173F}, {0x118A0, 0x118DF}, {0x118E0, 0x118E9}, + {0x118EA, 0x118F2}, {0x118FF, 0x118FF}, {0x11AC0, 0x11AF8}, + {0x11C00, 0x11C08}, {0x11C0A, 0x11C2E}, {0x11C2F, 0x11C2F}, + {0x11C30, 0x11C36}, {0x11C38, 0x11C3D}, {0x11C3E, 0x11C3E}, + {0x11C3F, 0x11C3F}, {0x11C40, 0x11C40}, {0x11C41, 0x11C45}, + {0x11C50, 0x11C59}, {0x11C5A, 0x11C6C}, {0x11C70, 0x11C71}, + {0x11C72, 0x11C8F}, {0x11C92, 0x11CA7}, {0x11CA9, 0x11CA9}, + {0x11CAA, 0x11CB0}, {0x11CB1, 0x11CB1}, {0x11CB2, 0x11CB3}, + {0x11CB4, 0x11CB4}, {0x11CB5, 0x11CB6}, {0x12000, 0x12399}, + {0x12400, 0x1246E}, {0x12470, 0x12474}, {0x12480, 0x12543}, + {0x13000, 0x1342E}, {0x14400, 0x14646}, {0x16800, 0x16A38}, + {0x16A40, 0x16A5E}, {0x16A60, 0x16A69}, {0x16A6E, 0x16A6F}, + {0x16AD0, 0x16AED}, {0x16AF0, 0x16AF4}, {0x16AF5, 0x16AF5}, + {0x16B00, 0x16B2F}, {0x16B30, 0x16B36}, {0x16B37, 0x16B3B}, + {0x16B3C, 0x16B3F}, {0x16B40, 0x16B43}, {0x16B44, 0x16B44}, + {0x16B45, 0x16B45}, {0x16B50, 0x16B59}, {0x16B5B, 0x16B61}, + {0x16B63, 0x16B77}, {0x16B7D, 0x16B8F}, {0x16F00, 0x16F44}, + {0x16F50, 0x16F50}, {0x16F51, 0x16F7E}, {0x16F8F, 0x16F92}, + {0x16F93, 0x16F9F}, {0x1BC00, 0x1BC6A}, {0x1BC70, 0x1BC7C}, + {0x1BC80, 0x1BC88}, {0x1BC90, 0x1BC99}, {0x1BC9C, 0x1BC9C}, + {0x1BC9D, 0x1BC9E}, {0x1BC9F, 0x1BC9F}, {0x1BCA0, 0x1BCA3}, + {0x1D000, 0x1D0F5}, {0x1D100, 0x1D126}, {0x1D129, 0x1D164}, + {0x1D165, 0x1D166}, {0x1D167, 0x1D169}, {0x1D16A, 0x1D16C}, + {0x1D16D, 0x1D172}, {0x1D173, 0x1D17A}, {0x1D17B, 0x1D182}, + {0x1D183, 0x1D184}, {0x1D185, 0x1D18B}, {0x1D18C, 0x1D1A9}, + {0x1D1AA, 0x1D1AD}, {0x1D1AE, 0x1D1E8}, {0x1D200, 0x1D241}, + {0x1D242, 0x1D244}, {0x1D245, 0x1D245}, {0x1D300, 0x1D356}, + {0x1D360, 0x1D371}, {0x1D400, 0x1D454}, {0x1D456, 0x1D49C}, + {0x1D49E, 0x1D49F}, {0x1D4A2, 0x1D4A2}, {0x1D4A5, 0x1D4A6}, + {0x1D4A9, 0x1D4AC}, {0x1D4AE, 0x1D4B9}, {0x1D4BB, 0x1D4BB}, + {0x1D4BD, 0x1D4C3}, {0x1D4C5, 0x1D505}, {0x1D507, 0x1D50A}, + {0x1D50D, 0x1D514}, {0x1D516, 0x1D51C}, {0x1D51E, 0x1D539}, + {0x1D53B, 0x1D53E}, {0x1D540, 0x1D544}, {0x1D546, 0x1D546}, + {0x1D54A, 0x1D550}, {0x1D552, 0x1D6A5}, {0x1D6A8, 0x1D6C0}, + {0x1D6C1, 0x1D6C1}, {0x1D6C2, 0x1D6DA}, {0x1D6DB, 0x1D6DB}, + {0x1D6DC, 0x1D6FA}, {0x1D6FB, 0x1D6FB}, {0x1D6FC, 0x1D714}, + {0x1D715, 0x1D715}, {0x1D716, 0x1D734}, {0x1D735, 0x1D735}, + {0x1D736, 0x1D74E}, {0x1D74F, 0x1D74F}, {0x1D750, 0x1D76E}, + {0x1D76F, 0x1D76F}, {0x1D770, 0x1D788}, {0x1D789, 0x1D789}, + {0x1D78A, 0x1D7A8}, {0x1D7A9, 0x1D7A9}, {0x1D7AA, 0x1D7C2}, + {0x1D7C3, 0x1D7C3}, {0x1D7C4, 0x1D7CB}, {0x1D7CE, 0x1D7FF}, + {0x1D800, 0x1D9FF}, {0x1DA00, 0x1DA36}, {0x1DA37, 0x1DA3A}, + {0x1DA3B, 0x1DA6C}, {0x1DA6D, 0x1DA74}, {0x1DA75, 0x1DA75}, + {0x1DA76, 0x1DA83}, {0x1DA84, 0x1DA84}, {0x1DA85, 0x1DA86}, + {0x1DA87, 0x1DA8B}, {0x1DA9B, 0x1DA9F}, {0x1DAA1, 0x1DAAF}, + {0x1E000, 0x1E006}, {0x1E008, 0x1E018}, {0x1E01B, 0x1E021}, + {0x1E023, 0x1E024}, {0x1E026, 0x1E02A}, {0x1E800, 0x1E8C4}, + {0x1E8C7, 0x1E8CF}, {0x1E8D0, 0x1E8D6}, {0x1E900, 0x1E943}, + {0x1E944, 0x1E94A}, {0x1E950, 0x1E959}, {0x1E95E, 0x1E95F}, + {0x1EE00, 0x1EE03}, {0x1EE05, 0x1EE1F}, {0x1EE21, 0x1EE22}, + {0x1EE24, 0x1EE24}, {0x1EE27, 0x1EE27}, {0x1EE29, 0x1EE32}, + {0x1EE34, 0x1EE37}, {0x1EE39, 0x1EE39}, {0x1EE3B, 0x1EE3B}, + {0x1EE42, 0x1EE42}, {0x1EE47, 0x1EE47}, {0x1EE49, 0x1EE49}, + {0x1EE4B, 0x1EE4B}, {0x1EE4D, 0x1EE4F}, {0x1EE51, 0x1EE52}, + {0x1EE54, 0x1EE54}, {0x1EE57, 0x1EE57}, {0x1EE59, 0x1EE59}, + {0x1EE5B, 0x1EE5B}, {0x1EE5D, 0x1EE5D}, {0x1EE5F, 0x1EE5F}, + {0x1EE61, 0x1EE62}, {0x1EE64, 0x1EE64}, {0x1EE67, 0x1EE6A}, + {0x1EE6C, 0x1EE72}, {0x1EE74, 0x1EE77}, {0x1EE79, 0x1EE7C}, + {0x1EE7E, 0x1EE7E}, {0x1EE80, 0x1EE89}, {0x1EE8B, 0x1EE9B}, + {0x1EEA1, 0x1EEA3}, {0x1EEA5, 0x1EEA9}, {0x1EEAB, 0x1EEBB}, + {0x1EEF0, 0x1EEF1}, {0x1F000, 0x1F003}, {0x1F005, 0x1F02B}, + {0x1F030, 0x1F093}, {0x1F0A0, 0x1F0AE}, {0x1F0B1, 0x1F0BF}, + {0x1F0C1, 0x1F0CE}, {0x1F0D1, 0x1F0F5}, {0x1F10B, 0x1F10C}, + {0x1F12E, 0x1F12E}, {0x1F16A, 0x1F16B}, {0x1F1E6, 0x1F1FF}, + {0x1F321, 0x1F32C}, {0x1F336, 0x1F336}, {0x1F37D, 0x1F37D}, + {0x1F394, 0x1F39F}, {0x1F3CB, 0x1F3CE}, {0x1F3D4, 0x1F3DF}, + {0x1F3F1, 0x1F3F3}, {0x1F3F5, 0x1F3F7}, {0x1F43F, 0x1F43F}, + {0x1F441, 0x1F441}, {0x1F4FD, 0x1F4FE}, {0x1F53E, 0x1F54A}, + {0x1F54F, 0x1F54F}, {0x1F568, 0x1F579}, {0x1F57B, 0x1F594}, + {0x1F597, 0x1F5A3}, {0x1F5A5, 0x1F5FA}, {0x1F650, 0x1F67F}, + {0x1F6C6, 0x1F6CB}, {0x1F6CD, 0x1F6CF}, {0x1F6E0, 0x1F6EA}, + {0x1F6F0, 0x1F6F3}, {0x1F700, 0x1F773}, {0x1F780, 0x1F7D4}, + {0x1F800, 0x1F80B}, {0x1F810, 0x1F847}, {0x1F850, 0x1F859}, + {0x1F860, 0x1F887}, {0x1F890, 0x1F8AD}, {0xE0001, 0xE0001}, + {0xE0020, 0xE007F}, +} + +// Condition have flag EastAsianWidth whether the current locale is CJK or not. +type Condition struct { + EastAsianWidth bool +} + +// NewCondition return new instance of Condition which is current locale. +func NewCondition() *Condition { + return &Condition{EastAsianWidth} +} + +// RuneWidth returns the number of cells in r. +// See http://www.unicode.org/reports/tr11/ +func (c *Condition) RuneWidth(r rune) int { + switch { + case r < 0 || r > 0x10FFFF || + inTables(r, nonprint, combining, notassigned): + return 0 + case (c.EastAsianWidth && IsAmbiguousWidth(r)) || + inTables(r, doublewidth, emoji): + return 2 + default: + return 1 + } +} + +// StringWidth return width as you can see +func (c *Condition) StringWidth(s string) (width int) { + for _, r := range []rune(s) { + width += c.RuneWidth(r) + } + return width +} + +// Truncate return string truncated with w cells +func (c *Condition) Truncate(s string, w int, tail string) string { + if c.StringWidth(s) <= w { + return s + } + r := []rune(s) + tw := c.StringWidth(tail) + w -= tw + width := 0 + i := 0 + for ; i < len(r); i++ { + cw := c.RuneWidth(r[i]) + if width+cw > w { + break + } + width += cw + } + return string(r[0:i]) + tail +} + +// Wrap return string wrapped with w cells +func (c *Condition) Wrap(s string, w int) string { + width := 0 + out := "" + for _, r := range []rune(s) { + cw := RuneWidth(r) + if r == '\n' { + out += string(r) + width = 0 + continue + } else if width+cw > w { + out += "\n" + width = 0 + out += string(r) + width += cw + continue + } + out += string(r) + width += cw + } + return out +} + +// FillLeft return string filled in left by spaces in w cells +func (c *Condition) FillLeft(s string, w int) string { + width := c.StringWidth(s) + count := w - width + if count > 0 { + b := make([]byte, count) + for i := range b { + b[i] = ' ' + } + return string(b) + s + } + return s +} + +// FillRight return string filled in left by spaces in w cells +func (c *Condition) FillRight(s string, w int) string { + width := c.StringWidth(s) + count := w - width + if count > 0 { + b := make([]byte, count) + for i := range b { + b[i] = ' ' + } + return s + string(b) + } + return s +} + +// RuneWidth returns the number of cells in r. +// See http://www.unicode.org/reports/tr11/ +func RuneWidth(r rune) int { + return DefaultCondition.RuneWidth(r) +} + +// IsAmbiguousWidth returns whether is ambiguous width or not. +func IsAmbiguousWidth(r rune) bool { + return inTables(r, private, ambiguous) +} + +// IsNeutralWidth returns whether is neutral width or not. +func IsNeutralWidth(r rune) bool { + return inTable(r, neutral) +} + +// StringWidth return width as you can see +func StringWidth(s string) (width int) { + return DefaultCondition.StringWidth(s) +} + +// Truncate return string truncated with w cells +func Truncate(s string, w int, tail string) string { + return DefaultCondition.Truncate(s, w, tail) +} + +// Wrap return string wrapped with w cells +func Wrap(s string, w int) string { + return DefaultCondition.Wrap(s, w) +} + +// FillLeft return string filled in left by spaces in w cells +func FillLeft(s string, w int) string { + return DefaultCondition.FillLeft(s, w) +} + +// FillRight return string filled in left by spaces in w cells +func FillRight(s string, w int) string { + return DefaultCondition.FillRight(s, w) +} diff --git a/vendor/github.com/mattn/go-runewidth/runewidth_js.go b/vendor/github.com/mattn/go-runewidth/runewidth_js.go new file mode 100644 index 00000000..0ce32c5e --- /dev/null +++ b/vendor/github.com/mattn/go-runewidth/runewidth_js.go @@ -0,0 +1,8 @@ +// +build js + +package runewidth + +func IsEastAsian() bool { + // TODO: Implement this for the web. Detect east asian in a compatible way, and return true. + return false +} diff --git a/vendor/github.com/mattn/go-runewidth/runewidth_posix.go b/vendor/github.com/mattn/go-runewidth/runewidth_posix.go new file mode 100644 index 00000000..c579e9a3 --- /dev/null +++ b/vendor/github.com/mattn/go-runewidth/runewidth_posix.go @@ -0,0 +1,77 @@ +// +build !windows,!js + +package runewidth + +import ( + "os" + "regexp" + "strings" +) + +var reLoc = regexp.MustCompile(`^[a-z][a-z][a-z]?(?:_[A-Z][A-Z])?\.(.+)`) + +var mblenTable = map[string]int{ + "utf-8": 6, + "utf8": 6, + "jis": 8, + "eucjp": 3, + "euckr": 2, + "euccn": 2, + "sjis": 2, + "cp932": 2, + "cp51932": 2, + "cp936": 2, + "cp949": 2, + "cp950": 2, + "big5": 2, + "gbk": 2, + "gb2312": 2, +} + +func isEastAsian(locale string) bool { + charset := strings.ToLower(locale) + r := reLoc.FindStringSubmatch(locale) + if len(r) == 2 { + charset = strings.ToLower(r[1]) + } + + if strings.HasSuffix(charset, "@cjk_narrow") { + return false + } + + for pos, b := range []byte(charset) { + if b == '@' { + charset = charset[:pos] + break + } + } + max := 1 + if m, ok := mblenTable[charset]; ok { + max = m + } + if max > 1 && (charset[0] != 'u' || + strings.HasPrefix(locale, "ja") || + strings.HasPrefix(locale, "ko") || + strings.HasPrefix(locale, "zh")) { + return true + } + return false +} + +// IsEastAsian return true if the current locale is CJK +func IsEastAsian() bool { + locale := os.Getenv("LC_CTYPE") + if locale == "" { + locale = os.Getenv("LANG") + } + + // ignore C locale + if locale == "POSIX" || locale == "C" { + return false + } + if len(locale) > 1 && locale[0] == 'C' && (locale[1] == '.' || locale[1] == '-') { + return false + } + + return isEastAsian(locale) +} diff --git a/vendor/github.com/mattn/go-runewidth/runewidth_windows.go b/vendor/github.com/mattn/go-runewidth/runewidth_windows.go new file mode 100644 index 00000000..0258876b --- /dev/null +++ b/vendor/github.com/mattn/go-runewidth/runewidth_windows.go @@ -0,0 +1,25 @@ +package runewidth + +import ( + "syscall" +) + +var ( + kernel32 = syscall.NewLazyDLL("kernel32") + procGetConsoleOutputCP = kernel32.NewProc("GetConsoleOutputCP") +) + +// IsEastAsian return true if the current locale is CJK +func IsEastAsian() bool { + r1, _, _ := procGetConsoleOutputCP.Call() + if r1 == 0 { + return false + } + + switch int(r1) { + case 932, 51932, 936, 949, 950: + return true + } + + return false +} diff --git a/vendor/github.com/olebedev/config/.gitignore b/vendor/github.com/olebedev/config/.gitignore new file mode 100644 index 00000000..00268614 --- /dev/null +++ b/vendor/github.com/olebedev/config/.gitignore @@ -0,0 +1,22 @@ +# Compiled Object files, Static and Dynamic libs (Shared Objects) +*.o +*.a +*.so + +# Folders +_obj +_test + +# Architecture specific extensions/prefixes +*.[568vq] +[568vq].out + +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* + +_testmain.go + +*.exe diff --git a/vendor/github.com/olebedev/config/LICENSE b/vendor/github.com/olebedev/config/LICENSE new file mode 100644 index 00000000..c09d13e5 --- /dev/null +++ b/vendor/github.com/olebedev/config/LICENSE @@ -0,0 +1,20 @@ +JSON or YAML configuration wrapper with convenient access methods +Copyright (C) 2014 Oleg Lebedev + +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/olebedev/config/README.md b/vendor/github.com/olebedev/config/README.md new file mode 100644 index 00000000..7f554252 --- /dev/null +++ b/vendor/github.com/olebedev/config/README.md @@ -0,0 +1,19 @@ +# Config [![wercker status](https://app.wercker.com/status/b4e8561d9a711afcb016bf0018e83897/s/ "wercker status")](https://app.wercker.com/project/bykey/b4e8561d9a711afcb016bf0018e83897) [![GoDoc](https://godoc.org/github.com/olebedev/config?status.png)](https://godoc.org/github.com/olebedev/config) + +Package config provides convenient access methods to configuration +stored as JSON or YAML. + +This is a fork of the [original version](https://github.com/moraes/config). +This version extends the functionality of the original without losing compatibility. +Major features added: + +- [`Set(path string, value interface{}) error`](http://godoc.org/github.com/olebedev/config#Config.Set) method +- [`Env() *config.Config`](http://godoc.org/github.com/olebedev/config#Config.Env) method, for OS environment variables parsing +- [`Flag() *config.Config`](http://godoc.org/github.com/olebedev/config#Config.Flag) method, for command line arguments parsing usign pkg/flag singleton +- [`Args(args ...string) *config.Config`](http://godoc.org/github.com/olebedev/config#Config.Args) method, for command line arguments parsing +- [`U*`](https://godoc.org/github.com/olebedev/config#Config.UBool) methods +- [`Copy(...path) (*config.config, error)`](https://godoc.org/github.com/olebedev/config#Config.Copy) method +- [`Extend(*config.Config) (*config.Config, error)`](https://godoc.org/github.com/olebedev/config#Config.Extend) method +- [`Error() error`](https://godoc.org/github.com/olebedev/config#Config.Error) method to show last parsing error, works only with `.Args()` method + +Example and more information you can find [here](http://godoc.org/github.com/olebedev/config). diff --git a/vendor/github.com/olebedev/config/config.go b/vendor/github.com/olebedev/config/config.go new file mode 100644 index 00000000..b007f9db --- /dev/null +++ b/vendor/github.com/olebedev/config/config.go @@ -0,0 +1,642 @@ +// Copyright 2012 The Gorilla Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package config + +import ( + "bytes" + "encoding/json" + "flag" + "fmt" + "io/ioutil" + "strconv" + "strings" + "syscall" + + yaml "gopkg.in/yaml.v2" +) + +// Config --------------------------------------------------------------------- + +// Config represents a configuration with convenient access methods. +type Config struct { + Root interface{} + lastErr error +} + +// Error return last error +func (c *Config) Error() error { + return c.lastErr +} + +// Get returns a nested config according to a dotted path. +func (cfg *Config) Get(path string) (*Config, error) { + n, err := Get(cfg.Root, path) + if err != nil { + return nil, err + } + return &Config{Root: n}, nil +} + +// Set a nested config according to a dotted path. +func (cfg *Config) Set(path string, val interface{}) error { + return Set(cfg.Root, path, val) +} + +// Fetch data from system env, based on existing config keys. +func (cfg *Config) Env() *Config { + return cfg.EnvPrefix("") +} + +// Fetch data from system env using prefix, based on existing config keys. +func (cfg *Config) EnvPrefix(prefix string) *Config { + if prefix != "" { + prefix = strings.ToUpper(prefix) + "_" + } + + keys := getKeys(cfg.Root) + for _, key := range keys { + k := strings.ToUpper(strings.Join(key, "_")) + if val, exist := syscall.Getenv(prefix + k); exist { + cfg.Set(strings.Join(key, "."), val) + } + } + return cfg +} + +// Parse command line arguments, based on existing config keys. +func (cfg *Config) Flag() *Config { + keys := getKeys(cfg.Root) + hash := map[string]*string{} + for _, key := range keys { + k := strings.Join(key, "-") + hash[k] = new(string) + val, _ := cfg.String(k) + flag.StringVar(hash[k], k, val, "") + } + + flag.Parse() + + flag.Visit(func(f *flag.Flag) { + name := strings.Replace(f.Name, "-", ".", -1) + cfg.Set(name, f.Value.String()) + }) + + return cfg +} + +// Args command line arguments, based on existing config keys. +func (cfg *Config) Args(args ...string) *Config { + if len(args) <= 1 { + return cfg + } + + keys := getKeys(cfg.Root) + hash := map[string]*string{} + _flag := flag.NewFlagSet(args[0], flag.ContinueOnError) + var _err bytes.Buffer + _flag.SetOutput(&_err) + for _, key := range keys { + k := strings.Join(key, "-") + hash[k] = new(string) + val, _ := cfg.String(k) + _flag.StringVar(hash[k], k, val, "") + } + + cfg.lastErr = _flag.Parse(args[1:]) + + _flag.Visit(func(f *flag.Flag) { + name := strings.Replace(f.Name, "-", ".", -1) + cfg.Set(name, f.Value.String()) + }) + + return cfg +} + +// Get all keys for given interface +func getKeys(source interface{}, base ...string) [][]string { + acc := [][]string{} + + // Copy "base" so that underlying slice array is not + // modified in recursive calls + nextBase := make([]string, len(base)) + copy(nextBase, base) + + switch c := source.(type) { + case map[string]interface{}: + for k, v := range c { + keys := getKeys(v, append(nextBase, k)...) + acc = append(acc, keys...) + } + case []interface{}: + for i, v := range c { + k := strconv.Itoa(i) + keys := getKeys(v, append(nextBase, k)...) + acc = append(acc, keys...) + } + default: + acc = append(acc, nextBase) + return acc + } + return acc +} + +// Bool returns a bool according to a dotted path. +func (cfg *Config) Bool(path string) (bool, error) { + n, err := Get(cfg.Root, path) + if err != nil { + return false, err + } + switch n := n.(type) { + case bool: + return n, nil + case string: + return strconv.ParseBool(n) + } + return false, typeMismatch("bool or string", n) +} + +// UBool returns a bool according to a dotted path or default value or false. +func (c *Config) UBool(path string, defaults ...bool) bool { + value, err := c.Bool(path) + + if err == nil { + return value + } + + for _, def := range defaults { + return def + } + return false +} + +// Float64 returns a float64 according to a dotted path. +func (cfg *Config) Float64(path string) (float64, error) { + n, err := Get(cfg.Root, path) + if err != nil { + return 0, err + } + switch n := n.(type) { + case float64: + return n, nil + case int: + return float64(n), nil + case string: + return strconv.ParseFloat(n, 64) + } + return 0, typeMismatch("float64, int or string", n) +} + +// UFloat64 returns a float64 according to a dotted path or default value or 0. +func (c *Config) UFloat64(path string, defaults ...float64) float64 { + value, err := c.Float64(path) + + if err == nil { + return value + } + + for _, def := range defaults { + return def + } + return float64(0) +} + +// Int returns an int according to a dotted path. +func (cfg *Config) Int(path string) (int, error) { + n, err := Get(cfg.Root, path) + if err != nil { + return 0, err + } + switch n := n.(type) { + case float64: + // encoding/json unmarshals numbers into floats, so we compare + // the string representation to see if we can return an int. + if i := int(n); fmt.Sprint(i) == fmt.Sprint(n) { + return i, nil + } else { + return 0, fmt.Errorf("Value can't be converted to int: %v", n) + } + case int: + return n, nil + case string: + if v, err := strconv.ParseInt(n, 10, 0); err == nil { + return int(v), nil + } else { + return 0, err + } + } + return 0, typeMismatch("float64, int or string", n) +} + +// UInt returns an int according to a dotted path or default value or 0. +func (c *Config) UInt(path string, defaults ...int) int { + value, err := c.Int(path) + + if err == nil { + return value + } + + for _, def := range defaults { + return def + } + return 0 +} + +// List returns a []interface{} according to a dotted path. +func (cfg *Config) List(path string) ([]interface{}, error) { + n, err := Get(cfg.Root, path) + if err != nil { + return nil, err + } + if value, ok := n.([]interface{}); ok { + return value, nil + } + return nil, typeMismatch("[]interface{}", n) +} + +// UList returns a []interface{} according to a dotted path or defaults or []interface{}. +func (c *Config) UList(path string, defaults ...[]interface{}) []interface{} { + value, err := c.List(path) + + if err == nil { + return value + } + + for _, def := range defaults { + return def + } + return make([]interface{}, 0) +} + +// Map returns a map[string]interface{} according to a dotted path. +func (cfg *Config) Map(path string) (map[string]interface{}, error) { + n, err := Get(cfg.Root, path) + if err != nil { + return nil, err + } + if value, ok := n.(map[string]interface{}); ok { + return value, nil + } + return nil, typeMismatch("map[string]interface{}", n) +} + +// UMap returns a map[string]interface{} according to a dotted path or default or map[string]interface{}. +func (c *Config) UMap(path string, defaults ...map[string]interface{}) map[string]interface{} { + value, err := c.Map(path) + + if err == nil { + return value + } + + for _, def := range defaults { + return def + } + return map[string]interface{}{} +} + +// String returns a string according to a dotted path. +func (cfg *Config) String(path string) (string, error) { + n, err := Get(cfg.Root, path) + if err != nil { + return "", err + } + switch n := n.(type) { + case bool, float64, int: + return fmt.Sprint(n), nil + case string: + return n, nil + } + return "", typeMismatch("bool, float64, int or string", n) +} + +// UString returns a string according to a dotted path or default or "". +func (c *Config) UString(path string, defaults ...string) string { + value, err := c.String(path) + + if err == nil { + return value + } + + for _, def := range defaults { + return def + } + return "" +} + +// Copy returns a deep copy with given path or without. +func (c *Config) Copy(dottedPath ...string) (*Config, error) { + toJoin := []string{} + for _, part := range dottedPath { + if len(part) != 0 { + toJoin = append(toJoin, part) + } + } + + var err error + var path = strings.Join(toJoin, ".") + var cfg = c + var root = "" + + if len(path) > 0 { + if cfg, err = c.Get(path); err != nil { + return nil, err + } + } + + if root, err = RenderYaml(cfg.Root); err != nil { + return nil, err + } + return ParseYaml(root) +} + +// Extend returns extended copy of current config with applied +// values from the given config instance. Note that if you extend +// with different structure you will get an error. See: `.Set()` method +// for details. +func (c *Config) Extend(cfg *Config) (*Config, error) { + n, err := c.Copy() + if err != nil { + return nil, err + } + + keys := getKeys(cfg.Root) + for _, key := range keys { + k := strings.Join(key, ".") + i, err := Get(cfg.Root, k) + if err != nil { + return nil, err + } + if err := n.Set(k, i); err != nil { + return nil, err + } + } + return n, nil +} + +// typeMismatch returns an error for an expected type. +func typeMismatch(expected string, got interface{}) error { + return fmt.Errorf("Type mismatch: expected %s; got %T", expected, got) +} + +// Fetching ------------------------------------------------------------------- + +// Get returns a child of the given value according to a dotted path. +func Get(cfg interface{}, path string) (interface{}, error) { + parts := strings.Split(path, ".") + // Normalize path. + for k, v := range parts { + if v == "" { + if k == 0 { + parts = parts[1:] + } else { + return nil, fmt.Errorf("Invalid path %q", path) + } + } + } + // Get the value. + for pos, part := range parts { + switch c := cfg.(type) { + case []interface{}: + if i, error := strconv.ParseInt(part, 10, 0); error == nil { + if int(i) < len(c) { + cfg = c[i] + } else { + return nil, fmt.Errorf( + "Index out of range at %q: list has only %v items", + strings.Join(parts[:pos+1], "."), len(c)) + } + } else { + return nil, fmt.Errorf("Invalid list index at %q", + strings.Join(parts[:pos+1], ".")) + } + case map[string]interface{}: + if value, ok := c[part]; ok { + cfg = value + } else { + return nil, fmt.Errorf("Nonexistent map key at %q", + strings.Join(parts[:pos+1], ".")) + } + default: + return nil, fmt.Errorf( + "Invalid type at %q: expected []interface{} or map[string]interface{}; got %T", + strings.Join(parts[:pos+1], "."), cfg) + } + } + + return cfg, nil +} + +// Set returns an error, in case when it is not possible to +// establish the value obtained in accordance with given dotted path. +func Set(cfg interface{}, path string, value interface{}) error { + parts := strings.Split(path, ".") + // Normalize path. + for k, v := range parts { + if v == "" { + if k == 0 { + parts = parts[1:] + } else { + return fmt.Errorf("Invalid path %q", path) + } + } + } + + point := &cfg + for pos, part := range parts { + switch c := (*point).(type) { + case []interface{}: + if i, error := strconv.ParseInt(part, 10, 0); error == nil { + // 1. normalize slice capacity + if int(i) >= cap(c) { + c = append(c, make([]interface{}, int(i)-cap(c)+1, int(i)-cap(c)+1)...) + } + + // 2. set value or go further + if pos+1 == len(parts) { + c[i] = value + } else { + + // if exists just pick the pointer + if va := c[i]; va != nil { + point = &va + } else { + // is next part slice or map? + if i, err := strconv.ParseInt(parts[pos+1], 10, 0); err == nil { + va = make([]interface{}, int(i)+1, int(i)+1) + } else { + va = make(map[string]interface{}) + } + c[i] = va + point = &va + } + + } + + } else { + return fmt.Errorf("Invalid list index at %q", + strings.Join(parts[:pos+1], ".")) + } + case map[string]interface{}: + if pos+1 == len(parts) { + c[part] = value + } else { + // if exists just pick the pointer + if va, ok := c[part]; ok { + point = &va + } else { + // is next part slice or map? + if i, err := strconv.ParseInt(parts[pos+1], 10, 0); err == nil { + va = make([]interface{}, int(i)+1, int(i)+1) + } else { + va = make(map[string]interface{}) + } + c[part] = va + point = &va + } + } + default: + return fmt.Errorf( + "Invalid type at %q: expected []interface{} or map[string]interface{}; got %T", + strings.Join(parts[:pos+1], "."), cfg) + } + } + + return nil +} + +// Parsing -------------------------------------------------------------------- + +// Must is a wrapper for parsing functions to be used during initialization. +// It panics on failure. +func Must(cfg *Config, err error) *Config { + if err != nil { + panic(err) + } + return cfg +} + +// normalizeValue normalizes a unmarshalled value. This is needed because +// encoding/json doesn't support marshalling map[interface{}]interface{}. +func normalizeValue(value interface{}) (interface{}, error) { + switch value := value.(type) { + case map[interface{}]interface{}: + node := make(map[string]interface{}, len(value)) + for k, v := range value { + key, ok := k.(string) + if !ok { + return nil, fmt.Errorf("Unsupported map key: %#v", k) + } + item, err := normalizeValue(v) + if err != nil { + return nil, fmt.Errorf("Unsupported map value: %#v", v) + } + node[key] = item + } + return node, nil + case map[string]interface{}: + node := make(map[string]interface{}, len(value)) + for key, v := range value { + item, err := normalizeValue(v) + if err != nil { + return nil, fmt.Errorf("Unsupported map value: %#v", v) + } + node[key] = item + } + return node, nil + case []interface{}: + node := make([]interface{}, len(value)) + for key, v := range value { + item, err := normalizeValue(v) + if err != nil { + return nil, fmt.Errorf("Unsupported list item: %#v", v) + } + node[key] = item + } + return node, nil + case bool, float64, int, string, nil: + return value, nil + } + return nil, fmt.Errorf("Unsupported type: %T", value) +} + +// JSON ----------------------------------------------------------------------- + +// ParseJson reads a JSON configuration from the given string. +func ParseJson(cfg string) (*Config, error) { + return parseJson([]byte(cfg)) +} + +// ParseJsonFile reads a JSON configuration from the given filename. +func ParseJsonFile(filename string) (*Config, error) { + cfg, err := ioutil.ReadFile(filename) + if err != nil { + return nil, err + } + return parseJson(cfg) +} + +// parseJson performs the real JSON parsing. +func parseJson(cfg []byte) (*Config, error) { + var out interface{} + var err error + if err = json.Unmarshal(cfg, &out); err != nil { + return nil, err + } + if out, err = normalizeValue(out); err != nil { + return nil, err + } + return &Config{Root: out}, nil +} + +// RenderJson renders a JSON configuration. +func RenderJson(cfg interface{}) (string, error) { + b, err := json.Marshal(cfg) + if err != nil { + return "", err + } + return string(b), nil +} + +// YAML ----------------------------------------------------------------------- + +// ParseYamlBytes reads a YAML configuration from the given []byte. +func ParseYamlBytes(cfg []byte) (*Config, error) { + return parseYaml(cfg) +} + +// ParseYaml reads a YAML configuration from the given string. +func ParseYaml(cfg string) (*Config, error) { + return parseYaml([]byte(cfg)) +} + +// ParseYamlFile reads a YAML configuration from the given filename. +func ParseYamlFile(filename string) (*Config, error) { + cfg, err := ioutil.ReadFile(filename) + if err != nil { + return nil, err + } + return parseYaml(cfg) +} + +// parseYaml performs the real YAML parsing. +func parseYaml(cfg []byte) (*Config, error) { + var out interface{} + var err error + if err = yaml.Unmarshal(cfg, &out); err != nil { + return nil, err + } + if out, err = normalizeValue(out); err != nil { + return nil, err + } + return &Config{Root: out}, nil +} + +// RenderYaml renders a YAML configuration. +func RenderYaml(cfg interface{}) (string, error) { + b, err := yaml.Marshal(cfg) + if err != nil { + return "", err + } + return string(b), nil +} diff --git a/vendor/github.com/olebedev/config/doc.go b/vendor/github.com/olebedev/config/doc.go new file mode 100644 index 00000000..a71e76c8 --- /dev/null +++ b/vendor/github.com/olebedev/config/doc.go @@ -0,0 +1,141 @@ +// Copyright 2012 The Gorilla Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* +Package config provides convenient access methods to configuration stored as +JSON or YAML. + +Let's start with a simple YAML example: + + development: + database: + host: localhost + users: + - name: calvin + password: yukon + - name: hobbes + password: tuna + production: + database: + host: 192.168.1.1 + +We can parse it using ParseYaml(), which will return a *Config instance on +success: + + cfg, err := config.ParseYaml(yamlString) + +An equivalent JSON configuration could be built using ParseJson(): + + cfg, err := config.ParseJson(jsonString) + +From now, we can retrieve configuration values using a path in dotted notation: + + // "localhost" + host, err := cfg.String("development.database.host") + + // or... + + // "192.168.1.1" + host, err := cfg.String("production.database.host") + +Besides String(), other types can be fetched directly: Bool(), Float64(), +Int(), Map() and List(). All these methods will return an error if the path +doesn't exist, or the value doesn't match or can't be converted to the +requested type. + +A nested configuration can be fetched using Get(). Here we get a new *Config +instance with a subset of the configuration: + + cfg, err := cfg.Get("development") + +Then the inner values are fetched relatively to the subset: + + // "localhost" + host, err := cfg.String("database.host") + +For lists, the dotted path must use an index to refer to a specific value. +To retrieve the information from a user stored in the configuration above: + + // map[string]interface{}{ ... } + user1, err := cfg.Map("development.users.0") + // map[string]interface{}{ ... } + user2, err := cfg.Map("development.users.1") + + // or... + + // "calvin" + name1, err := cfg.String("development.users.0.name") + // "hobbes" + name2, err := cfg.String("development.users.1.name") + +JSON or YAML strings can be created calling the appropriate Render*() +functions. Here's how we render a configuration like the one used in these +examples: + + cfg := map[string]interface{}{ + "development": map[string]interface{}{ + "database": map[string]interface{}{ + "host": "localhost", + }, + "users": []interface{}{ + map[string]interface{}{ + "name": "calvin", + "password": "yukon", + }, + map[string]interface{}{ + "name": "hobbes", + "password": "tuna", + }, + }, + }, + "production": map[string]interface{}{ + "database": map[string]interface{}{ + "host": "192.168.1.1", + }, + }, + } + + json, err := config.RenderJson(cfg) + + // or... + + yaml, err := config.RenderYaml(cfg) + +This results in a configuration string to be stored in a file or database. + +For more more convenience it can parse OS environment variables and command line arguments. + + cfg, err := config.ParseYaml(yamlString) + cfg.Env() + + // or + + cfg.Flag() + +We can also specify the order of parsing: + + cfg.Env().Flag() + + // or + + cfg.Flag().Env() + +In case of OS environment all existing at the moment of parsing keys will be scanned in OS environment, +but in uppercase and the separator will be `_` instead of a `.`. If EnvPrefix() is used the given prefix +will be used to lookup the environment variable, e.g PREFIX_FOO_BAR will set foo.bar. +In case of flags separator will be `-`. +In case of command line arguments possible to use regular dot notation syntax for all keys. +For see existing keys we can run application with `-h`. + +We can use unsafe method to get value: + + // "" + cfg.UString("undefined.key") + + // or with default value + unsafeValue := cfg.UString("undefined.key", "default value") + +There is unsafe methods, like regular, but wuth prefix `U`. +*/ +package config diff --git a/vendor/github.com/olebedev/config/wercker.yml b/vendor/github.com/olebedev/config/wercker.yml new file mode 100644 index 00000000..4a47bb17 --- /dev/null +++ b/vendor/github.com/olebedev/config/wercker.yml @@ -0,0 +1 @@ +box: wercker/golang@1.1.1 diff --git a/vendor/github.com/radovskyb/watcher/.travis.yml b/vendor/github.com/radovskyb/watcher/.travis.yml new file mode 100644 index 00000000..3f478f10 --- /dev/null +++ b/vendor/github.com/radovskyb/watcher/.travis.yml @@ -0,0 +1,4 @@ +language: go +go: + - 1.7 + - tip \ No newline at end of file diff --git a/vendor/github.com/radovskyb/watcher/LICENSE b/vendor/github.com/radovskyb/watcher/LICENSE new file mode 100644 index 00000000..92ef0e91 --- /dev/null +++ b/vendor/github.com/radovskyb/watcher/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2016, Benjamin Radovsky. +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of watcher nor the names of its contributors may be used to + endorse or promote products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/radovskyb/watcher/README.md b/vendor/github.com/radovskyb/watcher/README.md new file mode 100644 index 00000000..c0ef08bc --- /dev/null +++ b/vendor/github.com/radovskyb/watcher/README.md @@ -0,0 +1,172 @@ +# watcher + +[![Build Status](https://travis-ci.org/radovskyb/watcher.svg?branch=master)](https://travis-ci.org/radovskyb/watcher) + +`watcher` is a Go package for watching for files or directory changes (recursively or non recursively) without using filesystem events, which allows it to work cross platform consistently. + +`watcher` watches for changes and notifies over channels either anytime an event or an error has occurred. + +Events contain the `os.FileInfo` of the file or directory that the event is based on and the type of event and file or directory path. + +[Installation](#installation) +[Features](#features) +[Example](#example) +[Contributing](#contributing) +[Watcher Command](#command) + +# Update +Event.Path for Rename and Move events is now returned in the format of `fromPath -> toPath` + +#### Chmod event is not supported under windows. + +# Installation + +```shell +go get -u github.com/radovskyb/watcher/... +``` + +# Features + +- Customizable polling interval. +- Filter Events. +- Watch folders recursively or non-recursively. +- Choose to ignore hidden files. +- Choose to ignore specified files and folders. +- Notifies the `os.FileInfo` of the file that the event is based on. e.g `Name`, `ModTime`, `IsDir`, etc. +- Notifies the full path of the file that the event is based on or the old and new paths if the event was a `Rename` or `Move` event. +- Limit amount of events that can be received per watching cycle. +- List the files being watched. +- Trigger custom events. + +# Todo + +- Write more tests. +- Write benchmarks. + +# Example + +```go +package main + +import ( + "fmt" + "log" + "time" + + "github.com/radovskyb/watcher" +) + +func main() { + w := watcher.New() + + // SetMaxEvents to 1 to allow at most 1 event's to be received + // on the Event channel per watching cycle. + // + // If SetMaxEvents is not set, the default is to send all events. + w.SetMaxEvents(1) + + // Only notify rename and move events. + w.FilterOps(watcher.Rename, watcher.Move) + + go func() { + for { + select { + case event := <-w.Event: + fmt.Println(event) // Print the event's info. + case err := <-w.Error: + log.Fatalln(err) + case <-w.Closed: + return + } + } + }() + + // Watch this folder for changes. + if err := w.Add("."); err != nil { + log.Fatalln(err) + } + + // Watch test_folder recursively for changes. + if err := w.AddRecursive("../test_folder"); err != nil { + log.Fatalln(err) + } + + // Print a list of all of the files and folders currently + // being watched and their paths. + for path, f := range w.WatchedFiles() { + fmt.Printf("%s: %s\n", path, f.Name()) + } + + fmt.Println() + + // Trigger 2 events after watcher started. + go func() { + w.Wait() + w.TriggerEvent(watcher.Create, nil) + w.TriggerEvent(watcher.Remove, nil) + }() + + // Start the watching process - it'll check for changes every 100ms. + if err := w.Start(time.Millisecond * 100); err != nil { + log.Fatalln(err) + } +} +``` + +# Contributing +If you would ike to contribute, simply submit a pull request. + +# Command + +`watcher` comes with a simple command which is installed when using the `go get` command from above. + +# Usage + +``` +Usage of watcher: + -cmd string + command to run when an event occurs + -dotfiles + watch dot files (default true) + -interval string + watcher poll interval (default "100ms") + -keepalive + keep alive when a cmd returns code != 0 + -list + list watched files on start + -pipe + pipe event's info to command's stdin + -recursive + watch folders recursively (default true) + -startcmd + run the command when watcher starts +``` + +All of the flags are optional and watcher can also be called by itself: +```shell +watcher +``` +(watches the current directory recursively for changes and notifies any events that occur.) + +A more elaborate example using the `watcher` command: +```shell +watcher -dotfiles=false -recursive=false -cmd="./myscript" main.go ../ +``` +In this example, `watcher` will ignore dot files and folders and won't watch any of the specified folders recursively. It will also run the script `./myscript` anytime an event occurs while watching `main.go` or any files or folders in the previous directory (`../`). + +Using the `pipe` and `cmd` flags together will send the event's info to the command's stdin when changes are detected. + +First create a file called `script.py` with the following contents: +```python +import sys + +for line in sys.stdin: + print (line + " - python") +``` + +Next, start watcher with the `pipe` and `cmd` flags enabled: +```shell +watcher -cmd="python script.py" -pipe=true +``` + +Now when changes are detected, the event's info will be output from the running python script. diff --git a/vendor/github.com/radovskyb/watcher/samefile.go b/vendor/github.com/radovskyb/watcher/samefile.go new file mode 100644 index 00000000..8c9cb325 --- /dev/null +++ b/vendor/github.com/radovskyb/watcher/samefile.go @@ -0,0 +1,9 @@ +// +build !windows + +package watcher + +import "os" + +func SameFile(fi1, fi2 os.FileInfo) bool { + return os.SameFile(fi1, fi2) +} diff --git a/vendor/github.com/radovskyb/watcher/samefile_windows.go b/vendor/github.com/radovskyb/watcher/samefile_windows.go new file mode 100644 index 00000000..1ea95120 --- /dev/null +++ b/vendor/github.com/radovskyb/watcher/samefile_windows.go @@ -0,0 +1,12 @@ +// +build windows + +package watcher + +import "os" + +func SameFile(fi1, fi2 os.FileInfo) bool { + return fi1.ModTime() == fi2.ModTime() && + fi1.Size() == fi2.Size() && + fi1.Mode() == fi2.Mode() && + fi1.IsDir() == fi2.IsDir() +} diff --git a/vendor/github.com/radovskyb/watcher/watcher.go b/vendor/github.com/radovskyb/watcher/watcher.go new file mode 100644 index 00000000..e486ea0a --- /dev/null +++ b/vendor/github.com/radovskyb/watcher/watcher.go @@ -0,0 +1,621 @@ +package watcher + +import ( + "errors" + "fmt" + "io/ioutil" + "os" + "path/filepath" + "strings" + "sync" + "time" +) + +var ( + // ErrDurationTooShort occurs when calling the watcher's Start + // method with a duration that's less than 1 nanosecond. + ErrDurationTooShort = errors.New("error: duration is less than 1ns") + + // ErrWatcherRunning occurs when trying to call the watcher's + // Start method and the polling cycle is still already running + // from previously calling Start and not yet calling Close. + ErrWatcherRunning = errors.New("error: watcher is already running") + + // ErrWatchedFileDeleted is an error that occurs when a file or folder that was + // being watched has been deleted. + ErrWatchedFileDeleted = errors.New("error: watched file or folder deleted") +) + +// An Op is a type that is used to describe what type +// of event has occurred during the watching process. +type Op uint32 + +// Ops +const ( + Create Op = iota + Write + Remove + Rename + Chmod + Move +) + +var ops = map[Op]string{ + Create: "CREATE", + Write: "WRITE", + Remove: "REMOVE", + Rename: "RENAME", + Chmod: "CHMOD", + Move: "MOVE", +} + +// String prints the string version of the Op consts +func (e Op) String() string { + if op, found := ops[e]; found { + return op + } + return "???" +} + +// An Event describes an event that is received when files or directory +// changes occur. It includes the os.FileInfo of the changed file or +// directory and the type of event that's occurred and the full path of the file. +type Event struct { + Op + Path string + os.FileInfo +} + +// String returns a string depending on what type of event occurred and the +// file name associated with the event. +func (e Event) String() string { + if e.FileInfo != nil { + pathType := "FILE" + if e.IsDir() { + pathType = "DIRECTORY" + } + return fmt.Sprintf("%s %q %s [%s]", pathType, e.Name(), e.Op, e.Path) + } + return "???" +} + +type Watcher struct { + Event chan Event + Error chan error + Closed chan struct{} + close chan struct{} + wg *sync.WaitGroup + + // mu protects the following. + mu *sync.Mutex + running bool + names map[string]bool // bool for recursive or not. + files map[string]os.FileInfo // map of files. + ignored map[string]struct{} // ignored files or directories. + ops map[Op]struct{} // Op filtering. + ignoreHidden bool // ignore hidden files or not. + maxEvents int // max sent events per cycle +} + +// New creates a new Watcher. +func New() *Watcher { + // Set up the WaitGroup for w.Wait(). + var wg sync.WaitGroup + wg.Add(1) + + return &Watcher{ + Event: make(chan Event), + Error: make(chan error), + Closed: make(chan struct{}), + close: make(chan struct{}), + mu: new(sync.Mutex), + wg: &wg, + files: make(map[string]os.FileInfo), + ignored: make(map[string]struct{}), + names: make(map[string]bool), + } +} + +// SetMaxEvents controls the maximum amount of events that are sent on +// the Event channel per watching cycle. If max events is less than 1, there is +// no limit, which is the default. +func (w *Watcher) SetMaxEvents(delta int) { + w.mu.Lock() + w.maxEvents = delta + w.mu.Unlock() +} + +// IgnoreHiddenFiles sets the watcher to ignore any file or directory +// that starts with a dot. +func (w *Watcher) IgnoreHiddenFiles(ignore bool) { + w.mu.Lock() + w.ignoreHidden = ignore + w.mu.Unlock() +} + +// FilterOps filters which event op types should be returned +// when an event occurs. +func (w *Watcher) FilterOps(ops ...Op) { + w.mu.Lock() + w.ops = make(map[Op]struct{}) + for _, op := range ops { + w.ops[op] = struct{}{} + } + w.mu.Unlock() +} + +// Add adds either a single file or directory to the file list. +func (w *Watcher) Add(name string) (err error) { + w.mu.Lock() + defer w.mu.Unlock() + + name, err = filepath.Abs(name) + if err != nil { + return err + } + + // If name is on the ignored list or if hidden files are + // ignored and name is a hidden file or directory, simply return. + _, ignored := w.ignored[name] + if ignored || (w.ignoreHidden && strings.HasPrefix(name, ".")) { + return nil + } + + // Add the directory's contents to the files list. + fileList, err := w.list(name) + if err != nil { + return err + } + for k, v := range fileList { + w.files[k] = v + } + + // Add the name to the names list. + w.names[name] = false + + return nil +} + +func (w *Watcher) list(name string) (map[string]os.FileInfo, error) { + fileList := make(map[string]os.FileInfo) + + // Make sure name exists. + stat, err := os.Stat(name) + if err != nil { + return nil, err + } + + fileList[name] = stat + + // If it's not a directory, just return. + if !stat.IsDir() { + return fileList, nil + } + + // It's a directory. + fInfoList, err := ioutil.ReadDir(name) + if err != nil { + return nil, err + } + // Add all of the files in the directory to the file list as long + // as they aren't on the ignored list or are hidden files if ignoreHidden + // is set to true. + for _, fInfo := range fInfoList { + path := filepath.Join(name, fInfo.Name()) + _, ignored := w.ignored[path] + if ignored || (w.ignoreHidden && strings.HasPrefix(fInfo.Name(), ".")) { + continue + } + fileList[path] = fInfo + } + return fileList, nil +} + +// Add adds either a single file or directory recursively to the file list. +func (w *Watcher) AddRecursive(name string) (err error) { + w.mu.Lock() + defer w.mu.Unlock() + + name, err = filepath.Abs(name) + if err != nil { + return err + } + + fileList, err := w.listRecursive(name) + if err != nil { + return err + } + for k, v := range fileList { + w.files[k] = v + } + + // Add the name to the names list. + w.names[name] = true + + return nil +} + +func (w *Watcher) listRecursive(name string) (map[string]os.FileInfo, error) { + fileList := make(map[string]os.FileInfo) + + return fileList, filepath.Walk(name, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + // If path is ignored and it's a directory, skip the directory. If it's + // ignored and it's a single file, skip the file. + _, ignored := w.ignored[path] + if ignored || (w.ignoreHidden && strings.HasPrefix(info.Name(), ".")) { + if info.IsDir() { + return filepath.SkipDir + } + return nil + } + // Add the path and it's info to the file list. + fileList[path] = info + return nil + }) +} + +// Remove removes either a single file or directory from the file's list. +func (w *Watcher) Remove(name string) (err error) { + w.mu.Lock() + defer w.mu.Unlock() + + name, err = filepath.Abs(name) + if err != nil { + return err + } + + // Remove the name from w's names list. + delete(w.names, name) + + // If name is a single file, remove it and return. + info, found := w.files[name] + if !found { + return nil // Doesn't exist, just return. + } + if !info.IsDir() { + delete(w.files, name) + return nil + } + + // Delete the actual directory from w.files + delete(w.files, name) + + // If it's a directory, delete all of it's contents from w.files. + for path := range w.files { + if filepath.Dir(path) == name { + delete(w.files, path) + } + } + return nil +} + +// Remove removes either a single file or a directory recursively from +// the file's list. +func (w *Watcher) RemoveRecursive(name string) (err error) { + w.mu.Lock() + defer w.mu.Unlock() + + name, err = filepath.Abs(name) + if err != nil { + return err + } + + // Remove the name from w's names list. + delete(w.names, name) + + // If name is a single file, remove it and return. + info, found := w.files[name] + if !found { + return nil // Doesn't exist, just return. + } + if !info.IsDir() { + delete(w.files, name) + return nil + } + + // If it's a directory, delete all of it's contents recursively + // from w.files. + for path := range w.files { + if strings.HasPrefix(path, name) { + delete(w.files, path) + } + } + return nil +} + +// Ignore adds paths that should be ignored. +// +// For files that are already added, Ignore removes them. +func (w *Watcher) Ignore(paths ...string) (err error) { + for _, path := range paths { + path, err = filepath.Abs(path) + if err != nil { + return err + } + // Remove any of the paths that were already added. + if err := w.RemoveRecursive(path); err != nil { + return err + } + w.mu.Lock() + w.ignored[path] = struct{}{} + w.mu.Unlock() + } + return nil +} + +func (w *Watcher) WatchedFiles() map[string]os.FileInfo { + w.mu.Lock() + defer w.mu.Unlock() + + return w.files +} + +// fileInfo is an implementation of os.FileInfo that can be used +// as a mocked os.FileInfo when triggering an event when the specified +// os.FileInfo is nil. +type fileInfo struct { + name string + size int64 + mode os.FileMode + modTime time.Time + sys interface{} + dir bool +} + +func (fs *fileInfo) IsDir() bool { + return fs.dir +} +func (fs *fileInfo) ModTime() time.Time { + return fs.modTime +} +func (fs *fileInfo) Mode() os.FileMode { + return fs.mode +} +func (fs *fileInfo) Name() string { + return fs.name +} +func (fs *fileInfo) Size() int64 { + return fs.size +} +func (fs *fileInfo) Sys() interface{} { + return fs.sys +} + +// TriggerEvent is a method that can be used to trigger an event, separate to +// the file watching process. +func (w *Watcher) TriggerEvent(eventType Op, file os.FileInfo) { + w.Wait() + if file == nil { + file = &fileInfo{name: "triggered event", modTime: time.Now()} + } + w.Event <- Event{Op: eventType, Path: "-", FileInfo: file} +} + +func (w *Watcher) retrieveFileList() map[string]os.FileInfo { + w.mu.Lock() + defer w.mu.Unlock() + + fileList := make(map[string]os.FileInfo) + + var list map[string]os.FileInfo + var err error + + for name, recursive := range w.names { + if recursive { + list, err = w.listRecursive(name) + if err != nil { + if os.IsNotExist(err) { + w.Error <- ErrWatchedFileDeleted + w.mu.Unlock() + w.RemoveRecursive(name) + w.mu.Lock() + } else { + w.Error <- err + } + } + } else { + list, err = w.list(name) + if err != nil { + if os.IsNotExist(err) { + w.Error <- ErrWatchedFileDeleted + w.mu.Unlock() + w.Remove(name) + w.mu.Lock() + } else { + w.Error <- err + } + } + } + // Add the file's to the file list. + for k, v := range list { + fileList[k] = v + } + } + + return fileList +} + +// Start begins the polling cycle which repeats every specified +// duration until Close is called. +func (w *Watcher) Start(d time.Duration) error { + // Return an error if d is less than 1 nanosecond. + if d < time.Nanosecond { + return ErrDurationTooShort + } + + // Make sure the Watcher is not already running. + w.mu.Lock() + if w.running { + w.mu.Unlock() + return ErrWatcherRunning + } + w.running = true + w.mu.Unlock() + + // Unblock w.Wait(). + w.wg.Done() + + for { + // done lets the inner polling cycle loop know when the + // current cycle's method has finished executing. + done := make(chan struct{}) + + // Any events that are found are first piped to evt before + // being sent to the main Event channel. + evt := make(chan Event) + + // Retrieve the file list for all watched file's and dirs. + fileList := w.retrieveFileList() + + // cancel can be used to cancel the current event polling function. + cancel := make(chan struct{}) + + // Look for events. + go func() { + w.pollEvents(fileList, evt, cancel) + done <- struct{}{} + }() + + // numEvents holds the number of events for the current cycle. + numEvents := 0 + + inner: + for { + select { + case <-w.close: + close(cancel) + close(w.Closed) + return nil + case event := <-evt: + if len(w.ops) > 0 { // Filter Ops. + _, found := w.ops[event.Op] + if !found { + continue + } + } + numEvents++ + if w.maxEvents > 0 && numEvents > w.maxEvents { + close(cancel) + break inner + } + w.Event <- event + case <-done: // Current cycle is finished. + break inner + } + } + + // Update the file's list. + w.mu.Lock() + w.files = fileList + w.mu.Unlock() + + // Sleep and then continue to the next loop iteration. + time.Sleep(d) + } +} + +func (w *Watcher) pollEvents(files map[string]os.FileInfo, evt chan Event, + cancel chan struct{}) { + w.mu.Lock() + defer w.mu.Unlock() + + // Store create and remove events for use to check for rename events. + creates := make(map[string]os.FileInfo) + removes := make(map[string]os.FileInfo) + + // Check for removed files. + for path, info := range w.files { + if _, found := files[path]; !found { + removes[path] = info + } + } + + // Check for created files, writes and chmods. + for path, info := range files { + oldInfo, found := w.files[path] + if !found { + // A file was created. + creates[path] = info + continue + } + if oldInfo.ModTime() != info.ModTime() { + select { + case <-cancel: + return + case evt <- Event{Write, path, info}: + } + } + if oldInfo.Mode() != info.Mode() { + select { + case <-cancel: + return + case evt <- Event{Chmod, path, info}: + } + } + } + + // Check for renames and moves. + for path1, info1 := range removes { + for path2, info2 := range creates { + if SameFile(info1, info2) { + e := Event{ + Op: Move, + Path: fmt.Sprintf("%s -> %s", path1, path2), + FileInfo: info1, + } + // If they are from the same directory, it's a rename + // instead of a move event. + if filepath.Dir(path1) == filepath.Dir(path2) { + e.Op = Rename + } + + delete(removes, path1) + delete(creates, path2) + + select { + case <-cancel: + return + case evt <- e: + } + } + } + } + + // Send all the remaining create and remove events. + for path, info := range creates { + select { + case <-cancel: + return + case evt <- Event{Create, path, info}: + } + } + for path, info := range removes { + select { + case <-cancel: + return + case evt <- Event{Remove, path, info}: + } + } +} + +// Wait blocks until the watcher is started. +func (w *Watcher) Wait() { + w.wg.Wait() +} + +func (w *Watcher) Close() { + w.mu.Lock() + if !w.running { + w.mu.Unlock() + return + } + w.running = false + w.files = make(map[string]os.FileInfo) + w.names = make(map[string]bool) + w.mu.Unlock() + // Send a close signal to the Start method. + w.close <- struct{}{} +} diff --git a/vendor/github.com/rivo/tview/CODE_OF_CONDUCT.md b/vendor/github.com/rivo/tview/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..601e63b8 --- /dev/null +++ b/vendor/github.com/rivo/tview/CODE_OF_CONDUCT.md @@ -0,0 +1,73 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +education, socio-economic status, nationality, personal appearance, race, +religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at https://rentafounder.com/page/about-me/. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org diff --git a/vendor/github.com/rivo/tview/CONTRIBUTING.md b/vendor/github.com/rivo/tview/CONTRIBUTING.md new file mode 100644 index 00000000..0d962926 --- /dev/null +++ b/vendor/github.com/rivo/tview/CONTRIBUTING.md @@ -0,0 +1,31 @@ +# Contributing to tview + +First of all, thank you for taking the time to contribute. + +The following provides you with some guidance on how to contribute to this project. Mainly, it is meant to save us all some time so please read it, it's not long. + +Please note that this document is work in progress so I might add to it in the future. + +## Issues + +- Please include enough information so everybody understands your request. +- Screenshots or code that illustrates your point always helps. +- It's fine to ask for help. But you should have checked out the [documentation](https://godoc.org/github.com/rivo/tview) first in any case. +- If you request a new feature, state your motivation and share a use case that you faced where you needed that new feature. It should be something that others will also need. + +## Pull Requests + +If you have a feature request, open an issue first before sending me a pull request. It may save you from writing code that will get rejected. If your case is strong, there is a good chance that I will add the feature for you. + +I'm very picky about the code that goes into this repo. So if you violate any of the following guidelines, there is a good chance I won't merge your pull request. + +- There must be a strong case for your additions/changes, such as: + - Bug fixes + - Features that are needed (see "Issues" above; state your motivation) + - Improvements in stability or performance (if readability does not suffer) +- Your code must follow the structure of the existing code. Don't just patch something on. Try to understand how `tview` is currently designed and follow that design. Your code needs to be consistent with existing code. +- If you're adding code that increases the work required to maintain the project, you must be willing to take responsibility for that extra work. I will ask you to maintain your part of the code in the long run. +- Function/type/variable/constant names must be as descriptive as they are right now. Follow the conventions of the package. +- All functions/types/variables/constants, even private ones, must have comments in good English. These comments must be elaborate enough so that new users of the package understand them and can follow them. Provide examples if you have to. +- Your changes must not decrease the project's [Go Report](https://goreportcard.com/report/github.com/rivo/tview) rating. +- No breaking changes unless there is absolutely no other way. diff --git a/vendor/github.com/rivo/tview/LICENSE.txt b/vendor/github.com/rivo/tview/LICENSE.txt new file mode 100644 index 00000000..8aa26455 --- /dev/null +++ b/vendor/github.com/rivo/tview/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) [year] [fullname] + +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/rivo/tview/README.md b/vendor/github.com/rivo/tview/README.md new file mode 100644 index 00000000..1ebfc01b --- /dev/null +++ b/vendor/github.com/rivo/tview/README.md @@ -0,0 +1,101 @@ +# Rich Interactive Widgets for Terminal UIs + +[![Godoc Reference](https://img.shields.io/badge/godoc-reference-blue.svg)](https://godoc.org/github.com/rivo/tview) +[![Go Report](https://img.shields.io/badge/go%20report-A%2B-brightgreen.svg)](https://goreportcard.com/report/github.com/rivo/tview) + +This Go package provides commonly needed components for terminal based user interfaces. + +![Screenshot](tview.gif) + +Among these components are: + +- __Input forms__ (include __input/password fields__, __drop-down selections__, __checkboxes__, and __buttons__) +- Navigable multi-color __text views__ +- Sophisticated navigable __table views__ +- Selectable __lists__ +- __Grid__, __Flexbox__ and __page layouts__ +- Modal __message windows__ +- An __application__ wrapper + +They come with lots of customization options and can be easily extended to fit your needs. + +## Installation + +```bash +go get github.com/rivo/tview +``` + +## Hello World + +This basic example creates a box titled "Hello, World!" and displays it in your terminal: + +```go +package main + +import ( + "github.com/rivo/tview" +) + +func main() { + box := tview.NewBox().SetBorder(true).SetTitle("Hello, world!") + if err := tview.NewApplication().SetRoot(box, true).Run(); err != nil { + panic(err) + } +} +``` + +Check out the [GitHub Wiki](https://github.com/rivo/tview/wiki) for more examples along with screenshots. Or try the examples in the "demos" subdirectory. + +For a presentation highlighting this package, compile and run the program found in the "demos/presentation" subdirectory. + +## Documentation + +Refer to https://godoc.org/github.com/rivo/tview for the package's documentation. + +## Dependencies + +This package is based on [github.com/gdamore/tcell](https://github.com/gdamore/tcell) (and its dependencies). + +## Your Feedback + +Add your issue here on GitHub. Feel free to get in touch if you have any questions. + +## Version History + +(There are no corresponding tags in the project. I only keep such a history in this README.) + +- v0.15 (2018-05-02) + - `Flex` and `Grid` don't clear their background per default, thus allowing for custom modals. See the [Wiki](https://github.com/rivo/tview/wiki/Modal) for an example. +- v0.14 (2018-04-13) + - Added an `Escape()` function which keep strings like color or region tags from being recognized as such. + - Added `ANSIIWriter()` and `TranslateANSII()` which convert ANSII escape sequences to `tview` color tags. +- v0.13 (2018-04-01) + - Added background colors and text attributes to color tags. +- v0.12 (2018-03-13) + - Added "suspended mode" to `Application`. +- v0.11 (2018-03-02) + - Added a `RemoveItem()` function to `Grid` and `Flex`. +- v0.10 (2018-02-22) + - Direct access to the `screen` object through callback in `Box` (i.e. for all primitives). +- v0.9 (2018-02-20) + - Introduced `Grid` layout. + - Direct access to the `screen` object through callbacks in `Application`. +- v0.8 (2018-01-17) + - Color tags can now be used almost everywhere. +- v0.7 (2018-01-16) + - Forms can now also have a horizontal layout. +- v0.6 (2018-01-14) + - All primitives can now intercept all key events when they have focus. + - Key events can also be intercepted globally (changed to a more general, consistent handling) +- v0.5 (2018-01-13) + - `TextView` now has word wrapping and text alignment +- v0.4 (2018-01-12) + - `TextView` now accepts color tags with any W3C color (including RGB hex values). + - Support for wide unicode characters. +- v0.3 (2018-01-11) + - Added masking to `InputField` and password entry to `Form`. +- v0.2 (2018-01-10) + - Added `Styles` variable with default colors for primitives. + - Completed some missing InputField functions. +- v0.1 (2018-01-06) + - First Release. diff --git a/vendor/github.com/rivo/tview/ansii.go b/vendor/github.com/rivo/tview/ansii.go new file mode 100644 index 00000000..0ce3d4a7 --- /dev/null +++ b/vendor/github.com/rivo/tview/ansii.go @@ -0,0 +1,237 @@ +package tview + +import ( + "bytes" + "fmt" + "io" + "strconv" + "strings" +) + +// The states of the ANSII escape code parser. +const ( + ansiiText = iota + ansiiEscape + ansiiSubstring + ansiiControlSequence +) + +// ansii is a io.Writer which translates ANSII escape codes into tview color +// tags. +type ansii struct { + io.Writer + + // Reusable buffers. + buffer *bytes.Buffer // The entire output text of one Write(). + csiParameter, csiIntermediate *bytes.Buffer // Partial CSI strings. + + // The current state of the parser. One of the ansii constants. + state int +} + +// ANSIIWriter returns an io.Writer which translates any ANSII escape codes +// written to it into tview color tags. Other escape codes don't have an effect +// and are simply removed. The translated text is written to the provided +// writer. +func ANSIIWriter(writer io.Writer) io.Writer { + return &ansii{ + Writer: writer, + buffer: new(bytes.Buffer), + csiParameter: new(bytes.Buffer), + csiIntermediate: new(bytes.Buffer), + state: ansiiText, + } +} + +// Write parses the given text as a string of runes, translates ANSII escape +// codes to color tags and writes them to the output writer. +func (a *ansii) Write(text []byte) (int, error) { + defer func() { + a.buffer.Reset() + }() + + for _, r := range string(text) { + switch a.state { + + // We just entered an escape sequence. + case ansiiEscape: + switch r { + case '[': // Control Sequence Introducer. + a.csiParameter.Reset() + a.csiIntermediate.Reset() + a.state = ansiiControlSequence + case 'c': // Reset. + fmt.Fprint(a.buffer, "[-:-:-]") + a.state = ansiiText + case 'P', ']', 'X', '^', '_': // Substrings and commands. + a.state = ansiiSubstring + default: // Ignore. + a.state = ansiiText + } + + // CSI Sequences. + case ansiiControlSequence: + switch { + case r >= 0x30 && r <= 0x3f: // Parameter bytes. + if _, err := a.csiParameter.WriteRune(r); err != nil { + return 0, err + } + case r >= 0x20 && r <= 0x2f: // Intermediate bytes. + if _, err := a.csiIntermediate.WriteRune(r); err != nil { + return 0, err + } + case r >= 0x40 && r <= 0x7e: // Final byte. + switch r { + case 'E': // Next line. + count, _ := strconv.Atoi(a.csiParameter.String()) + if count == 0 { + count = 1 + } + fmt.Fprint(a.buffer, strings.Repeat("\n", count)) + case 'm': // Select Graphic Rendition. + var ( + background, foreground, attributes string + clearAttributes bool + ) + fields := strings.Split(a.csiParameter.String(), ";") + if len(fields) == 0 || len(fields) == 1 && fields[0] == "0" { + // Reset. + if _, err := a.buffer.WriteString("[-:-:-]"); err != nil { + return 0, err + } + break + } + lookupColor := func(colorNumber int, bright bool) string { + if colorNumber < 0 || colorNumber > 7 { + return "black" + } + if bright { + colorNumber += 8 + } + return [...]string{ + "black", + "red", + "green", + "yellow", + "blue", + "darkmagenta", + "darkcyan", + "white", + "#7f7f7f", + "#ff0000", + "#00ff00", + "#ffff00", + "#5c5cff", + "#ff00ff", + "#00ffff", + "#ffffff", + }[colorNumber] + } + for index, field := range fields { + switch field { + case "1", "01": + attributes += "b" + case "2", "02": + attributes += "d" + case "4", "04": + attributes += "u" + case "5", "05": + attributes += "l" + case "7", "07": + attributes += "7" + case "22", "24", "25", "27": + clearAttributes = true + case "30", "31", "32", "33", "34", "35", "36", "37": + colorNumber, _ := strconv.Atoi(field) + foreground = lookupColor(colorNumber-30, false) + case "40", "41", "42", "43", "44", "45", "46", "47": + colorNumber, _ := strconv.Atoi(field) + background = lookupColor(colorNumber-40, false) + case "90", "91", "92", "93", "94", "95", "96", "97": + colorNumber, _ := strconv.Atoi(field) + foreground = lookupColor(colorNumber-90, true) + case "100", "101", "102", "103", "104", "105", "106", "107": + colorNumber, _ := strconv.Atoi(field) + background = lookupColor(colorNumber-100, true) + case "38", "48": + var color string + if len(fields) > index+1 { + if fields[index+1] == "5" && len(fields) > index+2 { // 8-bit colors. + colorNumber, _ := strconv.Atoi(fields[index+2]) + if colorNumber <= 7 { + color = lookupColor(colorNumber, false) + } else if colorNumber <= 15 { + color = lookupColor(colorNumber, true) + } else if colorNumber <= 231 { + red := (colorNumber - 16) / 36 + green := ((colorNumber - 16) / 6) % 6 + blue := (colorNumber - 16) % 6 + color = fmt.Sprintf("%02x%02x%02x", 255*red/5, 255*green/5, 255*blue/5) + } else if colorNumber <= 255 { + grey := 255 * (colorNumber - 232) / 23 + color = fmt.Sprintf("%02x%02x%02x", grey, grey, grey) + } + } else if fields[index+1] == "2" && len(fields) > index+4 { // 24-bit colors. + red, _ := strconv.Atoi(fields[index+2]) + green, _ := strconv.Atoi(fields[index+3]) + blue, _ := strconv.Atoi(fields[index+4]) + color = fmt.Sprintf("%02x%02x%02x", red, green, blue) + } + } + if len(color) > 0 { + if field == "38" { + foreground = color + } else { + background = color + } + } + } + } + if len(attributes) > 0 || clearAttributes { + attributes = ":" + attributes + } + if len(foreground) > 0 || len(background) > 0 || len(attributes) > 0 { + fmt.Fprintf(a.buffer, "[%s:%s%s]", foreground, background, attributes) + } + } + a.state = ansiiText + default: // Undefined byte. + a.state = ansiiText // Abort CSI. + } + + // We just entered a substring/command sequence. + case ansiiSubstring: + if r == 27 { // Most likely the end of the substring. + a.state = ansiiEscape + } // Ignore all other characters. + + // "ansiiText" and all others. + default: + if r == 27 { + // This is the start of an escape sequence. + a.state = ansiiEscape + } else { + // Just a regular rune. Send to buffer. + if _, err := a.buffer.WriteRune(r); err != nil { + return 0, err + } + } + } + } + + // Write buffer to target writer. + n, err := a.buffer.WriteTo(a.Writer) + if err != nil { + return int(n), err + } + return len(text), nil +} + +// TranslateANSII replaces ANSII escape sequences found in the provided string +// with tview's color tags and returns the resulting string. +func TranslateANSII(text string) string { + var buffer bytes.Buffer + writer := ANSIIWriter(&buffer) + writer.Write([]byte(text)) + return buffer.String() +} diff --git a/vendor/github.com/rivo/tview/application.go b/vendor/github.com/rivo/tview/application.go new file mode 100644 index 00000000..31821d9d --- /dev/null +++ b/vendor/github.com/rivo/tview/application.go @@ -0,0 +1,375 @@ +package tview + +import ( + "fmt" + "os" + "sync" + + "github.com/gdamore/tcell" +) + +// Application represents the top node of an application. +// +// It is not strictly required to use this class as none of the other classes +// depend on it. However, it provides useful tools to set up an application and +// plays nicely with all widgets. +type Application struct { + sync.RWMutex + + // The application's screen. + screen tcell.Screen + + // The primitive which currently has the keyboard focus. + focus Primitive + + // The root primitive to be seen on the screen. + root Primitive + + // Whether or not the application resizes the root primitive. + rootFullscreen bool + + // An optional capture function which receives a key event and returns the + // event to be forwarded to the default input handler (nil if nothing should + // be forwarded). + inputCapture func(event *tcell.EventKey) *tcell.EventKey + + // An optional callback function which is invoked just before the root + // primitive is drawn. + beforeDraw func(screen tcell.Screen) bool + + // An optional callback function which is invoked after the root primitive + // was drawn. + afterDraw func(screen tcell.Screen) + + // If this value is true, the application has entered suspended mode. + suspended bool +} + +// NewApplication creates and returns a new application. +func NewApplication() *Application { + return &Application{} +} + +// SetInputCapture sets a function which captures all key events before they are +// forwarded to the key event handler of the primitive which currently has +// focus. This function can then choose to forward that key event (or a +// different one) by returning it or stop the key event processing by returning +// nil. +// +// Note that this also affects the default event handling of the application +// itself: Such a handler can intercept the Ctrl-C event which closes the +// applicatoon. +func (a *Application) SetInputCapture(capture func(event *tcell.EventKey) *tcell.EventKey) *Application { + a.inputCapture = capture + return a +} + +// GetInputCapture returns the function installed with SetInputCapture() or nil +// if no such function has been installed. +func (a *Application) GetInputCapture() func(event *tcell.EventKey) *tcell.EventKey { + return a.inputCapture +} + +// Run starts the application and thus the event loop. This function returns +// when Stop() was called. +func (a *Application) Run() error { + var err error + a.Lock() + + // Make a screen. + a.screen, err = tcell.NewScreen() + if err != nil { + a.Unlock() + return err + } + if err = a.screen.Init(); err != nil { + a.Unlock() + return err + } + + // We catch panics to clean up because they mess up the terminal. + defer func() { + if p := recover(); p != nil { + if a.screen != nil { + a.screen.Fini() + } + panic(p) + } + }() + + // Draw the screen for the first time. + a.Unlock() + a.Draw() + + // Start event loop. + for { + a.Lock() + screen := a.screen + if a.suspended { + a.suspended = false // Clear previous suspended flag. + } + a.Unlock() + if screen == nil { + break + } + + // Wait for next event. + event := a.screen.PollEvent() + if event == nil { + a.Lock() + if a.suspended { + // This screen was renewed due to suspended mode. + a.suspended = false + a.Unlock() + continue // Resume. + } + a.Unlock() + + // The screen was finalized. Exit the loop. + break + } + + switch event := event.(type) { + case *tcell.EventKey: + a.RLock() + p := a.focus + a.RUnlock() + + // Intercept keys. + if a.inputCapture != nil { + event = a.inputCapture(event) + if event == nil { + break // Don't forward event. + } + } + + // Ctrl-C closes the application. + if event.Key() == tcell.KeyCtrlC { + a.Stop() + } + + // Pass other key events to the currently focused primitive. + if p != nil { + if handler := p.InputHandler(); handler != nil { + handler(event, func(p Primitive) { + a.SetFocus(p) + }) + a.Draw() + } + } + case *tcell.EventResize: + a.Lock() + screen := a.screen + a.Unlock() + screen.Clear() + a.Draw() + } + } + + return nil +} + +// Stop stops the application, causing Run() to return. +func (a *Application) Stop() { + a.RLock() + defer a.RUnlock() + if a.screen == nil { + return + } + a.screen.Fini() + a.screen = nil +} + +// Suspend temporarily suspends the application by exiting terminal UI mode and +// invoking the provided function "f". When "f" returns, terminal UI mode is +// entered again and the application resumes. +// +// A return value of true indicates that the application was suspended and "f" +// was called. If false is returned, the application was already suspended, +// terminal UI mode was not exited, and "f" was not called. +func (a *Application) Suspend(f func()) bool { + a.Lock() + + if a.suspended || a.screen == nil { + // Application is already suspended. + a.Unlock() + return false + } + + // Enter suspended mode. + a.suspended = true + a.Unlock() + a.Stop() + + // Deal with panics during suspended mode. Exit the program. + defer func() { + if p := recover(); p != nil { + fmt.Println(p) + os.Exit(1) + } + }() + + // Wait for "f" to return. + f() + + // Make a new screen and redraw. + a.Lock() + var err error + a.screen, err = tcell.NewScreen() + if err != nil { + a.Unlock() + panic(err) + } + if err = a.screen.Init(); err != nil { + a.Unlock() + panic(err) + } + a.Unlock() + a.Draw() + + // Continue application loop. + return true +} + +// Draw refreshes the screen. It calls the Draw() function of the application's +// root primitive and then syncs the screen buffer. +func (a *Application) Draw() *Application { + a.RLock() + screen := a.screen + root := a.root + fullscreen := a.rootFullscreen + before := a.beforeDraw + after := a.afterDraw + a.RUnlock() + + // Maybe we're not ready yet or not anymore. + if screen == nil || root == nil { + return a + } + + // Resize if requested. + if fullscreen && root != nil { + width, height := screen.Size() + root.SetRect(0, 0, width, height) + } + + // Call before handler if there is one. + if before != nil { + if before(screen) { + screen.Show() + return a + } + } + + // Draw all primitives. + root.Draw(screen) + + // Call after handler if there is one. + if after != nil { + after(screen) + } + + // Sync screen. + screen.Show() + + return a +} + +// SetBeforeDrawFunc installs a callback function which is invoked just before +// the root primitive is drawn during screen updates. If the function returns +// true, drawing will not continue, i.e. the root primitive will not be drawn +// (and an after-draw-handler will not be called). +// +// Note that the screen is not cleared by the application. To clear the screen, +// you may call screen.Clear(). +// +// Provide nil to uninstall the callback function. +func (a *Application) SetBeforeDrawFunc(handler func(screen tcell.Screen) bool) *Application { + a.beforeDraw = handler + return a +} + +// GetBeforeDrawFunc returns the callback function installed with +// SetBeforeDrawFunc() or nil if none has been installed. +func (a *Application) GetBeforeDrawFunc() func(screen tcell.Screen) bool { + return a.beforeDraw +} + +// SetAfterDrawFunc installs a callback function which is invoked after the root +// primitive was drawn during screen updates. +// +// Provide nil to uninstall the callback function. +func (a *Application) SetAfterDrawFunc(handler func(screen tcell.Screen)) *Application { + a.afterDraw = handler + return a +} + +// GetAfterDrawFunc returns the callback function installed with +// SetAfterDrawFunc() or nil if none has been installed. +func (a *Application) GetAfterDrawFunc() func(screen tcell.Screen) { + return a.afterDraw +} + +// SetRoot sets the root primitive for this application. If "fullscreen" is set +// to true, the root primitive's position will be changed to fill the screen. +// +// This function must be called at least once or nothing will be displayed when +// the application starts. +// +// It also calls SetFocus() on the primitive. +func (a *Application) SetRoot(root Primitive, fullscreen bool) *Application { + a.Lock() + a.root = root + a.rootFullscreen = fullscreen + if a.screen != nil { + a.screen.Clear() + } + a.Unlock() + + a.SetFocus(root) + + return a +} + +// ResizeToFullScreen resizes the given primitive such that it fills the entire +// screen. +func (a *Application) ResizeToFullScreen(p Primitive) *Application { + a.RLock() + width, height := a.screen.Size() + a.RUnlock() + p.SetRect(0, 0, width, height) + return a +} + +// SetFocus sets the focus on a new primitive. All key events will be redirected +// to that primitive. Callers must ensure that the primitive will handle key +// events. +// +// Blur() will be called on the previously focused primitive. Focus() will be +// called on the new primitive. +func (a *Application) SetFocus(p Primitive) *Application { + a.Lock() + if a.focus != nil { + a.focus.Blur() + } + a.focus = p + if a.screen != nil { + a.screen.HideCursor() + } + a.Unlock() + if p != nil { + p.Focus(func(p Primitive) { + a.SetFocus(p) + }) + } + + return a +} + +// GetFocus returns the primitive which has the current focus. If none has it, +// nil is returned. +func (a *Application) GetFocus() Primitive { + a.RLock() + defer a.RUnlock() + return a.focus +} diff --git a/vendor/github.com/rivo/tview/box.go b/vendor/github.com/rivo/tview/box.go new file mode 100644 index 00000000..086ff5a6 --- /dev/null +++ b/vendor/github.com/rivo/tview/box.go @@ -0,0 +1,324 @@ +package tview + +import ( + "github.com/gdamore/tcell" +) + +// Box implements Primitive with a background and optional elements such as a +// border and a title. Most subclasses keep their content contained in the box +// but don't necessarily have to. +// +// Note that all classes which subclass from Box will also have access to its +// functions. +// +// See https://github.com/rivo/tview/wiki/Box for an example. +type Box struct { + // The position of the rect. + x, y, width, height int + + // The inner rect reserved for the box's content. + innerX, innerY, innerWidth, innerHeight int + + // Border padding. + paddingTop, paddingBottom, paddingLeft, paddingRight int + + // The box's background color. + backgroundColor tcell.Color + + // Whether or not a border is drawn, reducing the box's space for content by + // two in width and height. + border bool + + // The color of the border. + borderColor tcell.Color + + // The title. Only visible if there is a border, too. + title string + + // The color of the title. + titleColor tcell.Color + + // The alignment of the title. + titleAlign int + + // Provides a way to find out if this box has focus. We always go through + // this interface because it may be overridden by implementing classes. + focus Focusable + + // Whether or not this box has focus. + hasFocus bool + + // If set to true, the inner rect of this box will be within the screen at the + // last time the box was drawn. + clampToScreen bool + + // An optional capture function which receives a key event and returns the + // event to be forwarded to the primitive's default input handler (nil if + // nothing should be forwarded). + inputCapture func(event *tcell.EventKey) *tcell.EventKey + + // An optional function which is called before the box is drawn. + draw func(screen tcell.Screen, x, y, width, height int) (int, int, int, int) +} + +// NewBox returns a Box without a border. +func NewBox() *Box { + b := &Box{ + width: 15, + height: 10, + innerX: -1, // Mark as uninitialized. + backgroundColor: Styles.PrimitiveBackgroundColor, + borderColor: Styles.BorderColor, + titleColor: Styles.TitleColor, + titleAlign: AlignCenter, + clampToScreen: true, + } + b.focus = b + return b +} + +// SetBorderPadding sets the size of the borders around the box content. +func (b *Box) SetBorderPadding(top, bottom, left, right int) *Box { + b.paddingTop, b.paddingBottom, b.paddingLeft, b.paddingRight = top, bottom, left, right + return b +} + +// GetRect returns the current position of the rectangle, x, y, width, and +// height. +func (b *Box) GetRect() (int, int, int, int) { + return b.x, b.y, b.width, b.height +} + +// GetInnerRect returns the position of the inner rectangle (x, y, width, +// height), without the border and without any padding. +func (b *Box) GetInnerRect() (int, int, int, int) { + if b.innerX >= 0 { + return b.innerX, b.innerY, b.innerWidth, b.innerHeight + } + x, y, width, height := b.GetRect() + if b.border { + x++ + y++ + width -= 2 + height -= 2 + } + return x + b.paddingLeft, + y + b.paddingTop, + width - b.paddingLeft - b.paddingRight, + height - b.paddingTop - b.paddingBottom +} + +// SetRect sets a new position of the primitive. +func (b *Box) SetRect(x, y, width, height int) { + b.x = x + b.y = y + b.width = width + b.height = height +} + +// SetDrawFunc sets a callback function which is invoked after the box primitive +// has been drawn. This allows you to add a more individual style to the box +// (and all primitives which extend it). +// +// The function is provided with the box's dimensions (set via SetRect()). It +// must return the box's inner dimensions (x, y, width, height) which will be +// returned by GetInnerRect(), used by descendent primitives to draw their own +// content. +func (b *Box) SetDrawFunc(handler func(screen tcell.Screen, x, y, width, height int) (int, int, int, int)) *Box { + b.draw = handler + return b +} + +// GetDrawFunc returns the callback function which was installed with +// SetDrawFunc() or nil if no such function has been installed. +func (b *Box) GetDrawFunc() func(screen tcell.Screen, x, y, width, height int) (int, int, int, int) { + return b.draw +} + +// WrapInputHandler wraps an input handler (see InputHandler()) with the +// functionality to capture input (see SetInputCapture()) before passing it +// on to the provided (default) input handler. +// +// This is only meant to be used by subclassing primitives. +func (b *Box) WrapInputHandler(inputHandler func(*tcell.EventKey, func(p Primitive))) func(*tcell.EventKey, func(p Primitive)) { + return func(event *tcell.EventKey, setFocus func(p Primitive)) { + if b.inputCapture != nil { + event = b.inputCapture(event) + } + if event != nil && inputHandler != nil { + inputHandler(event, setFocus) + } + } +} + +// InputHandler returns nil. +func (b *Box) InputHandler() func(event *tcell.EventKey, setFocus func(p Primitive)) { + return b.WrapInputHandler(nil) +} + +// SetInputCapture installs a function which captures key events before they are +// forwarded to the primitive's default key event handler. This function can +// then choose to forward that key event (or a different one) to the default +// handler by returning it. If nil is returned, the default handler will not +// be called. +// +// Providing a nil handler will remove a previously existing handler. +func (b *Box) SetInputCapture(capture func(event *tcell.EventKey) *tcell.EventKey) *Box { + b.inputCapture = capture + return b +} + +// GetInputCapture returns the function installed with SetInputCapture() or nil +// if no such function has been installed. +func (b *Box) GetInputCapture() func(event *tcell.EventKey) *tcell.EventKey { + return b.inputCapture +} + +// SetBackgroundColor sets the box's background color. +func (b *Box) SetBackgroundColor(color tcell.Color) *Box { + b.backgroundColor = color + return b +} + +// SetBorder sets the flag indicating whether or not the box should have a +// border. +func (b *Box) SetBorder(show bool) *Box { + b.border = show + return b +} + +// SetBorderColor sets the box's border color. +func (b *Box) SetBorderColor(color tcell.Color) *Box { + b.borderColor = color + return b +} + +// SetTitle sets the box's title. +func (b *Box) SetTitle(title string) *Box { + b.title = title + return b +} + +// SetTitleColor sets the box's title color. +func (b *Box) SetTitleColor(color tcell.Color) *Box { + b.titleColor = color + return b +} + +// SetTitleAlign sets the alignment of the title, one of AlignLeft, AlignCenter, +// or AlignRight. +func (b *Box) SetTitleAlign(align int) *Box { + b.titleAlign = align + return b +} + +// Draw draws this primitive onto the screen. +func (b *Box) Draw(screen tcell.Screen) { + // Don't draw anything if there is no space. + if b.width <= 0 || b.height <= 0 { + return + } + + def := tcell.StyleDefault + + // Fill background. + background := def.Background(b.backgroundColor) + if b.backgroundColor != tcell.ColorDefault { + for y := b.y; y < b.y+b.height; y++ { + for x := b.x; x < b.x+b.width; x++ { + screen.SetContent(x, y, ' ', nil, background) + } + } + } + + // Draw border. + if b.border && b.width >= 2 && b.height >= 2 { + border := background.Foreground(b.borderColor) + var vertical, horizontal, topLeft, topRight, bottomLeft, bottomRight rune + if b.focus.HasFocus() { + vertical = GraphicsDbVertBar + horizontal = GraphicsDbHorBar + topLeft = GraphicsDbTopLeftCorner + topRight = GraphicsDbTopRightCorner + bottomLeft = GraphicsDbBottomLeftCorner + bottomRight = GraphicsDbBottomRightCorner + } else { + vertical = GraphicsHoriBar + horizontal = GraphicsVertBar + topLeft = GraphicsTopLeftCorner + topRight = GraphicsTopRightCorner + bottomLeft = GraphicsBottomLeftCorner + bottomRight = GraphicsBottomRightCorner + } + for x := b.x + 1; x < b.x+b.width-1; x++ { + screen.SetContent(x, b.y, vertical, nil, border) + screen.SetContent(x, b.y+b.height-1, vertical, nil, border) + } + for y := b.y + 1; y < b.y+b.height-1; y++ { + screen.SetContent(b.x, y, horizontal, nil, border) + screen.SetContent(b.x+b.width-1, y, horizontal, nil, border) + } + screen.SetContent(b.x, b.y, topLeft, nil, border) + screen.SetContent(b.x+b.width-1, b.y, topRight, nil, border) + screen.SetContent(b.x, b.y+b.height-1, bottomLeft, nil, border) + screen.SetContent(b.x+b.width-1, b.y+b.height-1, bottomRight, nil, border) + + // Draw title. + if b.title != "" && b.width >= 4 { + _, printed := Print(screen, b.title, b.x+1, b.y, b.width-2, b.titleAlign, b.titleColor) + if StringWidth(b.title)-printed > 0 && printed > 0 { + _, _, style, _ := screen.GetContent(b.x+b.width-2, b.y) + fg, _, _ := style.Decompose() + Print(screen, string(GraphicsEllipsis), b.x+b.width-2, b.y, 1, AlignLeft, fg) + } + } + } + + // Call custom draw function. + if b.draw != nil { + b.innerX, b.innerY, b.innerWidth, b.innerHeight = b.draw(screen, b.x, b.y, b.width, b.height) + } else { + // Remember the inner rect. + b.innerX = -1 + b.innerX, b.innerY, b.innerWidth, b.innerHeight = b.GetInnerRect() + } + + // Clamp inner rect to screen. + if b.clampToScreen { + width, height := screen.Size() + if b.innerX < 0 { + b.innerWidth += b.innerX + b.innerX = 0 + } + if b.innerX+b.innerWidth >= width { + b.innerWidth = width - b.innerX + } + if b.innerY+b.innerHeight >= height { + b.innerHeight = height - b.innerY + } + if b.innerY < 0 { + b.innerHeight += b.innerY + b.innerY = 0 + } + } +} + +// Focus is called when this primitive receives focus. +func (b *Box) Focus(delegate func(p Primitive)) { + b.hasFocus = true +} + +// Blur is called when this primitive loses focus. +func (b *Box) Blur() { + b.hasFocus = false +} + +// HasFocus returns whether or not this primitive has focus. +func (b *Box) HasFocus() bool { + return b.hasFocus +} + +// GetFocusable returns the item's Focusable. +func (b *Box) GetFocusable() Focusable { + return b.focus +} diff --git a/vendor/github.com/rivo/tview/button.go b/vendor/github.com/rivo/tview/button.go new file mode 100644 index 00000000..5efc31ae --- /dev/null +++ b/vendor/github.com/rivo/tview/button.go @@ -0,0 +1,137 @@ +package tview + +import ( + "github.com/gdamore/tcell" +) + +// Button is labeled box that triggers an action when selected. +// +// See https://github.com/rivo/tview/wiki/Button for an example. +type Button struct { + *Box + + // The text to be displayed before the input area. + label string + + // The label color. + labelColor tcell.Color + + // The label color when the button is in focus. + labelColorActivated tcell.Color + + // The background color when the button is in focus. + backgroundColorActivated tcell.Color + + // An optional function which is called when the button was selected. + selected func() + + // An optional function which is called when the user leaves the button. A + // key is provided indicating which key was pressed to leave (tab or backtab). + blur func(tcell.Key) +} + +// NewButton returns a new input field. +func NewButton(label string) *Button { + box := NewBox().SetBackgroundColor(Styles.ContrastBackgroundColor) + box.SetRect(0, 0, StringWidth(label)+4, 1) + return &Button{ + Box: box, + label: label, + labelColor: Styles.PrimaryTextColor, + labelColorActivated: Styles.InverseTextColor, + backgroundColorActivated: Styles.PrimaryTextColor, + } +} + +// SetLabel sets the button text. +func (b *Button) SetLabel(label string) *Button { + b.label = label + return b +} + +// GetLabel returns the button text. +func (b *Button) GetLabel() string { + return b.label +} + +// SetLabelColor sets the color of the button text. +func (b *Button) SetLabelColor(color tcell.Color) *Button { + b.labelColor = color + return b +} + +// SetLabelColorActivated sets the color of the button text when the button is +// in focus. +func (b *Button) SetLabelColorActivated(color tcell.Color) *Button { + b.labelColorActivated = color + return b +} + +// SetBackgroundColorActivated sets the background color of the button text when +// the button is in focus. +func (b *Button) SetBackgroundColorActivated(color tcell.Color) *Button { + b.backgroundColorActivated = color + return b +} + +// SetSelectedFunc sets a handler which is called when the button was selected. +func (b *Button) SetSelectedFunc(handler func()) *Button { + b.selected = handler + return b +} + +// SetBlurFunc sets a handler which is called when the user leaves the button. +// The callback function is provided with the key that was pressed, which is one +// of the following: +// +// - KeyEscape: Leaving the button with no specific direction. +// - KeyTab: Move to the next field. +// - KeyBacktab: Move to the previous field. +func (b *Button) SetBlurFunc(handler func(key tcell.Key)) *Button { + b.blur = handler + return b +} + +// Draw draws this primitive onto the screen. +func (b *Button) Draw(screen tcell.Screen) { + // Draw the box. + borderColor := b.borderColor + backgroundColor := b.backgroundColor + if b.focus.HasFocus() { + b.backgroundColor = b.backgroundColorActivated + b.borderColor = b.labelColorActivated + defer func() { + b.borderColor = borderColor + }() + } + b.Box.Draw(screen) + b.backgroundColor = backgroundColor + + // Draw label. + x, y, width, height := b.GetInnerRect() + if width > 0 && height > 0 { + y = y + height/2 + labelColor := b.labelColor + if b.focus.HasFocus() { + labelColor = b.labelColorActivated + } + Print(screen, b.label, x, y, width, AlignCenter, labelColor) + } +} + +// InputHandler returns the handler for this primitive. +func (b *Button) InputHandler() func(event *tcell.EventKey, setFocus func(p Primitive)) { + return b.WrapInputHandler(func(event *tcell.EventKey, setFocus func(p Primitive)) { + // Process key event. + switch key := event.Key(); key { + case tcell.KeyEnter: // Selected. + if b.selected != nil { + b.selected() + } + case tcell.KeyBacktab, tcell.KeyTab, tcell.KeyEscape: // Leave. No action. + if b.blur != nil { + b.blur(key) + } + } + }) +} diff --git a/vendor/github.com/rivo/tview/checkbox.go b/vendor/github.com/rivo/tview/checkbox.go new file mode 100644 index 00000000..768c112e --- /dev/null +++ b/vendor/github.com/rivo/tview/checkbox.go @@ -0,0 +1,203 @@ +package tview + +import ( + "github.com/gdamore/tcell" +) + +// Checkbox implements a simple box for boolean values which can be checked and +// unchecked. +// +// See https://github.com/rivo/tview/wiki/Checkbox for an example. +type Checkbox struct { + *Box + + // Whether or not this box is checked. + checked bool + + // The text to be displayed before the input area. + label string + + // The screen width of the label area. A value of 0 means use the width of + // the label text. + labelWidth int + + // The label color. + labelColor tcell.Color + + // The background color of the input area. + fieldBackgroundColor tcell.Color + + // The text color of the input area. + fieldTextColor tcell.Color + + // An optional function which is called when the user changes the checked + // state of this checkbox. + changed func(checked bool) + + // An optional function which is called when the user indicated that they + // are done entering text. The key which was pressed is provided (tab, + // shift-tab, or escape). + done func(tcell.Key) + + // A callback function set by the Form class and called when the user leaves + // this form item. + finished func(tcell.Key) +} + +// NewCheckbox returns a new input field. +func NewCheckbox() *Checkbox { + return &Checkbox{ + Box: NewBox(), + labelColor: Styles.SecondaryTextColor, + fieldBackgroundColor: Styles.ContrastBackgroundColor, + fieldTextColor: Styles.PrimaryTextColor, + } +} + +// SetChecked sets the state of the checkbox. +func (c *Checkbox) SetChecked(checked bool) *Checkbox { + c.checked = checked + return c +} + +// IsChecked returns whether or not the box is checked. +func (c *Checkbox) IsChecked() bool { + return c.checked +} + +// SetLabel sets the text to be displayed before the input area. +func (c *Checkbox) SetLabel(label string) *Checkbox { + c.label = label + return c +} + +// GetLabel returns the text to be displayed before the input area. +func (c *Checkbox) GetLabel() string { + return c.label +} + +// SetLabelWidth sets the screen width of the label. A value of 0 will cause the +// primitive to use the width of the label string. +func (c *Checkbox) SetLabelWidth(width int) *Checkbox { + c.labelWidth = width + return c +} + +// SetLabelColor sets the color of the label. +func (c *Checkbox) SetLabelColor(color tcell.Color) *Checkbox { + c.labelColor = color + return c +} + +// SetFieldBackgroundColor sets the background color of the input area. +func (c *Checkbox) SetFieldBackgroundColor(color tcell.Color) *Checkbox { + c.fieldBackgroundColor = color + return c +} + +// SetFieldTextColor sets the text color of the input area. +func (c *Checkbox) SetFieldTextColor(color tcell.Color) *Checkbox { + c.fieldTextColor = color + return c +} + +// SetFormAttributes sets attributes shared by all form items. +func (c *Checkbox) SetFormAttributes(labelWidth int, labelColor, bgColor, fieldTextColor, fieldBgColor tcell.Color) FormItem { + c.labelWidth = labelWidth + c.labelColor = labelColor + c.backgroundColor = bgColor + c.fieldTextColor = fieldTextColor + c.fieldBackgroundColor = fieldBgColor + return c +} + +// GetFieldWidth returns this primitive's field width. +func (c *Checkbox) GetFieldWidth() int { + return 1 +} + +// SetChangedFunc sets a handler which is called when the checked state of this +// checkbox was changed by the user. The handler function receives the new +// state. +func (c *Checkbox) SetChangedFunc(handler func(checked bool)) *Checkbox { + c.changed = handler + return c +} + +// SetDoneFunc sets a handler which is called when the user is done entering +// text. The callback function is provided with the key that was pressed, which +// is one of the following: +// +// - KeyEscape: Abort text input. +// - KeyTab: Move to the next field. +// - KeyBacktab: Move to the previous field. +func (c *Checkbox) SetDoneFunc(handler func(key tcell.Key)) *Checkbox { + c.done = handler + return c +} + +// SetFinishedFunc sets a callback invoked when the user leaves this form item. +func (c *Checkbox) SetFinishedFunc(handler func(key tcell.Key)) FormItem { + c.finished = handler + return c +} + +// Draw draws this primitive onto the screen. +func (c *Checkbox) Draw(screen tcell.Screen) { + c.Box.Draw(screen) + + // Prepare + x, y, width, height := c.GetInnerRect() + rightLimit := x + width + if height < 1 || rightLimit <= x { + return + } + + // Draw label. + if c.labelWidth > 0 { + labelWidth := c.labelWidth + if labelWidth > rightLimit-x { + labelWidth = rightLimit - x + } + Print(screen, c.label, x, y, labelWidth, AlignLeft, c.labelColor) + x += labelWidth + } else { + _, drawnWidth := Print(screen, c.label, x, y, rightLimit-x, AlignLeft, c.labelColor) + x += drawnWidth + } + + // Draw checkbox. + fieldStyle := tcell.StyleDefault.Background(c.fieldBackgroundColor).Foreground(c.fieldTextColor) + if c.focus.HasFocus() { + fieldStyle = fieldStyle.Background(c.fieldTextColor).Foreground(c.fieldBackgroundColor) + } + checkedRune := 'X' + if !c.checked { + checkedRune = ' ' + } + screen.SetContent(x, y, checkedRune, nil, fieldStyle) +} + +// InputHandler returns the handler for this primitive. +func (c *Checkbox) InputHandler() func(event *tcell.EventKey, setFocus func(p Primitive)) { + return c.WrapInputHandler(func(event *tcell.EventKey, setFocus func(p Primitive)) { + // Process key event. + switch key := event.Key(); key { + case tcell.KeyRune, tcell.KeyEnter: // Check. + if key == tcell.KeyRune && event.Rune() != ' ' { + break + } + c.checked = !c.checked + if c.changed != nil { + c.changed(c.checked) + } + case tcell.KeyTab, tcell.KeyBacktab, tcell.KeyEscape: // We're done. + if c.done != nil { + c.done(key) + } + if c.finished != nil { + c.finished(key) + } + } + }) +} diff --git a/vendor/github.com/rivo/tview/doc.go b/vendor/github.com/rivo/tview/doc.go new file mode 100644 index 00000000..211185f3 --- /dev/null +++ b/vendor/github.com/rivo/tview/doc.go @@ -0,0 +1,151 @@ +/* +Package tview implements rich widgets for terminal based user interfaces. The +widgets provided with this package are useful for data exploration and data +entry. + +Widgets + +The package implements the following widgets: + + - TextView: Scrollable windows that display multi-colored text. Text may also + be highlighted. + - Table: Scrollable display of tabular data. Table cells, rows, or columns may + also be highlighted. + - List: A navigable text list with optional keyboard shortcuts. + - InputField: One-line input fields to enter text. + - DropDown: Drop-down selection fields. + - Checkbox: Selectable checkbox for boolean values. + - Button: Buttons which get activated when the user selects them. + - Form: Forms composed of input fields, drop down selections, checkboxes, and + buttons. + - Modal: A centered window with a text message and one or more buttons. + - Flex: A Flexbox based layout manager. + - Pages: A page based layout manager. + +The package also provides Application which is used to poll the event queue and +draw widgets on screen. + +Hello World + +The following is a very basic example showing a box with the title "Hello, +world!": + + package main + + import ( + "github.com/rivo/tview" + ) + + func main() { + box := tview.NewBox().SetBorder(true).SetTitle("Hello, world!") + if err := tview.NewApplication().SetRoot(box, true).Run(); err != nil { + panic(err) + } + } + +First, we create a box primitive with a border and a title. Then we create an +application, set the box as its root primitive, and run the event loop. The +application exits when the application's Stop() function is called or when +Ctrl-C is pressed. + +If we have a primitive which consumes key presses, we call the application's +SetFocus() function to redirect all key presses to that primitive. Most +primitives then offer ways to install handlers that allow you to react to any +actions performed on them. + +More Demos + +You will find more demos in the "demos" subdirectory. It also contains a +presentation (written using tview) which gives an overview of the different +widgets and how they can be used. + +Colors + +Throughout this package, colors are specified using the tcell.Color type. +Functions such as tcell.GetColor(), tcell.NewHexColor(), and tcell.NewRGBColor() +can be used to create colors from W3C color names or RGB values. + +Almost all strings which are displayed can contain color tags. Color tags are +W3C color names or six hexadecimal digits following a hash tag, wrapped in +square brackets. Examples: + + This is a [red]warning[white]! + The sky is [#8080ff]blue[#ffffff]. + +A color tag changes the color of the characters following that color tag. This +applies to almost everything from box titles, list text, form item labels, to +table cells. In a TextView, this functionality has to be switched on explicitly. +See the TextView documentation for more information. + +Color tags may contain not just the foreground (text) color but also the +background color and additional flags. In fact, the full definition of a color +tag is as follows: + + [::] + +Each of the three fields can be left blank and trailing fields can be ommitted. +(Empty square brackets "[]", however, are not considered color tags.) Colors +that are not specified will be left unchanged. A field with just a dash ("-") +means "reset to default". + +You can specify the following flags (some flags may not be supported by your +terminal): + + l: blink + b: bold + d: dim + r: reverse (switch foreground and background color) + u: underline + +Examples: + + [yellow]Yellow text + [yellow:red]Yellow text on red background + [:red]Red background, text color unchanged + [yellow::u]Yellow text underlined + [::bl]Bold, blinking text + [::-]Colors unchanged, flags reset + [-]Reset foreground color + [-:-:-]Reset everything + [:]No effect + []Not a valid color tag, will print square brackets as they are + +In the rare event that you want to display a string such as "[red]" or +"[#00ff1a]" without applying its effect, you need to put an opening square +bracket before the closing square bracket. Note that the text inside the +brackets will be matched less strictly than region or colors tags. I.e. any +character that may be used in color or region tags will be recognized. Examples: + + [red[] will be output as [red] + ["123"[] will be output as ["123"] + [#6aff00[[] will be output as [#6aff00[] + [a#"[[[] will be output as [a#"[[] + [] will be output as [] (see color tags above) + [[] will be output as [[] (not an escaped tag) + +You can use the Escape() function to insert brackets automatically where needed. + +Styles + +When primitives are instantiated, they are initialized with colors taken from +the global Styles variable. You may change this variable to adapt the look and +feel of the primitives to your preferred style. + +Unicode Support + +This package supports unicode characters including wide characters. + +Type Hierarchy + +All widgets listed above contain the Box type. All of Box's functions are +therefore available for all widgets, too. + +All widgets also implement the Primitive interface. There is also the Focusable +interface which is used to override functions in subclassing types. + +The tview package is based on https://github.com/gdamore/tcell. It uses types +and constants from that package (e.g. colors and keyboard values). + +This package does not process mouse input (yet). +*/ +package tview diff --git a/vendor/github.com/rivo/tview/dropdown.go b/vendor/github.com/rivo/tview/dropdown.go new file mode 100644 index 00000000..14307487 --- /dev/null +++ b/vendor/github.com/rivo/tview/dropdown.go @@ -0,0 +1,408 @@ +package tview + +import ( + "strings" + + "github.com/gdamore/tcell" + runewidth "github.com/mattn/go-runewidth" +) + +// dropDownOption is one option that can be selected in a drop-down primitive. +type dropDownOption struct { + Text string // The text to be displayed in the drop-down. + Selected func() // The (optional) callback for when this option was selected. +} + +// DropDown implements a selection widget whose options become visible in a +// drop-down list when activated. +// +// See https://github.com/rivo/tview/wiki/DropDown for an example. +type DropDown struct { + *Box + + // The options from which the user can choose. + options []*dropDownOption + + // The index of the currently selected option. Negative if no option is + // currently selected. + currentOption int + + // Set to true if the options are visible and selectable. + open bool + + // The runes typed so far to directly access one of the list items. + prefix string + + // The list element for the options. + list *List + + // The text to be displayed before the input area. + label string + + // The label color. + labelColor tcell.Color + + // The background color of the input area. + fieldBackgroundColor tcell.Color + + // The text color of the input area. + fieldTextColor tcell.Color + + // The color for prefixes. + prefixTextColor tcell.Color + + // The screen width of the label area. A value of 0 means use the width of + // the label text. + labelWidth int + + // The screen width of the input area. A value of 0 means extend as much as + // possible. + fieldWidth int + + // An optional function which is called when the user indicated that they + // are done selecting options. The key which was pressed is provided (tab, + // shift-tab, or escape). + done func(tcell.Key) + + // A callback function set by the Form class and called when the user leaves + // this form item. + finished func(tcell.Key) +} + +// NewDropDown returns a new drop-down. +func NewDropDown() *DropDown { + list := NewList().ShowSecondaryText(false) + list.SetMainTextColor(Styles.PrimitiveBackgroundColor). + SetSelectedTextColor(Styles.PrimitiveBackgroundColor). + SetSelectedBackgroundColor(Styles.PrimaryTextColor). + SetBackgroundColor(Styles.MoreContrastBackgroundColor) + + d := &DropDown{ + Box: NewBox(), + currentOption: -1, + list: list, + labelColor: Styles.SecondaryTextColor, + fieldBackgroundColor: Styles.ContrastBackgroundColor, + fieldTextColor: Styles.PrimaryTextColor, + prefixTextColor: Styles.ContrastSecondaryTextColor, + } + + d.focus = d + + return d +} + +// SetCurrentOption sets the index of the currently selected option. This may +// be a negative value to indicate that no option is currently selected. +func (d *DropDown) SetCurrentOption(index int) *DropDown { + d.currentOption = index + d.list.SetCurrentItem(index) + return d +} + +// GetCurrentOption returns the index of the currently selected option as well +// as its text. If no option was selected, -1 and an empty string is returned. +func (d *DropDown) GetCurrentOption() (int, string) { + var text string + if d.currentOption >= 0 && d.currentOption < len(d.options) { + text = d.options[d.currentOption].Text + } + return d.currentOption, text +} + +// SetLabel sets the text to be displayed before the input area. +func (d *DropDown) SetLabel(label string) *DropDown { + d.label = label + return d +} + +// GetLabel returns the text to be displayed before the input area. +func (d *DropDown) GetLabel() string { + return d.label +} + +// SetLabelWidth sets the screen width of the label. A value of 0 will cause the +// primitive to use the width of the label string. +func (d *DropDown) SetLabelWidth(width int) *DropDown { + d.labelWidth = width + return d +} + +// SetLabelColor sets the color of the label. +func (d *DropDown) SetLabelColor(color tcell.Color) *DropDown { + d.labelColor = color + return d +} + +// SetFieldBackgroundColor sets the background color of the options area. +func (d *DropDown) SetFieldBackgroundColor(color tcell.Color) *DropDown { + d.fieldBackgroundColor = color + return d +} + +// SetFieldTextColor sets the text color of the options area. +func (d *DropDown) SetFieldTextColor(color tcell.Color) *DropDown { + d.fieldTextColor = color + return d +} + +// SetPrefixTextColor sets the color of the prefix string. The prefix string is +// shown when the user starts typing text, which directly selects the first +// option that starts with the typed string. +func (d *DropDown) SetPrefixTextColor(color tcell.Color) *DropDown { + d.prefixTextColor = color + return d +} + +// SetFormAttributes sets attributes shared by all form items. +func (d *DropDown) SetFormAttributes(labelWidth int, labelColor, bgColor, fieldTextColor, fieldBgColor tcell.Color) FormItem { + d.labelWidth = labelWidth + d.labelColor = labelColor + d.backgroundColor = bgColor + d.fieldTextColor = fieldTextColor + d.fieldBackgroundColor = fieldBgColor + return d +} + +// SetFieldWidth sets the screen width of the options area. A value of 0 means +// extend to as long as the longest option text. +func (d *DropDown) SetFieldWidth(width int) *DropDown { + d.fieldWidth = width + return d +} + +// GetFieldWidth returns this primitive's field screen width. +func (d *DropDown) GetFieldWidth() int { + if d.fieldWidth > 0 { + return d.fieldWidth + } + fieldWidth := 0 + for _, option := range d.options { + width := StringWidth(option.Text) + if width > fieldWidth { + fieldWidth = width + } + } + return fieldWidth +} + +// AddOption adds a new selectable option to this drop-down. The "selected" +// callback is called when this option was selected. It may be nil. +func (d *DropDown) AddOption(text string, selected func()) *DropDown { + d.options = append(d.options, &dropDownOption{Text: text, Selected: selected}) + d.list.AddItem(text, "", 0, nil) + return d +} + +// SetOptions replaces all current options with the ones provided and installs +// one callback function which is called when one of the options is selected. +// It will be called with the option's text and its index into the options +// slice. The "selected" parameter may be nil. +func (d *DropDown) SetOptions(texts []string, selected func(text string, index int)) *DropDown { + d.list.Clear() + d.options = nil + for index, text := range texts { + func(t string, i int) { + d.AddOption(text, func() { + if selected != nil { + selected(t, i) + } + }) + }(text, index) + } + return d +} + +// SetDoneFunc sets a handler which is called when the user is done selecting +// options. The callback function is provided with the key that was pressed, +// which is one of the following: +// +// - KeyEscape: Abort selection. +// - KeyTab: Move to the next field. +// - KeyBacktab: Move to the previous field. +func (d *DropDown) SetDoneFunc(handler func(key tcell.Key)) *DropDown { + d.done = handler + return d +} + +// SetFinishedFunc sets a callback invoked when the user leaves this form item. +func (d *DropDown) SetFinishedFunc(handler func(key tcell.Key)) FormItem { + d.finished = handler + return d +} + +// Draw draws this primitive onto the screen. +func (d *DropDown) Draw(screen tcell.Screen) { + d.Box.Draw(screen) + + // Prepare. + x, y, width, height := d.GetInnerRect() + rightLimit := x + width + if height < 1 || rightLimit <= x { + return + } + + // Draw label. + if d.labelWidth > 0 { + labelWidth := d.labelWidth + if labelWidth > rightLimit-x { + labelWidth = rightLimit - x + } + Print(screen, d.label, x, y, labelWidth, AlignLeft, d.labelColor) + x += labelWidth + } else { + _, drawnWidth := Print(screen, d.label, x, y, rightLimit-x, AlignLeft, d.labelColor) + x += drawnWidth + } + + // What's the longest option text? + maxWidth := 0 + for _, option := range d.options { + strWidth := StringWidth(option.Text) + if strWidth > maxWidth { + maxWidth = strWidth + } + } + + // Draw selection area. + fieldWidth := d.fieldWidth + if fieldWidth == 0 { + fieldWidth = maxWidth + } + if rightLimit-x < fieldWidth { + fieldWidth = rightLimit - x + } + fieldStyle := tcell.StyleDefault.Background(d.fieldBackgroundColor) + if d.GetFocusable().HasFocus() && !d.open { + fieldStyle = fieldStyle.Background(d.fieldTextColor) + } + for index := 0; index < fieldWidth; index++ { + screen.SetContent(x+index, y, ' ', nil, fieldStyle) + } + + // Draw selected text. + if d.open && len(d.prefix) > 0 { + // Show the prefix. + Print(screen, d.prefix, x, y, fieldWidth, AlignLeft, d.prefixTextColor) + prefixWidth := runewidth.StringWidth(d.prefix) + listItemText := d.options[d.list.GetCurrentItem()].Text + if prefixWidth < fieldWidth && len(d.prefix) < len(listItemText) { + Print(screen, listItemText[len(d.prefix):], x+prefixWidth, y, fieldWidth-prefixWidth, AlignLeft, d.fieldTextColor) + } + } else { + if d.currentOption >= 0 && d.currentOption < len(d.options) { + color := d.fieldTextColor + // Just show the current selection. + if d.GetFocusable().HasFocus() && !d.open { + color = d.fieldBackgroundColor + } + Print(screen, d.options[d.currentOption].Text, x, y, fieldWidth, AlignLeft, color) + } + } + + // Draw options list. + if d.HasFocus() && d.open { + // We prefer to drop down but if there is no space, maybe drop up? + lx := x + ly := y + 1 + lwidth := maxWidth + lheight := len(d.options) + _, sheight := screen.Size() + if ly+lheight >= sheight && ly-2 > lheight-ly { + ly = y - lheight + if ly < 0 { + ly = 0 + } + } + if ly+lheight >= sheight { + lheight = sheight - ly + } + d.list.SetRect(lx, ly, lwidth, lheight) + d.list.Draw(screen) + } +} + +// InputHandler returns the handler for this primitive. +func (d *DropDown) InputHandler() func(event *tcell.EventKey, setFocus func(p Primitive)) { + return d.WrapInputHandler(func(event *tcell.EventKey, setFocus func(p Primitive)) { + // A helper function which selects an item in the drop-down list based on + // the current prefix. + evalPrefix := func() { + if len(d.prefix) > 0 { + for index, option := range d.options { + if strings.HasPrefix(strings.ToLower(option.Text), d.prefix) { + d.list.SetCurrentItem(index) + return + } + } + // Prefix does not match any item. Remove last rune. + r := []rune(d.prefix) + d.prefix = string(r[:len(r)-1]) + } + } + + // Process key event. + switch key := event.Key(); key { + case tcell.KeyEnter, tcell.KeyRune, tcell.KeyDown: + d.prefix = "" + + // If the first key was a letter already, it becomes part of the prefix. + if r := event.Rune(); key == tcell.KeyRune && r != ' ' { + d.prefix += string(r) + evalPrefix() + } + + // Hand control over to the list. + d.open = true + d.list.SetSelectedFunc(func(index int, mainText, secondaryText string, shortcut rune) { + // An option was selected. Close the list again. + d.open = false + setFocus(d) + d.currentOption = index + + // Trigger "selected" event. + if d.options[d.currentOption].Selected != nil { + d.options[d.currentOption].Selected() + } + }).SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey { + if event.Key() == tcell.KeyRune { + d.prefix += string(event.Rune()) + evalPrefix() + } else if event.Key() == tcell.KeyBackspace || event.Key() == tcell.KeyBackspace2 { + if len(d.prefix) > 0 { + r := []rune(d.prefix) + d.prefix = string(r[:len(r)-1]) + } + evalPrefix() + } else { + d.prefix = "" + } + return event + }) + setFocus(d.list) + case tcell.KeyEscape, tcell.KeyTab, tcell.KeyBacktab: + if d.done != nil { + d.done(key) + } + if d.finished != nil { + d.finished(key) + } + } + }) +} + +// Focus is called by the application when the primitive receives focus. +func (d *DropDown) Focus(delegate func(p Primitive)) { + d.Box.Focus(delegate) + if d.open { + delegate(d.list) + } +} + +// HasFocus returns whether or not this primitive has focus. +func (d *DropDown) HasFocus() bool { + if d.open { + return d.list.HasFocus() + } + return d.hasFocus +} diff --git a/vendor/github.com/rivo/tview/flex.go b/vendor/github.com/rivo/tview/flex.go new file mode 100644 index 00000000..5238f5b5 --- /dev/null +++ b/vendor/github.com/rivo/tview/flex.go @@ -0,0 +1,180 @@ +package tview + +import ( + "github.com/gdamore/tcell" +) + +// Configuration values. +const ( + FlexRow = iota + FlexColumn +) + +// flexItem holds layout options for one item. +type flexItem struct { + Item Primitive // The item to be positioned. May be nil for an empty item. + FixedSize int // The item's fixed size which may not be changed, 0 if it has no fixed size. + Proportion int // The item's proportion. + Focus bool // Whether or not this item attracts the layout's focus. +} + +// Flex is a basic implementation of the Flexbox layout. The contained +// primitives are arranged horizontally or vertically. The way they are +// distributed along that dimension depends on their layout settings, which is +// either a fixed length or a proportional length. See AddItem() for details. +// +// See https://github.com/rivo/tview/wiki/Flex for an example. +type Flex struct { + *Box + + // The items to be positioned. + items []flexItem + + // FlexRow or FlexColumn. + direction int + + // If set to true, Flex will use the entire screen as its available space + // instead its box dimensions. + fullScreen bool +} + +// NewFlex returns a new flexbox layout container with no primitives and its +// direction set to FlexColumn. To add primitives to this layout, see AddItem(). +// To change the direction, see SetDirection(). +// +// Note that Box, the superclass of Flex, will have its background color set to +// transparent so that any nil flex items will leave their background unchanged. +// To clear a Flex's background before any items are drawn, set it to the +// desired color: +// +// flex.SetBackgroundColor(tview.Styles.PrimitiveBackgroundColor) +func NewFlex() *Flex { + f := &Flex{ + Box: NewBox().SetBackgroundColor(tcell.ColorDefault), + direction: FlexColumn, + } + f.focus = f + return f +} + +// SetDirection sets the direction in which the contained primitives are +// distributed. This can be either FlexColumn (default) or FlexRow. +func (f *Flex) SetDirection(direction int) *Flex { + f.direction = direction + return f +} + +// SetFullScreen sets the flag which, when true, causes the flex layout to use +// the entire screen space instead of whatever size it is currently assigned to. +func (f *Flex) SetFullScreen(fullScreen bool) *Flex { + f.fullScreen = fullScreen + return f +} + +// AddItem adds a new item to the container. The "fixedSize" argument is a width +// or height that may not be changed by the layout algorithm. A value of 0 means +// that its size is flexible and may be changed. The "proportion" argument +// defines the relative size of the item compared to other flexible-size items. +// For example, items with a proportion of 2 will be twice as large as items +// with a proportion of 1. The proportion must be at least 1 if fixedSize == 0 +// (ignored otherwise). +// +// If "focus" is set to true, the item will receive focus when the Flex +// primitive receives focus. If multiple items have the "focus" flag set to +// true, the first one will receive focus. +// +// You can provide a nil value for the primitive. This will still consume screen +// space but nothing will be drawn. +func (f *Flex) AddItem(item Primitive, fixedSize, proportion int, focus bool) *Flex { + f.items = append(f.items, flexItem{Item: item, FixedSize: fixedSize, Proportion: proportion, Focus: focus}) + return f +} + +// RemoveItem removes all items for the given primitive from the container, +// keeping the order of the remaining items intact. +func (f *Flex) RemoveItem(p Primitive) *Flex { + for index := len(f.items) - 1; index >= 0; index-- { + if f.items[index].Item == p { + f.items = append(f.items[:index], f.items[index+1:]...) + } + } + return f +} + +// Draw draws this primitive onto the screen. +func (f *Flex) Draw(screen tcell.Screen) { + f.Box.Draw(screen) + + // Calculate size and position of the items. + + // Do we use the entire screen? + if f.fullScreen { + width, height := screen.Size() + f.SetRect(0, 0, width, height) + } + + // How much space can we distribute? + x, y, width, height := f.GetInnerRect() + var proportionSum int + distSize := width + if f.direction == FlexRow { + distSize = height + } + for _, item := range f.items { + if item.FixedSize > 0 { + distSize -= item.FixedSize + } else { + proportionSum += item.Proportion + } + } + + // Calculate positions and draw items. + pos := x + if f.direction == FlexRow { + pos = y + } + for _, item := range f.items { + size := item.FixedSize + if size <= 0 { + size = distSize * item.Proportion / proportionSum + distSize -= size + proportionSum -= item.Proportion + } + if item.Item != nil { + if f.direction == FlexColumn { + item.Item.SetRect(pos, y, size, height) + } else { + item.Item.SetRect(x, pos, width, size) + } + } + pos += size + + if item.Item != nil { + if item.Item.GetFocusable().HasFocus() { + defer item.Item.Draw(screen) + } else { + item.Item.Draw(screen) + } + } + } +} + +// Focus is called when this primitive receives focus. +func (f *Flex) Focus(delegate func(p Primitive)) { + for _, item := range f.items { + if item.Item != nil && item.Focus { + delegate(item.Item) + return + } + } +} + +// HasFocus returns whether or not this primitive has focus. +func (f *Flex) HasFocus() bool { + for _, item := range f.items { + if item.Item != nil && item.Item.GetFocusable().HasFocus() { + return true + } + } + return false +} diff --git a/vendor/github.com/rivo/tview/focusable.go b/vendor/github.com/rivo/tview/focusable.go new file mode 100644 index 00000000..99fdaaf4 --- /dev/null +++ b/vendor/github.com/rivo/tview/focusable.go @@ -0,0 +1,8 @@ +package tview + +// Focusable provides a method which determines if a primitive has focus. +// Composed primitives may be focused based on the focused state of their +// contained primitives. +type Focusable interface { + HasFocus() bool +} diff --git a/vendor/github.com/rivo/tview/form.go b/vendor/github.com/rivo/tview/form.go new file mode 100644 index 00000000..d778a6a0 --- /dev/null +++ b/vendor/github.com/rivo/tview/form.go @@ -0,0 +1,513 @@ +package tview + +import ( + "github.com/gdamore/tcell" +) + +// DefaultFormFieldWidth is the default field screen width of form elements +// whose field width is flexible (0). This is used in the Form class for +// horizontal layouts. +var DefaultFormFieldWidth = 10 + +// FormItem is the interface all form items must implement to be able to be +// included in a form. +type FormItem interface { + Primitive + + // GetLabel returns the item's label text. + GetLabel() string + + // SetFormAttributes sets a number of item attributes at once. + SetFormAttributes(labelWidth int, labelColor, bgColor, fieldTextColor, fieldBgColor tcell.Color) FormItem + + // GetFieldWidth returns the width of the form item's field (the area which + // is manipulated by the user) in number of screen cells. A value of 0 + // indicates the the field width is flexible and may use as much space as + // required. + GetFieldWidth() int + + // SetEnteredFunc sets the handler function for when the user finished + // entering data into the item. The handler may receive events for the + // Enter key (we're done), the Escape key (cancel input), the Tab key (move to + // next field), and the Backtab key (move to previous field). + SetFinishedFunc(handler func(key tcell.Key)) FormItem +} + +// Form allows you to combine multiple one-line form elements into a vertical +// or horizontal layout. Form elements include types such as InputField or +// Checkbox. These elements can be optionally followed by one or more buttons +// for which you can define form-wide actions (e.g. Save, Clear, Cancel). +// +// See https://github.com/rivo/tview/wiki/Form for an example. +type Form struct { + *Box + + // The items of the form (one row per item). + items []FormItem + + // The buttons of the form. + buttons []*Button + + // If set to true, instead of position items and buttons from top to bottom, + // they are positioned from left to right. + horizontal bool + + // The alignment of the buttons. + buttonsAlign int + + // The number of empty rows between items. + itemPadding int + + // The index of the item or button which has focus. (Items are counted first, + // buttons are counted last.) + focusedElement int + + // The label color. + labelColor tcell.Color + + // The background color of the input area. + fieldBackgroundColor tcell.Color + + // The text color of the input area. + fieldTextColor tcell.Color + + // The background color of the buttons. + buttonBackgroundColor tcell.Color + + // The color of the button text. + buttonTextColor tcell.Color + + // An optional function which is called when the user hits Escape. + cancel func() +} + +// NewForm returns a new form. +func NewForm() *Form { + box := NewBox().SetBorderPadding(1, 1, 1, 1) + + f := &Form{ + Box: box, + itemPadding: 1, + labelColor: Styles.SecondaryTextColor, + fieldBackgroundColor: Styles.ContrastBackgroundColor, + fieldTextColor: Styles.PrimaryTextColor, + buttonBackgroundColor: Styles.ContrastBackgroundColor, + buttonTextColor: Styles.PrimaryTextColor, + } + + f.focus = f + + return f +} + +// SetItemPadding sets the number of empty rows between form items for vertical +// layouts and the number of empty cells between form items for horizontal +// layouts. +func (f *Form) SetItemPadding(padding int) *Form { + f.itemPadding = padding + return f +} + +// SetHorizontal sets the direction the form elements are laid out. If set to +// true, instead of positioning them from top to bottom (the default), they are +// positioned from left to right, moving into the next row if there is not +// enough space. +func (f *Form) SetHorizontal(horizontal bool) *Form { + f.horizontal = horizontal + return f +} + +// SetLabelColor sets the color of the labels. +func (f *Form) SetLabelColor(color tcell.Color) *Form { + f.labelColor = color + return f +} + +// SetFieldBackgroundColor sets the background color of the input areas. +func (f *Form) SetFieldBackgroundColor(color tcell.Color) *Form { + f.fieldBackgroundColor = color + return f +} + +// SetFieldTextColor sets the text color of the input areas. +func (f *Form) SetFieldTextColor(color tcell.Color) *Form { + f.fieldTextColor = color + return f +} + +// SetButtonsAlign sets how the buttons align horizontally, one of AlignLeft +// (the default), AlignCenter, and AlignRight. This is only +func (f *Form) SetButtonsAlign(align int) *Form { + f.buttonsAlign = align + return f +} + +// SetButtonBackgroundColor sets the background color of the buttons. +func (f *Form) SetButtonBackgroundColor(color tcell.Color) *Form { + f.buttonBackgroundColor = color + return f +} + +// SetButtonTextColor sets the color of the button texts. +func (f *Form) SetButtonTextColor(color tcell.Color) *Form { + f.buttonTextColor = color + return f +} + +// AddInputField adds an input field to the form. It has a label, an optional +// initial value, a field width (a value of 0 extends it as far as possible), +// an optional accept function to validate the item's value (set to nil to +// accept any text), and an (optional) callback function which is invoked when +// the input field's text has changed. +func (f *Form) AddInputField(label, value string, fieldWidth int, accept func(textToCheck string, lastChar rune) bool, changed func(text string)) *Form { + f.items = append(f.items, NewInputField(). + SetLabel(label). + SetText(value). + SetFieldWidth(fieldWidth). + SetAcceptanceFunc(accept). + SetChangedFunc(changed)) + return f +} + +// AddPasswordField adds a password field to the form. This is similar to an +// input field except that the user's input not shown. Instead, a "mask" +// character is displayed. The password field has a label, an optional initial +// value, a field width (a value of 0 extends it as far as possible), and an +// (optional) callback function which is invoked when the input field's text has +// changed. +func (f *Form) AddPasswordField(label, value string, fieldWidth int, mask rune, changed func(text string)) *Form { + if mask == 0 { + mask = '*' + } + f.items = append(f.items, NewInputField(). + SetLabel(label). + SetText(value). + SetFieldWidth(fieldWidth). + SetMaskCharacter(mask). + SetChangedFunc(changed)) + return f +} + +// AddDropDown adds a drop-down element to the form. It has a label, options, +// and an (optional) callback function which is invoked when an option was +// selected. The initial option may be a negative value to indicate that no +// option is currently selected. +func (f *Form) AddDropDown(label string, options []string, initialOption int, selected func(option string, optionIndex int)) *Form { + f.items = append(f.items, NewDropDown(). + SetLabel(label). + SetCurrentOption(initialOption). + SetOptions(options, selected)) + return f +} + +// AddCheckbox adds a checkbox to the form. It has a label, an initial state, +// and an (optional) callback function which is invoked when the state of the +// checkbox was changed by the user. +func (f *Form) AddCheckbox(label string, checked bool, changed func(checked bool)) *Form { + f.items = append(f.items, NewCheckbox(). + SetLabel(label). + SetChecked(checked). + SetChangedFunc(changed)) + return f +} + +// AddButton adds a new button to the form. The "selected" function is called +// when the user selects this button. It may be nil. +func (f *Form) AddButton(label string, selected func()) *Form { + f.buttons = append(f.buttons, NewButton(label).SetSelectedFunc(selected)) + return f +} + +// Clear removes all input elements from the form, including the buttons if +// specified. +func (f *Form) Clear(includeButtons bool) *Form { + f.items = nil + if includeButtons { + f.buttons = nil + } + f.focusedElement = 0 + return f +} + +// AddFormItem adds a new item to the form. This can be used to add your own +// objects to the form. Note, however, that the Form class will override some +// of its attributes to make it work in the form context. Specifically, these +// are: +// +// - The label width +// - The label color +// - The background color +// - The field text color +// - The field background color +func (f *Form) AddFormItem(item FormItem) *Form { + f.items = append(f.items, item) + return f +} + +// GetFormItem returns the form element at the given position, starting with +// index 0. Elements are referenced in the order they were added. Buttons are +// not included. +func (f *Form) GetFormItem(index int) FormItem { + return f.items[index] +} + +// GetFormItemByLabel returns the first form element with the given label. If +// no such element is found, nil is returned. Buttons are not searched and will +// therefore not be returned. +func (f *Form) GetFormItemByLabel(label string) FormItem { + for _, item := range f.items { + if item.GetLabel() == label { + return item + } + } + return nil +} + +// SetCancelFunc sets a handler which is called when the user hits the Escape +// key. +func (f *Form) SetCancelFunc(callback func()) *Form { + f.cancel = callback + return f +} + +// Draw draws this primitive onto the screen. +func (f *Form) Draw(screen tcell.Screen) { + f.Box.Draw(screen) + + // Determine the dimensions. + x, y, width, height := f.GetInnerRect() + topLimit := y + bottomLimit := y + height + rightLimit := x + width + startX := x + + // Find the longest label. + var maxLabelWidth int + for _, item := range f.items { + labelWidth := StringWidth(item.GetLabel()) + if labelWidth > maxLabelWidth { + maxLabelWidth = labelWidth + } + } + maxLabelWidth++ // Add one space. + + // Calculate positions of form items. + positions := make([]struct{ x, y, width, height int }, len(f.items)+len(f.buttons)) + var focusedPosition struct{ x, y, width, height int } + for index, item := range f.items { + // Calculate the space needed. + labelWidth := StringWidth(item.GetLabel()) + var itemWidth int + if f.horizontal { + fieldWidth := item.GetFieldWidth() + if fieldWidth == 0 { + fieldWidth = DefaultFormFieldWidth + } + labelWidth++ + itemWidth = labelWidth + fieldWidth + } else { + // We want all fields to align vertically. + labelWidth = maxLabelWidth + itemWidth = width + } + + // Advance to next line if there is no space. + if f.horizontal && x+labelWidth+1 >= rightLimit { + x = startX + y += 2 + } + + // Adjust the item's attributes. + if x+itemWidth >= rightLimit { + itemWidth = rightLimit - x + } + item.SetFormAttributes( + labelWidth, + f.labelColor, + f.backgroundColor, + f.fieldTextColor, + f.fieldBackgroundColor, + ) + + // Save position. + positions[index].x = x + positions[index].y = y + positions[index].width = itemWidth + positions[index].height = 1 + if item.GetFocusable().HasFocus() { + focusedPosition = positions[index] + } + + // Advance to next item. + if f.horizontal { + x += itemWidth + f.itemPadding + } else { + y += 1 + f.itemPadding + } + } + + // How wide are the buttons? + buttonWidths := make([]int, len(f.buttons)) + buttonsWidth := 0 + for index, button := range f.buttons { + w := StringWidth(button.GetLabel()) + 4 + buttonWidths[index] = w + buttonsWidth += w + 1 + } + buttonsWidth-- + + // Where do we place them? + if !f.horizontal && x+buttonsWidth < rightLimit { + if f.buttonsAlign == AlignRight { + x = rightLimit - buttonsWidth + } else if f.buttonsAlign == AlignCenter { + x = (x + rightLimit - buttonsWidth) / 2 + } + + // In vertical layouts, buttons always appear after an empty line. + if f.itemPadding == 0 { + y++ + } + } + + // Calculate positions of buttons. + for index, button := range f.buttons { + space := rightLimit - x + buttonWidth := buttonWidths[index] + if f.horizontal { + if space < buttonWidth-4 { + x = startX + y += 2 + space = width + } + } else { + if space < 1 { + break // No space for this button anymore. + } + } + if buttonWidth > space { + buttonWidth = space + } + button.SetLabelColor(f.buttonTextColor). + SetLabelColorActivated(f.buttonBackgroundColor). + SetBackgroundColorActivated(f.buttonTextColor). + SetBackgroundColor(f.buttonBackgroundColor) + + buttonIndex := index + len(f.items) + positions[buttonIndex].x = x + positions[buttonIndex].y = y + positions[buttonIndex].width = buttonWidth + positions[buttonIndex].height = 1 + + if button.HasFocus() { + focusedPosition = positions[buttonIndex] + } + + x += buttonWidth + 1 + } + + // Determine vertical offset based on the position of the focused item. + var offset int + if focusedPosition.y+focusedPosition.height > bottomLimit { + offset = focusedPosition.y + focusedPosition.height - bottomLimit + if focusedPosition.y-offset < topLimit { + offset = focusedPosition.y - topLimit + } + } + + // Draw items. + for index, item := range f.items { + // Set position. + y := positions[index].y - offset + height := positions[index].height + item.SetRect(positions[index].x, y, positions[index].width, height) + + // Is this item visible? + if y+height <= topLimit || y >= bottomLimit { + continue + } + + // Draw items with focus last (in case of overlaps). + if item.GetFocusable().HasFocus() { + defer item.Draw(screen) + } else { + item.Draw(screen) + } + } + + // Draw buttons. + for index, button := range f.buttons { + // Set position. + buttonIndex := index + len(f.items) + y := positions[buttonIndex].y - offset + height := positions[buttonIndex].height + button.SetRect(positions[buttonIndex].x, y, positions[buttonIndex].width, height) + + // Is this button visible? + if y+height <= topLimit || y >= bottomLimit { + continue + } + + // Draw button. + button.Draw(screen) + } +} + +// Focus is called by the application when the primitive receives focus. +func (f *Form) Focus(delegate func(p Primitive)) { + if len(f.items)+len(f.buttons) == 0 { + return + } + + // Hand on the focus to one of our child elements. + if f.focusedElement < 0 || f.focusedElement >= len(f.items)+len(f.buttons) { + f.focusedElement = 0 + } + handler := func(key tcell.Key) { + switch key { + case tcell.KeyTab, tcell.KeyEnter: + f.focusedElement++ + f.Focus(delegate) + case tcell.KeyBacktab: + f.focusedElement-- + if f.focusedElement < 0 { + f.focusedElement = len(f.items) + len(f.buttons) - 1 + } + f.Focus(delegate) + case tcell.KeyEscape: + if f.cancel != nil { + f.cancel() + } else { + f.focusedElement = 0 + f.Focus(delegate) + } + } + } + + if f.focusedElement < len(f.items) { + // We're selecting an item. + item := f.items[f.focusedElement] + item.SetFinishedFunc(handler) + delegate(item) + } else { + // We're selecting a button. + button := f.buttons[f.focusedElement-len(f.items)] + button.SetBlurFunc(handler) + delegate(button) + } +} + +// HasFocus returns whether or not this primitive has focus. +func (f *Form) HasFocus() bool { + for _, item := range f.items { + if item.GetFocusable().HasFocus() { + return true + } + } + for _, button := range f.buttons { + if button.focus.HasFocus() { + return true + } + } + return false +} diff --git a/vendor/github.com/rivo/tview/frame.go b/vendor/github.com/rivo/tview/frame.go new file mode 100644 index 00000000..77c5316e --- /dev/null +++ b/vendor/github.com/rivo/tview/frame.go @@ -0,0 +1,157 @@ +package tview + +import ( + "github.com/gdamore/tcell" +) + +// frameText holds information about a line of text shown in the frame. +type frameText struct { + Text string // The text to be displayed. + Header bool // true = place in header, false = place in footer. + Align int // One of the Align constants. + Color tcell.Color // The text color. +} + +// Frame is a wrapper which adds a border around another primitive. The top area +// (header) and the bottom area (footer) may also contain text. +// +// See https://github.com/rivo/tview/wiki/Frame for an example. +type Frame struct { + *Box + + // The contained primitive. + primitive Primitive + + // The lines of text to be displayed. + text []*frameText + + // Border spacing. + top, bottom, header, footer, left, right int +} + +// NewFrame returns a new frame around the given primitive. The primitive's +// size will be changed to fit within this frame. +func NewFrame(primitive Primitive) *Frame { + box := NewBox() + + f := &Frame{ + Box: box, + primitive: primitive, + top: 1, + bottom: 1, + header: 1, + footer: 1, + left: 1, + right: 1, + } + + f.focus = f + + return f +} + +// AddText adds text to the frame. Set "header" to true if the text is to appear +// in the header, above the contained primitive. Set it to false for it to +// appear in the footer, below the contained primitive. "align" must be one of +// the Align constants. Rows in the header are printed top to bottom, rows in +// the footer are printed bottom to top. Note that long text can overlap as +// different alignments will be placed on the same row. +func (f *Frame) AddText(text string, header bool, align int, color tcell.Color) *Frame { + f.text = append(f.text, &frameText{ + Text: text, + Header: header, + Align: align, + Color: color, + }) + return f +} + +// Clear removes all text from the frame. +func (f *Frame) Clear() *Frame { + f.text = nil + return f +} + +// SetBorders sets the width of the frame borders as well as "header" and +// "footer", the vertical space between the header and footer text and the +// contained primitive (does not apply if there is no text). +func (f *Frame) SetBorders(top, bottom, header, footer, left, right int) *Frame { + f.top, f.bottom, f.header, f.footer, f.left, f.right = top, bottom, header, footer, left, right + return f +} + +// Draw draws this primitive onto the screen. +func (f *Frame) Draw(screen tcell.Screen) { + f.Box.Draw(screen) + + // Calculate start positions. + x, top, width, height := f.GetInnerRect() + bottom := top + height - 1 + x += f.left + top += f.top + bottom -= f.bottom + width -= f.left + f.right + if width <= 0 || top >= bottom { + return // No space left. + } + + // Draw text. + var rows [6]int // top-left, top-center, top-right, bottom-left, bottom-center, bottom-right. + topMax := top + bottomMin := bottom + for _, text := range f.text { + // Where do we place this text? + var y int + if text.Header { + y = top + rows[text.Align] + rows[text.Align]++ + if y >= bottomMin { + continue + } + if y+1 > topMax { + topMax = y + 1 + } + } else { + y = bottom - rows[3+text.Align] + rows[3+text.Align]++ + if y <= topMax { + continue + } + if y-1 < bottomMin { + bottomMin = y - 1 + } + } + + // Draw text. + Print(screen, text.Text, x, y, width, text.Align, text.Color) + } + + // Set the size of the contained primitive. + if topMax > top { + top = topMax + f.header + } + if bottomMin < bottom { + bottom = bottomMin - f.footer + } + if top > bottom { + return // No space for the primitive. + } + f.primitive.SetRect(x, top, width, bottom+1-top) + + // Finally, draw the contained primitive. + f.primitive.Draw(screen) +} + +// Focus is called when this primitive receives focus. +func (f *Frame) Focus(delegate func(p Primitive)) { + delegate(f.primitive) +} + +// HasFocus returns whether or not this primitive has focus. +func (f *Frame) HasFocus() bool { + focusable, ok := f.primitive.(Focusable) + if ok { + return focusable.HasFocus() + } + return false +} diff --git a/vendor/github.com/rivo/tview/grid.go b/vendor/github.com/rivo/tview/grid.go new file mode 100644 index 00000000..f7d61a5a --- /dev/null +++ b/vendor/github.com/rivo/tview/grid.go @@ -0,0 +1,631 @@ +package tview + +import ( + "math" + + "github.com/gdamore/tcell" +) + +// gridItem represents one primitive and its possible position on a grid. +type gridItem struct { + Item Primitive // The item to be positioned. May be nil for an empty item. + Row, Column int // The top-left grid cell where the item is placed. + Width, Height int // The number of rows and columns the item occupies. + MinGridWidth, MinGridHeight int // The minimum grid width/height for which this item is visible. + Focus bool // Whether or not this item attracts the layout's focus. + + visible bool // Whether or not this item was visible the last time the grid was drawn. + x, y, w, h int // The last position of the item relative to the top-left corner of the grid. Undefined if visible is false. +} + +// Grid is an implementation of a grid-based layout. It works by defining the +// size of the rows and columns, then placing primitives into the grid. +// +// Some settings can lead to the grid exceeding its available space. SetOffset() +// can then be used to scroll in steps of rows and columns. These offset values +// can also be controlled with the arrow keys (or the "g","G", "j", "k", "h", +// and "l" keys) while the grid has focus and none of its contained primitives +// do. +// +// See https://github.com/rivo/tview/wiki/Grid for an example. +type Grid struct { + *Box + + // The items to be positioned. + items []*gridItem + + // The definition of the rows and columns of the grid. See + // SetRows()/SetColumns() for details. + rows, columns []int + + // The minimum sizes for rows and columns. + minWidth, minHeight int + + // The size of the gaps between neighboring primitives. This is automatically + // set to 1 if borders is true. + gapRows, gapColumns int + + // The number of rows and columns skipped before drawing the top-left corner + // of the grid. + rowOffset, columnOffset int + + // Whether or not borders are drawn around grid items. If this is set to true, + // a gap size of 1 is automatically assumed (which is filled with the border + // graphics). + borders bool + + // The color of the borders around grid items. + bordersColor tcell.Color +} + +// NewGrid returns a new grid-based layout container with no initial primitives. +// +// Note that Box, the superclass of Grid, will have its background color set to +// transparent so that any grid areas not covered by any primitives will leave +// their background unchanged. To clear a Grid's background before any items are +// drawn, set it to the desired color: +// +// grid.SetBackgroundColor(tview.Styles.PrimitiveBackgroundColor) +func NewGrid() *Grid { + g := &Grid{ + Box: NewBox().SetBackgroundColor(tcell.ColorDefault), + bordersColor: Styles.GraphicsColor, + } + g.focus = g + return g +} + +// SetRows defines how the rows of the grid are distributed. Each value defines +// the size of one row, starting with the leftmost row. Values greater 0 +// represent absolute row widths (gaps not included). Values less or equal 0 +// represent proportional row widths or fractions of the remaining free space, +// where 0 is treated the same as -1. That is, a row with a value of -3 will +// have three times the width of a row with a value of -1 (or 0). The minimum +// width set with SetMinSize() is always observed. +// +// Primitives may extend beyond the rows defined explicitly with this function. +// A value of 0 is assumed for any undefined row. In fact, if you never call +// this function, all rows occupied by primitives will have the same width. +// On the other hand, unoccupied rows defined with this function will always +// take their place. +// +// Assuming a total width of the grid of 100 cells and a minimum width of 0, the +// following call will result in rows with widths of 30, 10, 15, 15, and 30 +// cells: +// +// grid.SetRows(30, 10, -1, -1, -2) +// +// If a primitive were then placed in the 6th and 7th row, the resulting widths +// would be: 30, 10, 10, 10, 20, 10, and 10 cells. +// +// If you then called SetMinSize() as follows: +// +// grid.SetMinSize(15, 20) +// +// The resulting widths would be: 30, 15, 15, 15, 20, 15, and 15 cells, a total +// of 125 cells, 25 cells wider than the available grid width. +func (g *Grid) SetRows(rows ...int) *Grid { + g.rows = rows + return g +} + +// SetColumns defines how the columns of the grid are distributed. These values +// behave the same as the row values provided with SetRows(), see there for +// a definition and examples. +// +// The provided values correspond to column heights, the first value defining +// the height of the topmost column. +func (g *Grid) SetColumns(columns ...int) *Grid { + g.columns = columns + return g +} + +// SetSize is a shortcut for SetRows() and SetColumns() where all row and column +// values are set to the given size values. See SetRows() for details on sizes. +func (g *Grid) SetSize(numRows, numColumns, rowSize, columnSize int) *Grid { + g.rows = make([]int, numRows) + for index := range g.rows { + g.rows[index] = rowSize + } + g.columns = make([]int, numColumns) + for index := range g.columns { + g.columns[index] = columnSize + } + return g +} + +// SetMinSize sets an absolute minimum width for rows and an absolute minimum +// height for columns. Panics if negative values are provided. +func (g *Grid) SetMinSize(row, column int) *Grid { + if row < 0 || column < 0 { + panic("Invalid minimum row/column size") + } + g.minHeight, g.minWidth = row, column + return g +} + +// SetGap sets the size of the gaps between neighboring primitives on the grid. +// If borders are drawn (see SetBorders()), these values are ignored and a gap +// of 1 is assumed. Panics if negative values are provided. +func (g *Grid) SetGap(row, column int) *Grid { + if row < 0 || column < 0 { + panic("Invalid gap size") + } + g.gapRows, g.gapColumns = row, column + return g +} + +// SetBorders sets whether or not borders are drawn around grid items. Setting +// this value to true will cause the gap values (see SetGap()) to be ignored and +// automatically assumed to be 1 where the border graphics are drawn. +func (g *Grid) SetBorders(borders bool) *Grid { + g.borders = borders + return g +} + +// SetBordersColor sets the color of the item borders. +func (g *Grid) SetBordersColor(color tcell.Color) *Grid { + g.bordersColor = color + return g +} + +// AddItem adds a primitive and its position to the grid. The top-left corner +// of the primitive will be located in the top-left corner of the grid cell at +// the given row and column and will span "width" rows and "height" columns. For +// example, for a primitive to occupy rows 2, 3, and 4 and columns 5 and 6: +// +// grid.AddItem(p, 2, 4, 3, 2, true) +// +// If width or height is 0, the primitive will not be drawn. +// +// You can add the same primitive multiple times with different grid positions. +// The minGridWidth and minGridHeight values will then determine which of those +// positions will be used. This is similar to CSS media queries. These minimum +// values refer to the overall size of the grid. If multiple items for the same +// primitive apply, the one that has at least one highest minimum value will be +// used, or the primitive added last if those values are the same. Example: +// +// grid.AddItem(p, 0, 0, 0, 0, 0, 0, true). // Hide in small grids. +// AddItem(p, 0, 0, 1, 2, 100, 0, true). // One-column layout for medium grids. +// AddItem(p, 1, 1, 3, 2, 300, 0, true) // Multi-column layout for large grids. +// +// To use the same grid layout for all sizes, simply set minGridWidth and +// minGridHeight to 0. +// +// If the item's focus is set to true, it will receive focus when the grid +// receives focus. If there are multiple items with a true focus flag, the last +// visible one that was added will receive focus. +func (g *Grid) AddItem(p Primitive, row, column, height, width, minGridHeight, minGridWidth int, focus bool) *Grid { + g.items = append(g.items, &gridItem{ + Item: p, + Row: row, + Column: column, + Height: height, + Width: width, + MinGridHeight: minGridHeight, + MinGridWidth: minGridWidth, + Focus: focus, + }) + return g +} + +// RemoveItem removes all items for the given primitive from the grid, keeping +// the order of the remaining items intact. +func (g *Grid) RemoveItem(p Primitive) *Grid { + for index := len(g.items) - 1; index >= 0; index-- { + if g.items[index].Item == p { + g.items = append(g.items[:index], g.items[index+1:]...) + } + } + return g +} + +// Clear removes all items from the grid. +func (g *Grid) Clear() *Grid { + g.items = nil + return g +} + +// SetOffset sets the number of rows and columns which are skipped before +// drawing the first grid cell in the top-left corner. As the grid will never +// completely move off the screen, these values may be adjusted the next time +// the grid is drawn. The actual position of the grid may also be adjusted such +// that contained primitives that have focus are visible. +func (g *Grid) SetOffset(rows, columns int) *Grid { + g.rowOffset, g.columnOffset = rows, columns + return g +} + +// GetOffset returns the current row and column offset (see SetOffset() for +// details). +func (g *Grid) GetOffset() (rows, columns int) { + return g.rowOffset, g.columnOffset +} + +// Focus is called when this primitive receives focus. +func (g *Grid) Focus(delegate func(p Primitive)) { + for _, item := range g.items { + if item.Focus { + delegate(item.Item) + return + } + } + g.hasFocus = true +} + +// Blur is called when this primitive loses focus. +func (g *Grid) Blur() { + g.hasFocus = false +} + +// HasFocus returns whether or not this primitive has focus. +func (g *Grid) HasFocus() bool { + for _, item := range g.items { + if item.visible && item.Item.GetFocusable().HasFocus() { + return true + } + } + return g.hasFocus +} + +// InputHandler returns the handler for this primitive. +func (g *Grid) InputHandler() func(event *tcell.EventKey, setFocus func(p Primitive)) { + return g.WrapInputHandler(func(event *tcell.EventKey, setFocus func(p Primitive)) { + switch event.Key() { + case tcell.KeyRune: + switch event.Rune() { + case 'g': + g.rowOffset, g.columnOffset = 0, 0 + case 'G': + g.rowOffset = math.MaxInt32 + case 'j': + g.rowOffset++ + case 'k': + g.rowOffset-- + case 'h': + g.columnOffset-- + case 'l': + g.columnOffset++ + } + case tcell.KeyHome: + g.rowOffset, g.columnOffset = 0, 0 + case tcell.KeyEnd: + g.rowOffset = math.MaxInt32 + case tcell.KeyUp: + g.rowOffset-- + case tcell.KeyDown: + g.rowOffset++ + case tcell.KeyLeft: + g.columnOffset-- + case tcell.KeyRight: + g.columnOffset++ + } + }) +} + +// Draw draws this primitive onto the screen. +func (g *Grid) Draw(screen tcell.Screen) { + g.Box.Draw(screen) + x, y, width, height := g.GetInnerRect() + + // Make a list of items which apply. + items := make(map[Primitive]*gridItem) + for _, item := range g.items { + item.visible = false + if item.Width <= 0 || item.Height <= 0 || width < item.MinGridWidth || height < item.MinGridHeight { + continue + } + previousItem, ok := items[item.Item] + if ok && item.Width < previousItem.Width && item.Height < previousItem.Height { + continue + } + items[item.Item] = item + } + + // How many rows and columns do we have? + rows := len(g.rows) + columns := len(g.columns) + for _, item := range items { + rowEnd := item.Row + item.Height + if rowEnd > rows { + rows = rowEnd + } + columnEnd := item.Column + item.Width + if columnEnd > columns { + columns = columnEnd + } + } + if rows == 0 || columns == 0 { + return // No content. + } + + // Where are they located? + rowPos := make([]int, rows) + rowHeight := make([]int, rows) + columnPos := make([]int, columns) + columnWidth := make([]int, columns) + + // How much space do we distribute? + remainingWidth := width + remainingHeight := height + proportionalWidth := 0 + proportionalHeight := 0 + for index, row := range g.rows { + if row > 0 { + if row < g.minHeight { + row = g.minHeight + } + remainingHeight -= row + rowHeight[index] = row + } else if row == 0 { + proportionalHeight++ + } else { + proportionalHeight += -row + } + } + for index, column := range g.columns { + if column > 0 { + if column < g.minWidth { + column = g.minWidth + } + remainingWidth -= column + columnWidth[index] = column + } else if column == 0 { + proportionalWidth++ + } else { + proportionalWidth += -column + } + } + if g.borders { + remainingHeight -= rows + 1 + remainingWidth -= columns + 1 + } else { + remainingHeight -= (rows - 1) * g.gapRows + remainingWidth -= (columns - 1) * g.gapColumns + } + if rows > len(g.rows) { + proportionalHeight += rows - len(g.rows) + } + if columns > len(g.columns) { + proportionalWidth += columns - len(g.columns) + } + + // Distribute proportional rows/columns. + gridWidth := 0 + gridHeight := 0 + for index := 0; index < rows; index++ { + row := 0 + if index < len(g.rows) { + row = g.rows[index] + } + if row > 0 { + if row < g.minHeight { + row = g.minHeight + } + gridHeight += row + continue // Not proportional. We already know the width. + } else if row == 0 { + row = 1 + } else { + row = -row + } + rowAbs := row * remainingHeight / proportionalHeight + remainingHeight -= rowAbs + proportionalHeight -= row + if rowAbs < g.minHeight { + rowAbs = g.minHeight + } + rowHeight[index] = rowAbs + gridHeight += rowAbs + } + for index := 0; index < columns; index++ { + column := 0 + if index < len(g.columns) { + column = g.columns[index] + } + if column > 0 { + if column < g.minWidth { + column = g.minWidth + } + gridWidth += column + continue // Not proportional. We already know the height. + } else if column == 0 { + column = 1 + } else { + column = -column + } + columnAbs := column * remainingWidth / proportionalWidth + remainingWidth -= columnAbs + proportionalWidth -= column + if columnAbs < g.minWidth { + columnAbs = g.minWidth + } + columnWidth[index] = columnAbs + gridWidth += columnAbs + } + if g.borders { + gridHeight += rows + 1 + gridWidth += columns + 1 + } else { + gridHeight += (rows - 1) * g.gapRows + gridWidth += (columns - 1) * g.gapColumns + } + + // Calculate row/column positions. + columnX, rowY := x, y + if g.borders { + columnX++ + rowY++ + } + for index, row := range rowHeight { + rowPos[index] = rowY + gap := g.gapRows + if g.borders { + gap = 1 + } + rowY += row + gap + } + for index, column := range columnWidth { + columnPos[index] = columnX + gap := g.gapColumns + if g.borders { + gap = 1 + } + columnX += column + gap + } + + // Calculate primitive positions. + var focus *gridItem // The item which has focus. + for primitive, item := range items { + px := columnPos[item.Column] + py := rowPos[item.Row] + var pw, ph int + for index := 0; index < item.Height; index++ { + ph += rowHeight[item.Row+index] + } + for index := 0; index < item.Width; index++ { + pw += columnWidth[item.Column+index] + } + if g.borders { + pw += item.Width - 1 + ph += item.Height - 1 + } else { + pw += (item.Width - 1) * g.gapColumns + ph += (item.Height - 1) * g.gapRows + } + item.x, item.y, item.w, item.h = px, py, pw, ph + item.visible = true + if primitive.GetFocusable().HasFocus() { + focus = item + } + } + + // Calculate screen offsets. + var offsetX, offsetY, add int + if g.rowOffset < 0 { + g.rowOffset = 0 + } + if g.columnOffset < 0 { + g.columnOffset = 0 + } + if g.borders { + add = 1 + } + for row := 0; row < rows-1; row++ { + remainingHeight := gridHeight - offsetY + if focus != nil && focus.y-add <= offsetY || // Don't let the focused item move out of screen. + row >= g.rowOffset && (focus == nil || focus != nil && focus.y-offsetY < height) || // We've reached the requested offset. + remainingHeight <= height { // We have enough space to show the rest. + if row > 0 { + if focus != nil && focus.y+focus.h+add-offsetY > height { + offsetY += focus.y + focus.h + add - offsetY - height + } + if remainingHeight < height { + offsetY = gridHeight - height + } + } + g.rowOffset = row + break + } + offsetY = rowPos[row+1] - add + } + for column := 0; column < columns-1; column++ { + remainingWidth := gridWidth - offsetX + if focus != nil && focus.x-add <= offsetX || // Don't let the focused item move out of screen. + column >= g.columnOffset && (focus == nil || focus != nil && focus.x-offsetX < width) || // We've reached the requested offset. + remainingWidth <= width { // We have enough space to show the rest. + if column > 0 { + if focus != nil && focus.x+focus.w+add-offsetX > width { + offsetX += focus.x + focus.w + add - offsetX - width + } else if remainingWidth < width { + offsetX = gridWidth - width + } + } + g.columnOffset = column + break + } + offsetX = columnPos[column+1] - add + } + + // Draw primitives and borders. + for primitive, item := range items { + // Final primitive position. + if !item.visible { + continue + } + item.x -= offsetX + item.y -= offsetY + if item.x+item.w > width { + item.w = width - item.x + } + if item.y+item.h > height { + item.h = height - item.y + } + if item.x < 0 { + item.w += item.x + item.x = 0 + } + if item.y < 0 { + item.h += item.y + item.y = 0 + } + if item.w <= 0 || item.h <= 0 { + item.visible = false + continue + } + primitive.SetRect(x+item.x, y+item.y, item.w, item.h) + + // Draw primitive. + if item == focus { + defer primitive.Draw(screen) + } else { + primitive.Draw(screen) + } + + // Draw border around primitive. + if g.borders { + for bx := item.x; bx < item.x+item.w; bx++ { // Top/bottom lines. + if bx < 0 || bx >= width { + continue + } + by := item.y - 1 + if by >= 0 && by < height { + PrintJoinedBorder(screen, x+bx, y+by, GraphicsHoriBar, g.bordersColor) + } + by = item.y + item.h + if by >= 0 && by < height { + PrintJoinedBorder(screen, x+bx, y+by, GraphicsHoriBar, g.bordersColor) + } + } + for by := item.y; by < item.y+item.h; by++ { // Left/right lines. + if by < 0 || by >= height { + continue + } + bx := item.x - 1 + if bx >= 0 && bx < width { + PrintJoinedBorder(screen, x+bx, y+by, GraphicsVertBar, g.bordersColor) + } + bx = item.x + item.w + if bx >= 0 && bx < width { + PrintJoinedBorder(screen, x+bx, y+by, GraphicsVertBar, g.bordersColor) + } + } + bx, by := item.x-1, item.y-1 // Top-left corner. + if bx >= 0 && bx < width && by >= 0 && by < height { + PrintJoinedBorder(screen, x+bx, y+by, GraphicsTopLeftCorner, g.bordersColor) + } + bx, by = item.x+item.w, item.y-1 // Top-right corner. + if bx >= 0 && bx < width && by >= 0 && by < height { + PrintJoinedBorder(screen, x+bx, y+by, GraphicsTopRightCorner, g.bordersColor) + } + bx, by = item.x-1, item.y+item.h // Bottom-left corner. + if bx >= 0 && bx < width && by >= 0 && by < height { + PrintJoinedBorder(screen, x+bx, y+by, GraphicsBottomLeftCorner, g.bordersColor) + } + bx, by = item.x+item.w, item.y+item.h // Bottom-right corner. + if bx >= 0 && bx < width && by >= 0 && by < height { + PrintJoinedBorder(screen, x+bx, y+by, GraphicsBottomRightCorner, g.bordersColor) + } + } + } +} diff --git a/vendor/github.com/rivo/tview/inputfield.go b/vendor/github.com/rivo/tview/inputfield.go new file mode 100644 index 00000000..f738859c --- /dev/null +++ b/vendor/github.com/rivo/tview/inputfield.go @@ -0,0 +1,338 @@ +package tview + +import ( + "math" + "regexp" + "strings" + "unicode/utf8" + + "github.com/gdamore/tcell" + runewidth "github.com/mattn/go-runewidth" +) + +// InputField is a one-line box (three lines if there is a title) where the +// user can enter text. +// +// Use SetMaskCharacter() to hide input from onlookers (e.g. for password +// input). +// +// See https://github.com/rivo/tview/wiki/InputField for an example. +type InputField struct { + *Box + + // The text that was entered. + text string + + // The text to be displayed before the input area. + label string + + // The text to be displayed in the input area when "text" is empty. + placeholder string + + // The label color. + labelColor tcell.Color + + // The background color of the input area. + fieldBackgroundColor tcell.Color + + // The text color of the input area. + fieldTextColor tcell.Color + + // The text color of the placeholder. + placeholderTextColor tcell.Color + + // The screen width of the label area. A value of 0 means use the width of + // the label text. + labelWidth int + + // The screen width of the input area. A value of 0 means extend as much as + // possible. + fieldWidth int + + // A character to mask entered text (useful for password fields). A value of 0 + // disables masking. + maskCharacter rune + + // An optional function which may reject the last character that was entered. + accept func(text string, ch rune) bool + + // An optional function which is called when the input has changed. + changed func(text string) + + // An optional function which is called when the user indicated that they + // are done entering text. The key which was pressed is provided (tab, + // shift-tab, enter, or escape). + done func(tcell.Key) + + // A callback function set by the Form class and called when the user leaves + // this form item. + finished func(tcell.Key) +} + +// NewInputField returns a new input field. +func NewInputField() *InputField { + return &InputField{ + Box: NewBox(), + labelColor: Styles.SecondaryTextColor, + fieldBackgroundColor: Styles.ContrastBackgroundColor, + fieldTextColor: Styles.PrimaryTextColor, + placeholderTextColor: Styles.ContrastSecondaryTextColor, + } +} + +// SetText sets the current text of the input field. +func (i *InputField) SetText(text string) *InputField { + i.text = text + if i.changed != nil { + i.changed(text) + } + return i +} + +// GetText returns the current text of the input field. +func (i *InputField) GetText() string { + return i.text +} + +// SetLabel sets the text to be displayed before the input area. +func (i *InputField) SetLabel(label string) *InputField { + i.label = label + return i +} + +// GetLabel returns the text to be displayed before the input area. +func (i *InputField) GetLabel() string { + return i.label +} + +// SetLabelWidth sets the screen width of the label. A value of 0 will cause the +// primitive to use the width of the label string. +func (i *InputField) SetLabelWidth(width int) *InputField { + i.labelWidth = width + return i +} + +// SetPlaceholder sets the text to be displayed when the input text is empty. +func (i *InputField) SetPlaceholder(text string) *InputField { + i.placeholder = text + return i +} + +// SetLabelColor sets the color of the label. +func (i *InputField) SetLabelColor(color tcell.Color) *InputField { + i.labelColor = color + return i +} + +// SetFieldBackgroundColor sets the background color of the input area. +func (i *InputField) SetFieldBackgroundColor(color tcell.Color) *InputField { + i.fieldBackgroundColor = color + return i +} + +// SetFieldTextColor sets the text color of the input area. +func (i *InputField) SetFieldTextColor(color tcell.Color) *InputField { + i.fieldTextColor = color + return i +} + +// SetPlaceholderTextColor sets the text color of placeholder text. +func (i *InputField) SetPlaceholderTextColor(color tcell.Color) *InputField { + i.placeholderTextColor = color + return i +} + +// SetFormAttributes sets attributes shared by all form items. +func (i *InputField) SetFormAttributes(labelWidth int, labelColor, bgColor, fieldTextColor, fieldBgColor tcell.Color) FormItem { + i.labelWidth = labelWidth + i.labelColor = labelColor + i.backgroundColor = bgColor + i.fieldTextColor = fieldTextColor + i.fieldBackgroundColor = fieldBgColor + return i +} + +// SetFieldWidth sets the screen width of the input area. A value of 0 means +// extend as much as possible. +func (i *InputField) SetFieldWidth(width int) *InputField { + i.fieldWidth = width + return i +} + +// GetFieldWidth returns this primitive's field width. +func (i *InputField) GetFieldWidth() int { + return i.fieldWidth +} + +// SetMaskCharacter sets a character that masks user input on a screen. A value +// of 0 disables masking. +func (i *InputField) SetMaskCharacter(mask rune) *InputField { + i.maskCharacter = mask + return i +} + +// SetAcceptanceFunc sets a handler which may reject the last character that was +// entered (by returning false). +// +// This package defines a number of variables Prefixed with InputField which may +// be used for common input (e.g. numbers, maximum text length). +func (i *InputField) SetAcceptanceFunc(handler func(textToCheck string, lastChar rune) bool) *InputField { + i.accept = handler + return i +} + +// SetChangedFunc sets a handler which is called whenever the text of the input +// field has changed. It receives the current text (after the change). +func (i *InputField) SetChangedFunc(handler func(text string)) *InputField { + i.changed = handler + return i +} + +// SetDoneFunc sets a handler which is called when the user is done entering +// text. The callback function is provided with the key that was pressed, which +// is one of the following: +// +// - KeyEnter: Done entering text. +// - KeyEscape: Abort text input. +// - KeyTab: Move to the next field. +// - KeyBacktab: Move to the previous field. +func (i *InputField) SetDoneFunc(handler func(key tcell.Key)) *InputField { + i.done = handler + return i +} + +// SetFinishedFunc sets a callback invoked when the user leaves this form item. +func (i *InputField) SetFinishedFunc(handler func(key tcell.Key)) FormItem { + i.finished = handler + return i +} + +// Draw draws this primitive onto the screen. +func (i *InputField) Draw(screen tcell.Screen) { + i.Box.Draw(screen) + + // Prepare + x, y, width, height := i.GetInnerRect() + rightLimit := x + width + if height < 1 || rightLimit <= x { + return + } + + // Draw label. + if i.labelWidth > 0 { + labelWidth := i.labelWidth + if labelWidth > rightLimit-x { + labelWidth = rightLimit - x + } + Print(screen, i.label, x, y, labelWidth, AlignLeft, i.labelColor) + x += labelWidth + } else { + _, drawnWidth := Print(screen, i.label, x, y, rightLimit-x, AlignLeft, i.labelColor) + x += drawnWidth + } + + // Draw input area. + fieldWidth := i.fieldWidth + if fieldWidth == 0 { + fieldWidth = math.MaxInt32 + } + if rightLimit-x < fieldWidth { + fieldWidth = rightLimit - x + } + fieldStyle := tcell.StyleDefault.Background(i.fieldBackgroundColor) + for index := 0; index < fieldWidth; index++ { + screen.SetContent(x+index, y, ' ', nil, fieldStyle) + } + + // Draw placeholder text. + text := i.text + if text == "" && i.placeholder != "" { + Print(screen, i.placeholder, x, y, fieldWidth, AlignLeft, i.placeholderTextColor) + } else { + // Draw entered text. + if i.maskCharacter > 0 { + text = strings.Repeat(string(i.maskCharacter), utf8.RuneCountInString(i.text)) + } else { + text = Escape(text) + } + fieldWidth-- // We need one cell for the cursor. + if fieldWidth < runewidth.StringWidth(text) { + Print(screen, text, x, y, fieldWidth, AlignRight, i.fieldTextColor) + } else { + Print(screen, text, x, y, fieldWidth, AlignLeft, i.fieldTextColor) + } + } + + // Set cursor. + if i.focus.HasFocus() { + i.setCursor(screen) + } +} + +// setCursor sets the cursor position. +func (i *InputField) setCursor(screen tcell.Screen) { + x := i.x + y := i.y + rightLimit := x + i.width + if i.border { + x++ + y++ + rightLimit -= 2 + } + fieldWidth := runewidth.StringWidth(i.text) + if i.fieldWidth > 0 && fieldWidth > i.fieldWidth-1 { + fieldWidth = i.fieldWidth - 1 + } + if i.labelWidth > 0 { + x += i.labelWidth + fieldWidth + } else { + x += StringWidth(i.label) + fieldWidth + } + if x >= rightLimit { + x = rightLimit - 1 + } + screen.ShowCursor(x, y) +} + +// InputHandler returns the handler for this primitive. +func (i *InputField) InputHandler() func(event *tcell.EventKey, setFocus func(p Primitive)) { + return i.WrapInputHandler(func(event *tcell.EventKey, setFocus func(p Primitive)) { + // Trigger changed events. + currentText := i.text + defer func() { + if i.text != currentText && i.changed != nil { + i.changed(i.text) + } + }() + + // Process key event. + switch key := event.Key(); key { + case tcell.KeyRune: // Regular character. + newText := i.text + string(event.Rune()) + if i.accept != nil { + if !i.accept(newText, event.Rune()) { + break + } + } + i.text = newText + case tcell.KeyCtrlU: // Delete all. + i.text = "" + case tcell.KeyCtrlW: // Delete last word. + lastWord := regexp.MustCompile(`\s*\S+\s*$`) + i.text = lastWord.ReplaceAllString(i.text, "") + case tcell.KeyBackspace, tcell.KeyBackspace2: // Delete last character. + if len(i.text) == 0 { + break + } + runes := []rune(i.text) + i.text = string(runes[:len(runes)-1]) + case tcell.KeyEnter, tcell.KeyTab, tcell.KeyBacktab, tcell.KeyEscape: // We're done. + if i.done != nil { + i.done(key) + } + if i.finished != nil { + i.finished(key) + } + } + }) +} diff --git a/vendor/github.com/rivo/tview/list.go b/vendor/github.com/rivo/tview/list.go new file mode 100644 index 00000000..296141a8 --- /dev/null +++ b/vendor/github.com/rivo/tview/list.go @@ -0,0 +1,349 @@ +package tview + +import ( + "fmt" + + "github.com/gdamore/tcell" +) + +// listItem represents one item in a List. +type listItem struct { + MainText string // The main text of the list item. + SecondaryText string // A secondary text to be shown underneath the main text. + Shortcut rune // The key to select the list item directly, 0 if there is no shortcut. + Selected func() // The optional function which is called when the item is selected. +} + +// List displays rows of items, each of which can be selected. +// +// See https://github.com/rivo/tview/wiki/List for an example. +type List struct { + *Box + + // The items of the list. + items []*listItem + + // The index of the currently selected item. + currentItem int + + // Whether or not to show the secondary item texts. + showSecondaryText bool + + // The item main text color. + mainTextColor tcell.Color + + // The item secondary text color. + secondaryTextColor tcell.Color + + // The item shortcut text color. + shortcutColor tcell.Color + + // The text color for selected items. + selectedTextColor tcell.Color + + // The background color for selected items. + selectedBackgroundColor tcell.Color + + // An optional function which is called when the user has navigated to a list + // item. + changed func(index int, mainText, secondaryText string, shortcut rune) + + // An optional function which is called when a list item was selected. This + // function will be called even if the list item defines its own callback. + selected func(index int, mainText, secondaryText string, shortcut rune) + + // An optional function which is called when the user presses the Escape key. + done func() +} + +// NewList returns a new form. +func NewList() *List { + return &List{ + Box: NewBox(), + showSecondaryText: true, + mainTextColor: Styles.PrimaryTextColor, + secondaryTextColor: Styles.TertiaryTextColor, + shortcutColor: Styles.SecondaryTextColor, + selectedTextColor: Styles.PrimitiveBackgroundColor, + selectedBackgroundColor: Styles.PrimaryTextColor, + } +} + +// SetCurrentItem sets the currently selected item by its index. This triggers +// a "changed" event. +func (l *List) SetCurrentItem(index int) *List { + l.currentItem = index + if l.currentItem < len(l.items) && l.changed != nil { + item := l.items[l.currentItem] + l.changed(l.currentItem, item.MainText, item.SecondaryText, item.Shortcut) + } + return l +} + +// GetCurrentItem returns the index of the currently selected list item. +func (l *List) GetCurrentItem() int { + return l.currentItem +} + +// SetMainTextColor sets the color of the items' main text. +func (l *List) SetMainTextColor(color tcell.Color) *List { + l.mainTextColor = color + return l +} + +// SetSecondaryTextColor sets the color of the items' secondary text. +func (l *List) SetSecondaryTextColor(color tcell.Color) *List { + l.secondaryTextColor = color + return l +} + +// SetShortcutColor sets the color of the items' shortcut. +func (l *List) SetShortcutColor(color tcell.Color) *List { + l.shortcutColor = color + return l +} + +// SetSelectedTextColor sets the text color of selected items. +func (l *List) SetSelectedTextColor(color tcell.Color) *List { + l.selectedTextColor = color + return l +} + +// SetSelectedBackgroundColor sets the background color of selected items. +func (l *List) SetSelectedBackgroundColor(color tcell.Color) *List { + l.selectedBackgroundColor = color + return l +} + +// ShowSecondaryText determines whether or not to show secondary item texts. +func (l *List) ShowSecondaryText(show bool) *List { + l.showSecondaryText = show + return l +} + +// SetChangedFunc sets the function which is called when the user navigates to +// a list item. The function receives the item's index in the list of items +// (starting with 0), its main text, secondary text, and its shortcut rune. +// +// This function is also called when the first item is added or when +// SetCurrentItem() is called. +func (l *List) SetChangedFunc(handler func(int, string, string, rune)) *List { + l.changed = handler + return l +} + +// SetSelectedFunc sets the function which is called when the user selects a +// list item by pressing Enter on the current selection. The function receives +// the item's index in the list of items (starting with 0), its main text, +// secondary text, and its shortcut rune. +func (l *List) SetSelectedFunc(handler func(int, string, string, rune)) *List { + l.selected = handler + return l +} + +// SetDoneFunc sets a function which is called when the user presses the Escape +// key. +func (l *List) SetDoneFunc(handler func()) *List { + l.done = handler + return l +} + +// AddItem adds a new item to the list. An item has a main text which will be +// highlighted when selected. It also has a secondary text which is shown +// underneath the main text (if it is set to visible) but which may remain +// empty. +// +// The shortcut is a key binding. If the specified rune is entered, the item +// is selected immediately. Set to 0 for no binding. +// +// The "selected" callback will be invoked when the user selects the item. You +// may provide nil if no such item is needed or if all events are handled +// through the selected callback set with SetSelectedFunc(). +func (l *List) AddItem(mainText, secondaryText string, shortcut rune, selected func()) *List { + l.items = append(l.items, &listItem{ + MainText: mainText, + SecondaryText: secondaryText, + Shortcut: shortcut, + Selected: selected, + }) + if len(l.items) == 1 && l.changed != nil { + item := l.items[0] + l.changed(0, item.MainText, item.SecondaryText, item.Shortcut) + } + return l +} + +// GetItemCount returns the number of items in the list. +func (l *List) GetItemCount() int { + return len(l.items) +} + +// GetItemText returns an item's texts (main and secondary). Panics if the index +// is out of range. +func (l *List) GetItemText(index int) (main, secondary string) { + return l.items[index].MainText, l.items[index].SecondaryText +} + +// SetItemText sets an item's main and secondary text. Panics if the index is +// out of range. +func (l *List) SetItemText(index int, main, secondary string) *List { + item := l.items[index] + item.MainText = main + item.SecondaryText = secondary + return l +} + +// Clear removes all items from the list. +func (l *List) Clear() *List { + l.items = nil + l.currentItem = 0 + return l +} + +// Draw draws this primitive onto the screen. +func (l *List) Draw(screen tcell.Screen) { + l.Box.Draw(screen) + + // Determine the dimensions. + x, y, width, height := l.GetInnerRect() + bottomLimit := y + height + + // Do we show any shortcuts? + var showShortcuts bool + for _, item := range l.items { + if item.Shortcut != 0 { + showShortcuts = true + x += 4 + width -= 4 + break + } + } + + // We want to keep the current selection in view. What is our offset? + var offset int + if l.showSecondaryText { + if 2*l.currentItem >= height { + offset = (2*l.currentItem + 2 - height) / 2 + } + } else { + if l.currentItem >= height { + offset = l.currentItem + 1 - height + } + } + + // Draw the list items. + for index, item := range l.items { + if index < offset { + continue + } + + if y >= bottomLimit { + break + } + + // Shortcuts. + if showShortcuts && item.Shortcut != 0 { + Print(screen, fmt.Sprintf("(%s)", string(item.Shortcut)), x-5, y, 4, AlignRight, l.shortcutColor) + } + + // Main text. + Print(screen, item.MainText, x, y, width, AlignLeft, l.mainTextColor) + + // Background color of selected text. + if index == l.currentItem { + textWidth := StringWidth(item.MainText) + for bx := 0; bx < textWidth && bx < width; bx++ { + m, c, style, _ := screen.GetContent(x+bx, y) + fg, _, _ := style.Decompose() + if fg == l.mainTextColor { + fg = l.selectedTextColor + } + style = style.Background(l.selectedBackgroundColor).Foreground(fg) + screen.SetContent(x+bx, y, m, c, style) + } + } + + y++ + + if y >= bottomLimit { + break + } + + // Secondary text. + if l.showSecondaryText { + Print(screen, item.SecondaryText, x, y, width, AlignLeft, l.secondaryTextColor) + y++ + } + } +} + +// InputHandler returns the handler for this primitive. +func (l *List) InputHandler() func(event *tcell.EventKey, setFocus func(p Primitive)) { + return l.WrapInputHandler(func(event *tcell.EventKey, setFocus func(p Primitive)) { + previousItem := l.currentItem + + switch key := event.Key(); key { + case tcell.KeyTab, tcell.KeyDown, tcell.KeyRight: + l.currentItem++ + case tcell.KeyBacktab, tcell.KeyUp, tcell.KeyLeft: + l.currentItem-- + case tcell.KeyHome: + l.currentItem = 0 + case tcell.KeyEnd: + l.currentItem = len(l.items) - 1 + case tcell.KeyPgDn: + l.currentItem += 5 + case tcell.KeyPgUp: + l.currentItem -= 5 + case tcell.KeyEnter: + if l.currentItem >= 0 && l.currentItem < len(l.items) { + item := l.items[l.currentItem] + if item.Selected != nil { + item.Selected() + } + if l.selected != nil { + l.selected(l.currentItem, item.MainText, item.SecondaryText, item.Shortcut) + } + } + case tcell.KeyEscape: + if l.done != nil { + l.done() + } + case tcell.KeyRune: + ch := event.Rune() + if ch != ' ' { + // It's not a space bar. Is it a shortcut? + var found bool + for index, item := range l.items { + if item.Shortcut == ch { + // We have a shortcut. + found = true + l.currentItem = index + break + } + } + if !found { + break + } + } + item := l.items[l.currentItem] + if item.Selected != nil { + item.Selected() + } + if l.selected != nil { + l.selected(l.currentItem, item.MainText, item.SecondaryText, item.Shortcut) + } + } + + if l.currentItem < 0 { + l.currentItem = len(l.items) - 1 + } else if l.currentItem >= len(l.items) { + l.currentItem = 0 + } + + if l.currentItem != previousItem && l.currentItem < len(l.items) && l.changed != nil { + item := l.items[l.currentItem] + l.changed(l.currentItem, item.MainText, item.SecondaryText, item.Shortcut) + } + }) +} diff --git a/vendor/github.com/rivo/tview/modal.go b/vendor/github.com/rivo/tview/modal.go new file mode 100644 index 00000000..8ed535e7 --- /dev/null +++ b/vendor/github.com/rivo/tview/modal.go @@ -0,0 +1,131 @@ +package tview + +import ( + "github.com/gdamore/tcell" +) + +// Modal is a centered message window used to inform the user or prompt them +// for an immediate decision. It needs to have at least one button (added via +// AddButtons()) or it will never disappear. +// +// See https://github.com/rivo/tview/wiki/Modal for an example. +type Modal struct { + *Box + + // The framed embedded in the modal. + frame *Frame + + // The form embedded in the modal's frame. + form *Form + + // The message text (original, not word-wrapped). + text string + + // The text color. + textColor tcell.Color + + // The optional callback for when the user clicked one of the buttons. It + // receives the index of the clicked button and the button's label. + done func(buttonIndex int, buttonLabel string) +} + +// NewModal returns a new modal message window. +func NewModal() *Modal { + m := &Modal{ + Box: NewBox(), + textColor: Styles.PrimaryTextColor, + } + m.form = NewForm(). + SetButtonsAlign(AlignCenter). + SetButtonBackgroundColor(Styles.PrimitiveBackgroundColor). + SetButtonTextColor(Styles.PrimaryTextColor) + m.form.SetBackgroundColor(Styles.ContrastBackgroundColor).SetBorderPadding(0, 0, 0, 0) + m.frame = NewFrame(m.form).SetBorders(0, 0, 1, 0, 0, 0) + m.frame.SetBorder(true). + SetBackgroundColor(Styles.ContrastBackgroundColor). + SetBorderPadding(1, 1, 1, 1) + m.focus = m + return m +} + +// SetTextColor sets the color of the message text. +func (m *Modal) SetTextColor(color tcell.Color) *Modal { + m.textColor = color + return m +} + +// SetDoneFunc sets a handler which is called when one of the buttons was +// pressed. It receives the index of the button as well as its label text. The +// handler is also called when the user presses the Escape key. The index will +// then be negative and the label text an emptry string. +func (m *Modal) SetDoneFunc(handler func(buttonIndex int, buttonLabel string)) *Modal { + m.done = handler + return m +} + +// SetText sets the message text of the window. The text may contain line +// breaks. Note that words are wrapped, too, based on the final size of the +// window. +func (m *Modal) SetText(text string) *Modal { + m.text = text + return m +} + +// AddButtons adds buttons to the window. There must be at least one button and +// a "done" handler so the window can be closed again. +func (m *Modal) AddButtons(labels []string) *Modal { + for index, label := range labels { + func(i int, l string) { + m.form.AddButton(label, func() { + if m.done != nil { + m.done(i, l) + } + }) + }(index, label) + } + return m +} + +// Focus is called when this primitive receives focus. +func (m *Modal) Focus(delegate func(p Primitive)) { + delegate(m.form) +} + +// HasFocus returns whether or not this primitive has focus. +func (m *Modal) HasFocus() bool { + return m.form.HasFocus() +} + +// Draw draws this primitive onto the screen. +func (m *Modal) Draw(screen tcell.Screen) { + // Calculate the width of this modal. + buttonsWidth := 0 + for _, button := range m.form.buttons { + buttonsWidth += StringWidth(button.label) + 4 + 2 + } + buttonsWidth -= 2 + screenWidth, screenHeight := screen.Size() + width := screenWidth / 3 + if width < buttonsWidth { + width = buttonsWidth + } + // width is now without the box border. + + // Reset the text and find out how wide it is. + m.frame.Clear() + lines := WordWrap(m.text, width) + for _, line := range lines { + m.frame.AddText(line, true, AlignCenter, m.textColor) + } + + // Set the modal's position and size. + height := len(lines) + 6 + width += 4 + x := (screenWidth - width) / 2 + y := (screenHeight - height) / 2 + m.SetRect(x, y, width, height) + + // Draw the frame. + m.frame.SetRect(x, y, width, height) + m.frame.Draw(screen) +} diff --git a/vendor/github.com/rivo/tview/pages.go b/vendor/github.com/rivo/tview/pages.go new file mode 100644 index 00000000..9af7fe97 --- /dev/null +++ b/vendor/github.com/rivo/tview/pages.go @@ -0,0 +1,248 @@ +package tview + +import ( + "github.com/gdamore/tcell" +) + +// page represents one page of a Pages object. +type page struct { + Name string // The page's name. + Item Primitive // The page's primitive. + Resize bool // Whether or not to resize the page when it is drawn. + Visible bool // Whether or not this page is visible. +} + +// Pages is a container for other primitives often used as the application's +// root primitive. It allows to easily switch the visibility of the contained +// primitives. +// +// See https://github.com/rivo/tview/wiki/Pages for an example. +type Pages struct { + *Box + + // The contained pages. + pages []*page + + // We keep a reference to the function which allows us to set the focus to + // a newly visible page. + setFocus func(p Primitive) + + // An optional handler which is called whenever the visibility or the order of + // pages changes. + changed func() +} + +// NewPages returns a new Pages object. +func NewPages() *Pages { + p := &Pages{ + Box: NewBox(), + } + p.focus = p + return p +} + +// SetChangedFunc sets a handler which is called whenever the visibility or the +// order of any visible pages changes. This can be used to redraw the pages. +func (p *Pages) SetChangedFunc(handler func()) *Pages { + p.changed = handler + return p +} + +// AddPage adds a new page with the given name and primitive. If there was +// previously a page with the same name, it is overwritten. Leaving the name +// empty may cause conflicts in other functions. +// +// Visible pages will be drawn in the order they were added (unless that order +// was changed in one of the other functions). If "resize" is set to true, the +// primitive will be set to the size available to the Pages primitive whenever +// the pages are drawn. +func (p *Pages) AddPage(name string, item Primitive, resize, visible bool) *Pages { + for index, pg := range p.pages { + if pg.Name == name { + p.pages = append(p.pages[:index], p.pages[index+1:]...) + break + } + } + p.pages = append(p.pages, &page{Item: item, Name: name, Resize: resize, Visible: visible}) + if p.changed != nil { + p.changed() + } + if p.HasFocus() { + p.Focus(p.setFocus) + } + return p +} + +// AddAndSwitchToPage calls AddPage(), then SwitchToPage() on that newly added +// page. +func (p *Pages) AddAndSwitchToPage(name string, item Primitive, resize bool) *Pages { + p.AddPage(name, item, resize, true) + p.SwitchToPage(name) + return p +} + +// RemovePage removes the page with the given name. +func (p *Pages) RemovePage(name string) *Pages { + hasFocus := p.HasFocus() + for index, page := range p.pages { + if page.Name == name { + p.pages = append(p.pages[:index], p.pages[index+1:]...) + if page.Visible && p.changed != nil { + p.changed() + } + break + } + } + if hasFocus { + p.Focus(p.setFocus) + } + return p +} + +// HasPage returns true if a page with the given name exists in this object. +func (p *Pages) HasPage(name string) bool { + for _, page := range p.pages { + if page.Name == name { + return true + } + } + return false +} + +// ShowPage sets a page's visibility to "true" (in addition to any other pages +// which are already visible). +func (p *Pages) ShowPage(name string) *Pages { + for _, page := range p.pages { + if page.Name == name { + page.Visible = true + if p.changed != nil { + p.changed() + } + break + } + } + if p.HasFocus() { + p.Focus(p.setFocus) + } + return p +} + +// HidePage sets a page's visibility to "false". +func (p *Pages) HidePage(name string) *Pages { + for _, page := range p.pages { + if page.Name == name { + page.Visible = false + if p.changed != nil { + p.changed() + } + break + } + } + if p.HasFocus() { + p.Focus(p.setFocus) + } + return p +} + +// SwitchToPage sets a page's visibility to "true" and all other pages' +// visibility to "false". +func (p *Pages) SwitchToPage(name string) *Pages { + for _, page := range p.pages { + if page.Name == name { + page.Visible = true + } else { + page.Visible = false + } + } + if p.changed != nil { + p.changed() + } + if p.HasFocus() { + p.Focus(p.setFocus) + } + return p +} + +// SendToFront changes the order of the pages such that the page with the given +// name comes last, causing it to be drawn last with the next update (if +// visible). +func (p *Pages) SendToFront(name string) *Pages { + for index, page := range p.pages { + if page.Name == name { + if index < len(p.pages)-1 { + p.pages = append(append(p.pages[:index], p.pages[index+1:]...), page) + } + if page.Visible && p.changed != nil { + p.changed() + } + break + } + } + if p.HasFocus() { + p.Focus(p.setFocus) + } + return p +} + +// SendToBack changes the order of the pages such that the page with the given +// name comes first, causing it to be drawn first with the next update (if +// visible). +func (p *Pages) SendToBack(name string) *Pages { + for index, pg := range p.pages { + if pg.Name == name { + if index > 0 { + p.pages = append(append([]*page{pg}, p.pages[:index]...), p.pages[index+1:]...) + } + if pg.Visible && p.changed != nil { + p.changed() + } + break + } + } + if p.HasFocus() { + p.Focus(p.setFocus) + } + return p +} + +// HasFocus returns whether or not this primitive has focus. +func (p *Pages) HasFocus() bool { + for _, page := range p.pages { + if page.Item.GetFocusable().HasFocus() { + return true + } + } + return false +} + +// Focus is called by the application when the primitive receives focus. +func (p *Pages) Focus(delegate func(p Primitive)) { + if delegate == nil { + return // We cannot delegate so we cannot focus. + } + p.setFocus = delegate + var topItem Primitive + for _, page := range p.pages { + if page.Visible { + topItem = page.Item + } + } + if topItem != nil { + delegate(topItem) + } +} + +// Draw draws this primitive onto the screen. +func (p *Pages) Draw(screen tcell.Screen) { + p.Box.Draw(screen) + for _, page := range p.pages { + if !page.Visible { + continue + } + if page.Resize { + x, y, width, height := p.GetInnerRect() + page.Item.SetRect(x, y, width, height) + } + page.Item.Draw(screen) + } +} diff --git a/vendor/github.com/rivo/tview/primitive.go b/vendor/github.com/rivo/tview/primitive.go new file mode 100644 index 00000000..88a9d466 --- /dev/null +++ b/vendor/github.com/rivo/tview/primitive.go @@ -0,0 +1,46 @@ +package tview + +import "github.com/gdamore/tcell" + +// Primitive is the top-most interface for all graphical primitives. +type Primitive interface { + // Draw draws this primitive onto the screen. Implementers can call the + // screen's ShowCursor() function but should only do so when they have focus. + // (They will need to keep track of this themselves.) + Draw(screen tcell.Screen) + + // GetRect returns the current position of the primitive, x, y, width, and + // height. + GetRect() (int, int, int, int) + + // SetRect sets a new position of the primitive. + SetRect(x, y, width, height int) + + // InputHandler returns a handler which receives key events when it has focus. + // It is called by the Application class. + // + // A value of nil may also be returned, in which case this primitive cannot + // receive focus and will not process any key events. + // + // The handler will receive the key event and a function that allows it to + // set the focus to a different primitive, so that future key events are sent + // to that primitive. + // + // The Application's Draw() function will be called automatically after the + // handler returns. + // + // The Box class provides functionality to intercept keyboard input. If you + // subclass from Box, it is recommended that you wrap your handler using + // Box.WrapInputHandler() so you inherit that functionality. + InputHandler() func(event *tcell.EventKey, setFocus func(p Primitive)) + + // Focus is called by the application when the primitive receives focus. + // Implementers may call delegate() to pass the focus on to another primitive. + Focus(delegate func(p Primitive)) + + // Blur is called by the application when the primitive loses focus. + Blur() + + // GetFocusable returns the item's Focusable. + GetFocusable() Focusable +} diff --git a/vendor/github.com/rivo/tview/styles.go b/vendor/github.com/rivo/tview/styles.go new file mode 100644 index 00000000..dbd60ad0 --- /dev/null +++ b/vendor/github.com/rivo/tview/styles.go @@ -0,0 +1,34 @@ +package tview + +import "github.com/gdamore/tcell" + +// Styles defines various colors used when primitives are initialized. These +// may be changed to accommodate a different look and feel. +// +// The default is for applications with a black background and basic colors: +// black, white, yellow, green, and blue. +var Styles = struct { + PrimitiveBackgroundColor tcell.Color // Main background color for primitives. + ContrastBackgroundColor tcell.Color // Background color for contrasting elements. + MoreContrastBackgroundColor tcell.Color // Background color for even more contrasting elements. + BorderColor tcell.Color // Box borders. + TitleColor tcell.Color // Box titles. + GraphicsColor tcell.Color // Graphics. + PrimaryTextColor tcell.Color // Primary text. + SecondaryTextColor tcell.Color // Secondary text (e.g. labels). + TertiaryTextColor tcell.Color // Tertiary text (e.g. subtitles, notes). + InverseTextColor tcell.Color // Text on primary-colored backgrounds. + ContrastSecondaryTextColor tcell.Color // Secondary text on ContrastBackgroundColor-colored backgrounds. +}{ + PrimitiveBackgroundColor: tcell.ColorBlack, + ContrastBackgroundColor: tcell.ColorBlue, + MoreContrastBackgroundColor: tcell.ColorGreen, + BorderColor: tcell.ColorWhite, + TitleColor: tcell.ColorWhite, + GraphicsColor: tcell.ColorWhite, + PrimaryTextColor: tcell.ColorWhite, + SecondaryTextColor: tcell.ColorYellow, + TertiaryTextColor: tcell.ColorGreen, + InverseTextColor: tcell.ColorBlue, + ContrastSecondaryTextColor: tcell.ColorDarkCyan, +} diff --git a/vendor/github.com/rivo/tview/table.go b/vendor/github.com/rivo/tview/table.go new file mode 100644 index 00000000..4036013a --- /dev/null +++ b/vendor/github.com/rivo/tview/table.go @@ -0,0 +1,1043 @@ +package tview + +import ( + "sort" + + "github.com/gdamore/tcell" + colorful "github.com/lucasb-eyer/go-colorful" +) + +// TableCell represents one cell inside a Table. You can instantiate this type +// directly but all colors (background and text) will be set to their default +// which is black. +type TableCell struct { + // The text to be displayed in the table cell. + Text string + + // The alignment of the cell text. One of AlignLeft (default), AlignCenter, + // or AlignRight. + Align int + + // The maximum width of the cell in screen space. This is used to give a + // column a maximum width. Any cell text whose screen width exceeds this width + // is cut off. Set to 0 if there is no maximum width. + MaxWidth int + + // If the total table width is less than the available width, this value is + // used to add extra width to a column. See SetExpansion() for details. + Expansion int + + // The color of the cell text. + Color tcell.Color + + // The background color of the cell. + BackgroundColor tcell.Color + + // The style attributes of the cell. + Attributes tcell.AttrMask + + // If set to true, this cell cannot be selected. + NotSelectable bool + + // The position and width of the cell the last time table was drawn. + x, y, width int +} + +// NewTableCell returns a new table cell with sensible defaults. That is, left +// aligned text with the primary text color (see Styles) and a transparent +// background (using the background of the Table). +func NewTableCell(text string) *TableCell { + return &TableCell{ + Text: text, + Align: AlignLeft, + Color: Styles.PrimaryTextColor, + BackgroundColor: tcell.ColorDefault, + } +} + +// SetText sets the cell's text. +func (c *TableCell) SetText(text string) *TableCell { + c.Text = text + return c +} + +// SetAlign sets the cell's text alignment, one of AlignLeft, AlignCenter, or +// AlignRight. +func (c *TableCell) SetAlign(align int) *TableCell { + c.Align = align + return c +} + +// SetMaxWidth sets maximum width of the cell in screen space. This is used to +// give a column a maximum width. Any cell text whose screen width exceeds this +// width is cut off. Set to 0 if there is no maximum width. +func (c *TableCell) SetMaxWidth(maxWidth int) *TableCell { + c.MaxWidth = maxWidth + return c +} + +// SetExpansion sets the value by which the column of this cell expands if the +// available width for the table is more than the table width (prior to applying +// this expansion value). This is a proportional value. The amount of unused +// horizontal space is divided into widths to be added to each column. How much +// extra width a column receives depends on the expansion value: A value of 0 +// (the default) will not cause the column to increase in width. Other values +// are proportional, e.g. a value of 2 will cause a column to grow by twice +// the amount of a column with a value of 1. +// +// Since this value affects an entire column, the maximum over all visible cells +// in that column is used. +// +// This function panics if a negative value is provided. +func (c *TableCell) SetExpansion(expansion int) *TableCell { + if expansion < 0 { + panic("Table cell expansion values may not be negative") + } + c.Expansion = expansion + return c +} + +// SetTextColor sets the cell's text color. +func (c *TableCell) SetTextColor(color tcell.Color) *TableCell { + c.Color = color + return c +} + +// SetBackgroundColor sets the cell's background color. Set to +// tcell.ColorDefault to use the table's background color. +func (c *TableCell) SetBackgroundColor(color tcell.Color) *TableCell { + c.BackgroundColor = color + return c +} + +// SetAttributes sets the cell's text attributes. You can combine different +// attributes using bitmask operations: +// +// cell.SetAttributes(tcell.AttrUnderline | tcell.AttrBold) +func (c *TableCell) SetAttributes(attr tcell.AttrMask) *TableCell { + c.Attributes = attr + return c +} + +// SetStyle sets the cell's style (foreground color, background color, and +// attributes) all at once. +func (c *TableCell) SetStyle(style tcell.Style) *TableCell { + c.Color, c.BackgroundColor, c.Attributes = style.Decompose() + return c +} + +// SetSelectable sets whether or not this cell can be selected by the user. +func (c *TableCell) SetSelectable(selectable bool) *TableCell { + c.NotSelectable = !selectable + return c +} + +// GetLastPosition returns the position of the table cell the last time it was +// drawn on screen. If the cell is not on screen, the return values are +// undefined. +// +// Because the Table class will attempt to keep selected cells on screen, this +// function is most useful in response to a "selected" event (see +// SetSelectedFunc()) or a "selectionChanged" event (see +// SetSelectionChangedFunc()). +func (c *TableCell) GetLastPosition() (x, y, width int) { + return c.x, c.y, c.width +} + +// Table visualizes two-dimensional data consisting of rows and columns. Each +// Table cell is defined via SetCell() by the TableCell type. They can be added +// dynamically to the table and changed any time. +// +// The most compact display of a table is without borders. Each row will then +// occupy one row on screen and columns are separated by the rune defined via +// SetSeparator() (a space character by default). +// +// When borders are turned on (via SetBorders()), each table cell is surrounded +// by lines. Therefore one table row will require two rows on screen. +// +// Columns will use as much horizontal space as they need. You can constrain +// their size with the MaxWidth parameter of the TableCell type. +// +// Fixed Columns +// +// You can define fixed rows and rolumns via SetFixed(). They will always stay +// in their place, even when the table is scrolled. Fixed rows are always the +// top rows. Fixed columns are always the leftmost columns. +// +// Selections +// +// You can call SetSelectable() to set columns and/or rows to "selectable". If +// the flag is set only for columns, entire columns can be selected by the user. +// If it is set only for rows, entire rows can be selected. If both flags are +// set, individual cells can be selected. The "selected" handler set via +// SetSelectedFunc() is invoked when the user presses Enter on a selection. +// +// Navigation +// +// If the table extends beyond the available space, it can be navigated with +// key bindings similar to Vim: +// +// - h, left arrow: Move left by one column. +// - l, right arrow: Move right by one column. +// - j, down arrow: Move down by one row. +// - k, up arrow: Move up by one row. +// - g, home: Move to the top. +// - G, end: Move to the bottom. +// - Ctrl-F, page down: Move down by one page. +// - Ctrl-B, page up: Move up by one page. +// +// When there is no selection, this affects the entire table (except for fixed +// rows and columns). When there is a selection, the user moves the selection. +// The class will attempt to keep the selection from moving out of the screen. +// +// Use SetInputCapture() to override or modify keyboard input. +// +// See https://github.com/rivo/tview/wiki/Table for an example. +type Table struct { + *Box + + // Whether or not this table has borders around each cell. + borders bool + + // The color of the borders or the separator. + bordersColor tcell.Color + + // If there are no borders, the column separator. + separator rune + + // The cells of the table. Rows first, then columns. + cells [][]*TableCell + + // The rightmost column in the data set. + lastColumn int + + // The number of fixed rows / columns. + fixedRows, fixedColumns int + + // Whether or not rows or columns can be selected. If both are set to true, + // cells can be selected. + rowsSelectable, columnsSelectable bool + + // The currently selected row and column. + selectedRow, selectedColumn int + + // The number of rows/columns by which the table is scrolled down/to the + // right. + rowOffset, columnOffset int + + // If set to true, the table's last row will always be visible. + trackEnd bool + + // The number of visible rows the last time the table was drawn. + visibleRows int + + // An optional function which gets called when the user presses Enter on a + // selected cell. If entire rows selected, the column value is undefined. + // Likewise for entire columns. + selected func(row, column int) + + // An optional function which gets called when the user changes the selection. + // If entire rows selected, the column value is undefined. + // Likewise for entire columns. + selectionChanged func(row, column int) + + // An optional function which gets called when the user presses Escape, Tab, + // or Backtab. Also when the user presses Enter if nothing is selectable. + done func(key tcell.Key) +} + +// NewTable returns a new table. +func NewTable() *Table { + return &Table{ + Box: NewBox(), + bordersColor: Styles.GraphicsColor, + separator: ' ', + lastColumn: -1, + } +} + +// Clear removes all table data. +func (t *Table) Clear() *Table { + t.cells = nil + t.lastColumn = -1 + return t +} + +// SetBorders sets whether or not each cell in the table is surrounded by a +// border. +func (t *Table) SetBorders(show bool) *Table { + t.borders = show + return t +} + +// SetBordersColor sets the color of the cell borders. +func (t *Table) SetBordersColor(color tcell.Color) *Table { + t.bordersColor = color + return t +} + +// SetSeparator sets the character used to fill the space between two +// neighboring cells. This is a space character ' ' per default but you may +// want to set it to GraphicsVertBar (or any other rune) if the column +// separation should be more visible. If cell borders are activated, this is +// ignored. +// +// Separators have the same color as borders. +func (t *Table) SetSeparator(separator rune) *Table { + t.separator = separator + return t +} + +// SetFixed sets the number of fixed rows and columns which are always visible +// even when the rest of the cells are scrolled out of view. Rows are always the +// top-most ones. Columns are always the left-most ones. +func (t *Table) SetFixed(rows, columns int) *Table { + t.fixedRows, t.fixedColumns = rows, columns + return t +} + +// SetSelectable sets the flags which determine what can be selected in a table. +// There are three selection modi: +// +// - rows = false, columns = false: Nothing can be selected. +// - rows = true, columns = false: Rows can be selected. +// - rows = false, columns = true: Columns can be selected. +// - rows = true, columns = true: Individual cells can be selected. +func (t *Table) SetSelectable(rows, columns bool) *Table { + t.rowsSelectable, t.columnsSelectable = rows, columns + return t +} + +// GetSelectable returns what can be selected in a table. Refer to +// SetSelectable() for details. +func (t *Table) GetSelectable() (rows, columns bool) { + return t.rowsSelectable, t.columnsSelectable +} + +// GetSelection returns the position of the current selection. +// If entire rows are selected, the column index is undefined. +// Likewise for entire columns. +func (t *Table) GetSelection() (row, column int) { + return t.selectedRow, t.selectedColumn +} + +// Select sets the selected cell. Depending on the selection settings +// specified via SetSelectable(), this may be an entire row or column, or even +// ignored completely. +func (t *Table) Select(row, column int) *Table { + t.selectedRow, t.selectedColumn = row, column + return t +} + +// SetOffset sets how many rows and columns should be skipped when drawing the +// table. This is useful for large tables that do not fit on the screen. +// Navigating a selection can change these values. +// +// Fixed rows and columns are never skipped. +func (t *Table) SetOffset(row, column int) *Table { + t.rowOffset, t.columnOffset = row, column + return t +} + +// GetOffset returns the current row and column offset. This indicates how many +// rows and columns the table is scrolled down and to the right. +func (t *Table) GetOffset() (row, column int) { + return t.rowOffset, t.columnOffset +} + +// SetSelectedFunc sets a handler which is called whenever the user presses the +// Enter key on a selected cell/row/column. The handler receives the position of +// the selection and its cell contents. If entire rows are selected, the column +// index is undefined. Likewise for entire columns. +func (t *Table) SetSelectedFunc(handler func(row, column int)) *Table { + t.selected = handler + return t +} + +// SetSelectionChangedFunc sets a handler which is called whenever the user +// navigates to a new selection. The handler receives the position of the new +// selection. If entire rows are selected, the column index is undefined. +// Likewise for entire columns. +func (t *Table) SetSelectionChangedFunc(handler func(row, column int)) *Table { + t.selectionChanged = handler + return t +} + +// SetDoneFunc sets a handler which is called whenever the user presses the +// Escape, Tab, or Backtab key. If nothing is selected, it is also called when +// user presses the Enter key (because pressing Enter on a selection triggers +// the "selected" handler set via SetSelectedFunc()). +func (t *Table) SetDoneFunc(handler func(key tcell.Key)) *Table { + t.done = handler + return t +} + +// SetCell sets the content of a cell the specified position. It is ok to +// directly instantiate a TableCell object. If the cell has contain, at least +// the Text and Color fields should be set. +// +// Note that setting cells in previously unknown rows and columns will +// automatically extend the internal table representation, e.g. starting with +// a row of 100,000 will immediately create 100,000 empty rows. +// +// To avoid unnecessary garbage collection, fill columns from left to right. +func (t *Table) SetCell(row, column int, cell *TableCell) *Table { + if row >= len(t.cells) { + t.cells = append(t.cells, make([][]*TableCell, row-len(t.cells)+1)...) + } + rowLen := len(t.cells[row]) + if column >= rowLen { + t.cells[row] = append(t.cells[row], make([]*TableCell, column-rowLen+1)...) + for c := rowLen; c < column; c++ { + t.cells[row][c] = &TableCell{} + } + } + t.cells[row][column] = cell + if column > t.lastColumn { + t.lastColumn = column + } + return t +} + +// SetCellSimple calls SetCell() with the given text, left-aligned, in white. +func (t *Table) SetCellSimple(row, column int, text string) *Table { + t.SetCell(row, column, NewTableCell(text)) + return t +} + +// GetCell returns the contents of the cell at the specified position. A valid +// TableCell object is always returns but it will be uninitialized if the cell +// was not previously set. +func (t *Table) GetCell(row, column int) *TableCell { + if row >= len(t.cells) || column >= len(t.cells[row]) { + return &TableCell{} + } + return t.cells[row][column] +} + +// GetRowCount returns the number of rows in the table. +func (t *Table) GetRowCount() int { + return len(t.cells) +} + +// GetColumnCount returns the (maximum) number of columns in the table. +func (t *Table) GetColumnCount() int { + if len(t.cells) == 0 { + return 0 + } + return t.lastColumn + 1 +} + +// ScrollToBeginning scrolls the table to the beginning to that the top left +// corner of the table is shown. Note that this position may be corrected if +// there is a selection. +func (t *Table) ScrollToBeginning() *Table { + t.trackEnd = false + t.columnOffset = 0 + t.rowOffset = 0 + return t +} + +// ScrollToEnd scrolls the table to the beginning to that the bottom left corner +// of the table is shown. Adding more rows to the table will cause it to +// automatically scroll with the new data. Note that this position may be +// corrected if there is a selection. +func (t *Table) ScrollToEnd() *Table { + t.trackEnd = true + t.columnOffset = 0 + t.rowOffset = len(t.cells) + return t +} + +// Draw draws this primitive onto the screen. +func (t *Table) Draw(screen tcell.Screen) { + t.Box.Draw(screen) + + // What's our available screen space? + x, y, width, height := t.GetInnerRect() + if t.borders { + t.visibleRows = height / 2 + } else { + t.visibleRows = height + } + + // Return the cell at the specified position (nil if it doesn't exist). + getCell := func(row, column int) *TableCell { + if row < 0 || column < 0 || row >= len(t.cells) || column >= len(t.cells[row]) { + return nil + } + return t.cells[row][column] + } + + // If this cell is not selectable, find the next one. + if t.rowsSelectable || t.columnsSelectable { + if t.selectedColumn < 0 { + t.selectedColumn = 0 + } + if t.selectedRow < 0 { + t.selectedRow = 0 + } + for t.selectedRow < len(t.cells) { + cell := getCell(t.selectedRow, t.selectedColumn) + if cell == nil || !cell.NotSelectable { + break + } + t.selectedColumn++ + if t.selectedColumn > t.lastColumn { + t.selectedColumn = 0 + t.selectedRow++ + } + } + } + + // Clamp row offsets. + if t.rowsSelectable { + if t.selectedRow >= t.fixedRows && t.selectedRow < t.fixedRows+t.rowOffset { + t.rowOffset = t.selectedRow - t.fixedRows + t.trackEnd = false + } + if t.borders { + if 2*(t.selectedRow+1-t.rowOffset) >= height { + t.rowOffset = t.selectedRow + 1 - height/2 + t.trackEnd = false + } + } else { + if t.selectedRow+1-t.rowOffset >= height { + t.rowOffset = t.selectedRow + 1 - height + t.trackEnd = false + } + } + } + if t.borders { + if 2*(len(t.cells)-t.rowOffset) < height { + t.trackEnd = true + } + } else { + if len(t.cells)-t.rowOffset < height { + t.trackEnd = true + } + } + if t.trackEnd { + if t.borders { + t.rowOffset = len(t.cells) - height/2 + } else { + t.rowOffset = len(t.cells) - height + } + } + if t.rowOffset < 0 { + t.rowOffset = 0 + } + + // Clamp column offset. (Only left side here. The right side is more + // difficult and we'll do it below.) + if t.columnsSelectable && t.selectedColumn >= t.fixedColumns && t.selectedColumn < t.fixedColumns+t.columnOffset { + t.columnOffset = t.selectedColumn - t.fixedColumns + } + if t.columnOffset < 0 { + t.columnOffset = 0 + } + if t.selectedColumn < 0 { + t.selectedColumn = 0 + } + + // Determine the indices and widths of the columns and rows which fit on the + // screen. + var ( + columns, rows, widths []int + tableHeight, tableWidth int + ) + rowStep := 1 + if t.borders { + rowStep = 2 // With borders, every table row takes two screen rows. + tableWidth = 1 // We start at the second character because of the left table border. + } + indexRow := func(row int) bool { // Determine if this row is visible, store its index. + if tableHeight >= height { + return false + } + rows = append(rows, row) + tableHeight += rowStep + return true + } + for row := 0; row < t.fixedRows && row < len(t.cells); row++ { // Do the fixed rows first. + if !indexRow(row) { + break + } + } + for row := t.fixedRows + t.rowOffset; row < len(t.cells); row++ { // Then the remaining rows. + if !indexRow(row) { + break + } + } + var ( + skipped, lastTableWidth, expansionTotal int + expansions []int + ) +ColumnLoop: + for column := 0; ; column++ { + // If we've moved beyond the right border, we stop or skip a column. + for tableWidth-1 >= width { // -1 because we include one extra column if the separator falls on the right end of the box. + // We've moved beyond the available space. + if column < t.fixedColumns { + break ColumnLoop // We're in the fixed area. We're done. + } + if !t.columnsSelectable && skipped >= t.columnOffset { + break ColumnLoop // There is no selection and we've already reached the offset. + } + if t.columnsSelectable && t.selectedColumn-skipped == t.fixedColumns { + break ColumnLoop // The selected column reached the leftmost point before disappearing. + } + if t.columnsSelectable && skipped >= t.columnOffset && + (t.selectedColumn < column && lastTableWidth < width-1 && tableWidth < width-1 || t.selectedColumn < column-1) { + break ColumnLoop // We've skipped as many as requested and the selection is visible. + } + if len(columns) <= t.fixedColumns { + break // Nothing to skip. + } + + // We need to skip a column. + skipped++ + lastTableWidth -= widths[t.fixedColumns] + 1 + tableWidth -= widths[t.fixedColumns] + 1 + columns = append(columns[:t.fixedColumns], columns[t.fixedColumns+1:]...) + widths = append(widths[:t.fixedColumns], widths[t.fixedColumns+1:]...) + expansions = append(expansions[:t.fixedColumns], expansions[t.fixedColumns+1:]...) + } + + // What's this column's width (without expansion)? + maxWidth := -1 + expansion := 0 + for _, row := range rows { + if cell := getCell(row, column); cell != nil { + _, _, _, _, cellWidth := decomposeString(cell.Text) + if cell.MaxWidth > 0 && cell.MaxWidth < cellWidth { + cellWidth = cell.MaxWidth + } + if cellWidth > maxWidth { + maxWidth = cellWidth + } + if cell.Expansion > expansion { + expansion = cell.Expansion + } + } + } + if maxWidth < 0 { + break // No more cells found in this column. + } + + // Store new column info at the end. + columns = append(columns, column) + widths = append(widths, maxWidth) + lastTableWidth = tableWidth + tableWidth += maxWidth + 1 + expansions = append(expansions, expansion) + expansionTotal += expansion + } + t.columnOffset = skipped + + // If we have space left, distribute it. + if tableWidth < width { + toDistribute := width - tableWidth + for index, expansion := range expansions { + if expansionTotal <= 0 { + break + } + expWidth := toDistribute * expansion / expansionTotal + widths[index] += expWidth + tableWidth += expWidth + toDistribute -= expWidth + expansionTotal -= expansion + } + } + + // Helper function which draws border runes. + borderStyle := tcell.StyleDefault.Background(t.backgroundColor).Foreground(t.bordersColor) + drawBorder := func(colX, rowY int, ch rune) { + screen.SetContent(x+colX, y+rowY, ch, nil, borderStyle) + } + + // Draw the cells (and borders). + var columnX int + if !t.borders { + columnX-- + } + for columnIndex, column := range columns { + columnWidth := widths[columnIndex] + for rowY, row := range rows { + if t.borders { + // Draw borders. + rowY *= 2 + for pos := 0; pos < columnWidth && columnX+1+pos < width; pos++ { + drawBorder(columnX+pos+1, rowY, GraphicsHoriBar) + } + ch := GraphicsCross + if columnIndex == 0 { + if rowY == 0 { + ch = GraphicsTopLeftCorner + } else { + ch = GraphicsLeftT + } + } else if rowY == 0 { + ch = GraphicsTopT + } + drawBorder(columnX, rowY, ch) + rowY++ + if rowY >= height { + break // No space for the text anymore. + } + drawBorder(columnX, rowY, GraphicsVertBar) + } else if columnIndex > 0 { + // Draw separator. + drawBorder(columnX, rowY, t.separator) + } + + // Get the cell. + cell := getCell(row, column) + if cell == nil { + continue + } + + // Draw text. + finalWidth := columnWidth + if columnX+1+columnWidth >= width { + finalWidth = width - columnX - 1 + } + cell.x, cell.y, cell.width = x+columnX+1, y+rowY, finalWidth + _, printed := printWithStyle(screen, cell.Text, x+columnX+1, y+rowY, finalWidth, cell.Align, tcell.StyleDefault.Foreground(cell.Color)|tcell.Style(cell.Attributes)) + if StringWidth(cell.Text)-printed > 0 && printed > 0 { + _, _, style, _ := screen.GetContent(x+columnX+1+finalWidth-1, y+rowY) + printWithStyle(screen, string(GraphicsEllipsis), x+columnX+1+finalWidth-1, y+rowY, 1, AlignLeft, style) + } + } + + // Draw bottom border. + if rowY := 2 * len(rows); t.borders && rowY < height { + for pos := 0; pos < columnWidth && columnX+1+pos < width; pos++ { + drawBorder(columnX+pos+1, rowY, GraphicsHoriBar) + } + ch := GraphicsBottomT + if columnIndex == 0 { + ch = GraphicsBottomLeftCorner + } + drawBorder(columnX, rowY, ch) + } + + columnX += columnWidth + 1 + } + + // Draw right border. + if t.borders && len(t.cells) > 0 && columnX < width { + for rowY := range rows { + rowY *= 2 + if rowY+1 < height { + drawBorder(columnX, rowY+1, GraphicsVertBar) + } + ch := GraphicsRightT + if rowY == 0 { + ch = GraphicsTopRightCorner + } + drawBorder(columnX, rowY, ch) + } + if rowY := 2 * len(rows); rowY < height { + drawBorder(columnX, rowY, GraphicsBottomRightCorner) + } + } + + // Helper function which colors the background of a box. + colorBackground := func(fromX, fromY, w, h int, backgroundColor, textColor tcell.Color, selected bool) { + for by := 0; by < h && fromY+by < y+height; by++ { + for bx := 0; bx < w && fromX+bx < x+width; bx++ { + m, c, style, _ := screen.GetContent(fromX+bx, fromY+by) + if selected { + fg, _, _ := style.Decompose() + if fg == textColor || fg == t.bordersColor { + fg = backgroundColor + } + if fg == tcell.ColorDefault { + fg = t.backgroundColor + } + style = style.Background(textColor).Foreground(fg) + } else { + if backgroundColor == tcell.ColorDefault { + continue + } + style = style.Background(backgroundColor) + } + screen.SetContent(fromX+bx, fromY+by, m, c, style) + } + } + } + + // Color the cell backgrounds. To avoid undesirable artefacts, we combine + // the drawing of a cell by background color, selected cells last. + cellsByBackgroundColor := make(map[tcell.Color][]*struct { + x, y, w, h int + text tcell.Color + selected bool + }) + var backgroundColors []tcell.Color + for rowY, row := range rows { + columnX := 0 + rowSelected := t.rowsSelectable && !t.columnsSelectable && row == t.selectedRow + for columnIndex, column := range columns { + columnWidth := widths[columnIndex] + cell := getCell(row, column) + if cell == nil { + continue + } + bx, by, bw, bh := x+columnX, y+rowY, columnWidth+1, 1 + if t.borders { + by = y + rowY*2 + bw++ + bh = 3 + } + columnSelected := t.columnsSelectable && !t.rowsSelectable && column == t.selectedColumn + cellSelected := !cell.NotSelectable && (columnSelected || rowSelected || t.rowsSelectable && t.columnsSelectable && column == t.selectedColumn && row == t.selectedRow) + entries, ok := cellsByBackgroundColor[cell.BackgroundColor] + cellsByBackgroundColor[cell.BackgroundColor] = append(entries, &struct { + x, y, w, h int + text tcell.Color + selected bool + }{ + x: bx, + y: by, + w: bw, + h: bh, + text: cell.Color, + selected: cellSelected, + }) + if !ok { + backgroundColors = append(backgroundColors, cell.BackgroundColor) + } + columnX += columnWidth + 1 + } + } + sort.Slice(backgroundColors, func(i int, j int) bool { + // Draw brightest colors last (i.e. on top). + r, g, b := backgroundColors[i].RGB() + c := colorful.Color{R: float64(r) / 255, G: float64(g) / 255, B: float64(b) / 255} + _, _, li := c.Hcl() + r, g, b = backgroundColors[j].RGB() + c = colorful.Color{R: float64(r) / 255, G: float64(g) / 255, B: float64(b) / 255} + _, _, lj := c.Hcl() + return li < lj + }) + for _, bgColor := range backgroundColors { + entries := cellsByBackgroundColor[bgColor] + for _, cell := range entries { + if cell.selected { + defer colorBackground(cell.x, cell.y, cell.w, cell.h, bgColor, cell.text, true) + } else { + colorBackground(cell.x, cell.y, cell.w, cell.h, bgColor, cell.text, false) + } + } + } +} + +// InputHandler returns the handler for this primitive. +func (t *Table) InputHandler() func(event *tcell.EventKey, setFocus func(p Primitive)) { + return t.WrapInputHandler(func(event *tcell.EventKey, setFocus func(p Primitive)) { + key := event.Key() + + if (!t.rowsSelectable && !t.columnsSelectable && key == tcell.KeyEnter) || + key == tcell.KeyEscape || + key == tcell.KeyTab || + key == tcell.KeyBacktab { + if t.done != nil { + t.done(key) + } + return + } + + // Movement functions. + previouslySelectedRow, previouslySelectedColumn := t.selectedRow, t.selectedColumn + var ( + getCell = func(row, column int) *TableCell { + if row < 0 || column < 0 || row >= len(t.cells) || column >= len(t.cells[row]) { + return nil + } + return t.cells[row][column] + } + + previous = func() { + for t.selectedRow >= 0 { + cell := getCell(t.selectedRow, t.selectedColumn) + if cell == nil || !cell.NotSelectable { + return + } + t.selectedColumn-- + if t.selectedColumn < 0 { + t.selectedColumn = t.lastColumn + t.selectedRow-- + } + } + } + + next = func() { + if t.selectedColumn > t.lastColumn { + t.selectedColumn = 0 + t.selectedRow++ + if t.selectedRow >= len(t.cells) { + t.selectedRow = len(t.cells) - 1 + } + } + for t.selectedRow < len(t.cells) { + cell := getCell(t.selectedRow, t.selectedColumn) + if cell == nil || !cell.NotSelectable { + return + } + t.selectedColumn++ + if t.selectedColumn > t.lastColumn { + t.selectedColumn = 0 + t.selectedRow++ + } + } + t.selectedColumn = t.lastColumn + t.selectedRow = len(t.cells) - 1 + previous() + } + + home = func() { + if t.rowsSelectable { + t.selectedRow = 0 + t.selectedColumn = 0 + next() + } else { + t.trackEnd = false + t.rowOffset = 0 + t.columnOffset = 0 + } + } + + end = func() { + if t.rowsSelectable { + t.selectedRow = len(t.cells) - 1 + t.selectedColumn = t.lastColumn + previous() + } else { + t.trackEnd = true + t.columnOffset = 0 + } + } + + down = func() { + if t.rowsSelectable { + t.selectedRow++ + if t.selectedRow >= len(t.cells) { + t.selectedRow = len(t.cells) - 1 + } + next() + } else { + t.rowOffset++ + } + } + + up = func() { + if t.rowsSelectable { + t.selectedRow-- + if t.selectedRow < 0 { + t.selectedRow = 0 + } + previous() + } else { + t.trackEnd = false + t.rowOffset-- + } + } + + left = func() { + if t.columnsSelectable { + t.selectedColumn-- + if t.selectedColumn < 0 { + t.selectedColumn = 0 + } + previous() + } else { + t.columnOffset-- + } + } + + right = func() { + if t.columnsSelectable { + t.selectedColumn++ + if t.selectedColumn > t.lastColumn { + t.selectedColumn = t.lastColumn + } + next() + } else { + t.columnOffset++ + } + } + + pageDown = func() { + if t.rowsSelectable { + t.selectedRow += t.visibleRows + if t.selectedRow >= len(t.cells) { + t.selectedRow = len(t.cells) - 1 + } + next() + } else { + t.rowOffset += t.visibleRows + } + } + + pageUp = func() { + if t.rowsSelectable { + t.selectedRow -= t.visibleRows + if t.selectedRow < 0 { + t.selectedRow = 0 + } + previous() + } else { + t.trackEnd = false + t.rowOffset -= t.visibleRows + } + } + ) + + switch key { + case tcell.KeyRune: + switch event.Rune() { + case 'g': + home() + case 'G': + end() + case 'j': + down() + case 'k': + up() + case 'h': + left() + case 'l': + right() + } + case tcell.KeyHome: + home() + case tcell.KeyEnd: + end() + case tcell.KeyUp: + up() + case tcell.KeyDown: + down() + case tcell.KeyLeft: + left() + case tcell.KeyRight: + right() + case tcell.KeyPgDn, tcell.KeyCtrlF: + pageDown() + case tcell.KeyPgUp, tcell.KeyCtrlB: + pageUp() + case tcell.KeyEnter: + if (t.rowsSelectable || t.columnsSelectable) && t.selected != nil { + t.selected(t.selectedRow, t.selectedColumn) + } + } + + // If the selection has changed, notify the handler. + if t.selectionChanged != nil && + (t.rowsSelectable && previouslySelectedRow != t.selectedRow || + t.columnsSelectable && previouslySelectedColumn != t.selectedColumn) { + t.selectionChanged(t.selectedRow, t.selectedColumn) + } + }) +} diff --git a/vendor/github.com/rivo/tview/textview.go b/vendor/github.com/rivo/tview/textview.go new file mode 100644 index 00000000..34197c34 --- /dev/null +++ b/vendor/github.com/rivo/tview/textview.go @@ -0,0 +1,966 @@ +package tview + +import ( + "bytes" + "fmt" + "regexp" + "sync" + "unicode/utf8" + + "github.com/gdamore/tcell" + colorful "github.com/lucasb-eyer/go-colorful" + runewidth "github.com/mattn/go-runewidth" +) + +// TabSize is the number of spaces with which a tab character will be replaced. +var TabSize = 4 + +// textViewIndex contains information about each line displayed in the text +// view. +type textViewIndex struct { + Line int // The index into the "buffer" variable. + Pos int // The index into the "buffer" string (byte position). + NextPos int // The (byte) index of the next character in this buffer line. + Width int // The screen width of this line. + ForegroundColor string // The starting foreground color ("" = don't change, "-" = reset). + BackgroundColor string // The starting background color ("" = don't change, "-" = reset). + Attributes string // The starting attributes ("" = don't change, "-" = reset). + Region string // The starting region ID. +} + +// TextView is a box which displays text. It implements the io.Writer interface +// so you can stream text to it. This does not trigger a redraw automatically +// but if a handler is installed via SetChangedFunc(), you can cause it to be +// redrawn. +// +// Navigation +// +// If the text view is scrollable (the default), text is kept in a buffer which +// may be larger than the screen and can be navigated similarly to Vim: +// +// - h, left arrow: Move left. +// - l, right arrow: Move right. +// - j, down arrow: Move down. +// - k, up arrow: Move up. +// - g, home: Move to the top. +// - G, end: Move to the bottom. +// - Ctrl-F, page down: Move down by one page. +// - Ctrl-B, page up: Move up by one page. +// +// If the text is not scrollable, any text above the top visible line is +// discarded. +// +// Use SetInputCapture() to override or modify keyboard input. +// +// Colors +// +// If dynamic colors are enabled via SetDynamicColors(), text color can be +// changed dynamically by embedding color strings in square brackets. This works +// the same way as anywhere else. Please see the package documentation for more +// information. +// +// Regions and Highlights +// +// If regions are enabled via SetRegions(), you can define text regions within +// the text and assign region IDs to them. Text regions start with region tags. +// Region tags are square brackets that contain a region ID in double quotes, +// for example: +// +// We define a ["rg"]region[""] here. +// +// A text region ends with the next region tag. Tags with no region ID ([""]) +// don't start new regions. They can therefore be used to mark the end of a +// region. Region IDs must satisfy the following regular expression: +// +// [a-zA-Z0-9_,;: \-\.]+ +// +// Regions can be highlighted by calling the Highlight() function with one or +// more region IDs. This can be used to display search results, for example. +// +// The ScrollToHighlight() function can be used to jump to the currently +// highlighted region once when the text view is drawn the next time. +// +// See https://github.com/rivo/tview/wiki/TextView for an example. +type TextView struct { + sync.Mutex + *Box + + // The text buffer. + buffer []string + + // The last bytes that have been received but are not part of the buffer yet. + recentBytes []byte + + // The processed line index. This is nil if the buffer has changed and needs + // to be re-indexed. + index []*textViewIndex + + // The text alignment, one of AlignLeft, AlignCenter, or AlignRight. + align int + + // Indices into the "index" slice which correspond to the first line of the + // first highlight and the last line of the last highlight. This is calculated + // during re-indexing. Set to -1 if there is no current highlight. + fromHighlight, toHighlight int + + // A set of region IDs that are currently highlighted. + highlights map[string]struct{} + + // The last width for which the current table is drawn. + lastWidth int + + // The screen width of the longest line in the index (not the buffer). + longestLine int + + // The index of the first line shown in the text view. + lineOffset int + + // If set to true, the text view will always remain at the end of the content. + trackEnd bool + + // The number of characters to be skipped on each line (not in wrap mode). + columnOffset int + + // The height of the content the last time the text view was drawn. + pageSize int + + // If set to true, the text view will keep a buffer of text which can be + // navigated when the text is longer than what fits into the box. + scrollable bool + + // If set to true, lines that are longer than the available width are wrapped + // onto the next line. If set to false, any characters beyond the available + // width are discarded. + wrap bool + + // If set to true and if wrap is also true, lines are split at spaces or + // after punctuation characters. + wordWrap bool + + // The (starting) color of the text. + textColor tcell.Color + + // If set to true, the text color can be changed dynamically by piping color + // strings in square brackets to the text view. + dynamicColors bool + + // If set to true, region tags can be used to define regions. + regions bool + + // A temporary flag which, when true, will automatically bring the current + // highlight(s) into the visible screen. + scrollToHighlights bool + + // An optional function which is called when the content of the text view has + // changed. + changed func() + + // An optional function which is called when the user presses one of the + // following keys: Escape, Enter, Tab, Backtab. + done func(tcell.Key) +} + +// NewTextView returns a new text view. +func NewTextView() *TextView { + return &TextView{ + Box: NewBox(), + highlights: make(map[string]struct{}), + lineOffset: -1, + scrollable: true, + align: AlignLeft, + wrap: true, + textColor: Styles.PrimaryTextColor, + dynamicColors: false, + } +} + +// SetScrollable sets the flag that decides whether or not the text view is +// scrollable. If true, text is kept in a buffer and can be navigated. +func (t *TextView) SetScrollable(scrollable bool) *TextView { + t.scrollable = scrollable + if !scrollable { + t.trackEnd = true + } + return t +} + +// SetWrap sets the flag that, if true, leads to lines that are longer than the +// available width being wrapped onto the next line. If false, any characters +// beyond the available width are not displayed. +func (t *TextView) SetWrap(wrap bool) *TextView { + if t.wrap != wrap { + t.index = nil + } + t.wrap = wrap + return t +} + +// SetWordWrap sets the flag that, if true and if the "wrap" flag is also true +// (see SetWrap()), wraps the line at spaces or after punctuation marks. Note +// that trailing spaces will not be printed. +// +// This flag is ignored if the "wrap" flag is false. +func (t *TextView) SetWordWrap(wrapOnWords bool) *TextView { + if t.wordWrap != wrapOnWords { + t.index = nil + } + t.wordWrap = wrapOnWords + return t +} + +// SetTextAlign sets the text alignment within the text view. This must be +// either AlignLeft, AlignCenter, or AlignRight. +func (t *TextView) SetTextAlign(align int) *TextView { + if t.align != align { + t.index = nil + } + t.align = align + return t +} + +// SetTextColor sets the initial color of the text (which can be changed +// dynamically by sending color strings in square brackets to the text view if +// dynamic colors are enabled). +func (t *TextView) SetTextColor(color tcell.Color) *TextView { + t.textColor = color + return t +} + +// SetText sets the text of this text view to the provided string. Previously +// contained text will be removed. +func (t *TextView) SetText(text string) *TextView { + t.Clear() + fmt.Fprint(t, text) + return t +} + +// SetDynamicColors sets the flag that allows the text color to be changed +// dynamically. See class description for details. +func (t *TextView) SetDynamicColors(dynamic bool) *TextView { + if t.dynamicColors != dynamic { + t.index = nil + } + t.dynamicColors = dynamic + return t +} + +// SetRegions sets the flag that allows to define regions in the text. See class +// description for details. +func (t *TextView) SetRegions(regions bool) *TextView { + if t.regions != regions { + t.index = nil + } + t.regions = regions + return t +} + +// SetChangedFunc sets a handler function which is called when the text of the +// text view has changed. This is typically used to cause the application to +// redraw the screen. +func (t *TextView) SetChangedFunc(handler func()) *TextView { + t.changed = handler + return t +} + +// SetDoneFunc sets a handler which is called when the user presses on the +// following keys: Escape, Enter, Tab, Backtab. The key is passed to the +// handler. +func (t *TextView) SetDoneFunc(handler func(key tcell.Key)) *TextView { + t.done = handler + return t +} + +// ScrollTo scrolls to the specified row and column (both starting with 0). +func (t *TextView) ScrollTo(row, column int) *TextView { + if !t.scrollable { + return t + } + t.lineOffset = row + t.columnOffset = column + return t +} + +// ScrollToBeginning scrolls to the top left corner of the text if the text view +// is scrollable. +func (t *TextView) ScrollToBeginning() *TextView { + if !t.scrollable { + return t + } + t.trackEnd = false + t.lineOffset = 0 + t.columnOffset = 0 + return t +} + +// ScrollToEnd scrolls to the bottom left corner of the text if the text view +// is scrollable. Adding new rows to the end of the text view will cause it to +// scroll with the new data. +func (t *TextView) ScrollToEnd() *TextView { + if !t.scrollable { + return t + } + t.trackEnd = true + t.columnOffset = 0 + return t +} + +// Clear removes all text from the buffer. +func (t *TextView) Clear() *TextView { + t.buffer = nil + t.recentBytes = nil + t.index = nil + return t +} + +// Highlight specifies which regions should be highlighted. See class +// description for details on regions. Empty region strings are ignored. +// +// Text in highlighted regions will be drawn inverted, i.e. with their +// background and foreground colors swapped. +// +// Calling this function will remove any previous highlights. To remove all +// highlights, call this function without any arguments. +func (t *TextView) Highlight(regionIDs ...string) *TextView { + t.highlights = make(map[string]struct{}) + for _, id := range regionIDs { + if id == "" { + continue + } + t.highlights[id] = struct{}{} + } + t.index = nil + return t +} + +// GetHighlights returns the IDs of all currently highlighted regions. +func (t *TextView) GetHighlights() (regionIDs []string) { + for id := range t.highlights { + regionIDs = append(regionIDs, id) + } + return +} + +// ScrollToHighlight will cause the visible area to be scrolled so that the +// highlighted regions appear in the visible area of the text view. This +// repositioning happens the next time the text view is drawn. It happens only +// once so you will need to call this function repeatedly to always keep +// highlighted regions in view. +// +// Nothing happens if there are no highlighted regions or if the text view is +// not scrollable. +func (t *TextView) ScrollToHighlight() *TextView { + if len(t.highlights) == 0 || !t.scrollable || !t.regions { + return t + } + t.index = nil + t.scrollToHighlights = true + t.trackEnd = false + return t +} + +// GetRegionText returns the text of the region with the given ID. If dynamic +// colors are enabled, color tags are stripped from the text. Newlines are +// always returned as '\n' runes. +// +// If the region does not exist or if regions are turned off, an empty string +// is returned. +func (t *TextView) GetRegionText(regionID string) string { + if !t.regions || regionID == "" { + return "" + } + + var ( + buffer bytes.Buffer + currentRegionID string + ) + + for _, str := range t.buffer { + // Find all color tags in this line. + var colorTagIndices [][]int + if t.dynamicColors { + colorTagIndices = colorPattern.FindAllStringIndex(str, -1) + } + + // Find all regions in this line. + var ( + regionIndices [][]int + regions [][]string + ) + if t.regions { + regionIndices = regionPattern.FindAllStringIndex(str, -1) + regions = regionPattern.FindAllStringSubmatch(str, -1) + } + + // Analyze this line. + var currentTag, currentRegion int + for pos, ch := range str { + // Skip any color tags. + if currentTag < len(colorTagIndices) && pos >= colorTagIndices[currentTag][0] && pos < colorTagIndices[currentTag][1] { + if pos == colorTagIndices[currentTag][1]-1 { + currentTag++ + } + continue + } + + // Skip any regions. + if currentRegion < len(regionIndices) && pos >= regionIndices[currentRegion][0] && pos < regionIndices[currentRegion][1] { + if pos == regionIndices[currentRegion][1]-1 { + if currentRegionID == regionID { + // This is the end of the requested region. We're done. + return buffer.String() + } + currentRegionID = regions[currentRegion][1] + currentRegion++ + } + continue + } + + // Add this rune. + if currentRegionID == regionID { + buffer.WriteRune(ch) + } + } + + // Add newline. + if currentRegionID == regionID { + buffer.WriteRune('\n') + } + } + + return escapePattern.ReplaceAllString(buffer.String(), `[$1$2]`) +} + +// Write lets us implement the io.Writer interface. Tab characters will be +// replaced with TabSize space characters. A "\n" or "\r\n" will be interpreted +// as a new line. +func (t *TextView) Write(p []byte) (n int, err error) { + // Notify at the end. + if t.changed != nil { + defer t.changed() + } + + t.Lock() + defer t.Unlock() + + // Copy data over. + newBytes := append(t.recentBytes, p...) + t.recentBytes = nil + + // If we have a trailing invalid UTF-8 byte, we'll wait. + if r, _ := utf8.DecodeLastRune(p); r == utf8.RuneError { + t.recentBytes = newBytes + return len(p), nil + } + + // If we have a trailing open dynamic color, exclude it. + if t.dynamicColors { + openColor := regexp.MustCompile(`\[([a-zA-Z]*|#[0-9a-zA-Z]*)$`) + location := openColor.FindIndex(newBytes) + if location != nil { + t.recentBytes = newBytes[location[0]:] + newBytes = newBytes[:location[0]] + } + } + + // If we have a trailing open region, exclude it. + if t.regions { + openRegion := regexp.MustCompile(`\["[a-zA-Z0-9_,;: \-\.]*"?$`) + location := openRegion.FindIndex(newBytes) + if location != nil { + t.recentBytes = newBytes[location[0]:] + newBytes = newBytes[:location[0]] + } + } + + // Transform the new bytes into strings. + newLine := regexp.MustCompile(`\r?\n`) + newBytes = bytes.Replace(newBytes, []byte{'\t'}, bytes.Repeat([]byte{' '}, TabSize), -1) + for index, line := range newLine.Split(string(newBytes), -1) { + if index == 0 { + if len(t.buffer) == 0 { + t.buffer = []string{line} + } else { + t.buffer[len(t.buffer)-1] += line + } + } else { + t.buffer = append(t.buffer, line) + } + } + + // Reset the index. + t.index = nil + + return len(p), nil +} + +// reindexBuffer re-indexes the buffer such that we can use it to easily draw +// the buffer onto the screen. Each line in the index will contain a pointer +// into the buffer from which on we will print text. It will also contain the +// color with which the line starts. +func (t *TextView) reindexBuffer(width int) { + if t.index != nil { + return // Nothing has changed. We can still use the current index. + } + t.index = nil + t.fromHighlight, t.toHighlight = -1, -1 + + // If there's no space, there's no index. + if width < 1 { + return + } + + // Initial states. + regionID := "" + var highlighted bool + + // Go through each line in the buffer. + for bufferIndex, str := range t.buffer { + // Find all color tags in this line. Then remove them. + var ( + colorTagIndices [][]int + colorTags [][]string + escapeIndices [][]int + ) + if t.dynamicColors { + colorTagIndices, colorTags, escapeIndices, str, _ = decomposeString(str) + } + + // Find all regions in this line. Then remove them. + var ( + regionIndices [][]int + regions [][]string + ) + if t.regions { + regionIndices = regionPattern.FindAllStringIndex(str, -1) + regions = regionPattern.FindAllStringSubmatch(str, -1) + str = regionPattern.ReplaceAllString(str, "") + if !t.dynamicColors { + // We haven't detected escape tags yet. Do it now. + escapeIndices = escapePattern.FindAllStringIndex(str, -1) + str = escapePattern.ReplaceAllString(str, "[$1$2]") + } + } + + // Split the line if required. + var splitLines []string + if t.wrap && len(str) > 0 { + for len(str) > 0 { + extract := runewidth.Truncate(str, width, "") + if t.wordWrap && len(extract) < len(str) { + // Add any spaces from the next line. + if spaces := spacePattern.FindStringIndex(str[len(extract):]); spaces != nil && spaces[0] == 0 { + extract = str[:len(extract)+spaces[1]] + } + + // Can we split before the mandatory end? + matches := boundaryPattern.FindAllStringIndex(extract, -1) + if len(matches) > 0 { + // Yes. Let's split there. + extract = extract[:matches[len(matches)-1][1]] + } + } + splitLines = append(splitLines, extract) + str = str[len(extract):] + } + } else { + // No need to split the line. + splitLines = []string{str} + } + + // Create index from split lines. + var ( + originalPos, colorPos, regionPos, escapePos int + foregroundColor, backgroundColor, attributes string + ) + for _, splitLine := range splitLines { + line := &textViewIndex{ + Line: bufferIndex, + Pos: originalPos, + ForegroundColor: foregroundColor, + BackgroundColor: backgroundColor, + Attributes: attributes, + Region: regionID, + } + + // Shift original position with tags. + lineLength := len(splitLine) + for { + if colorPos < len(colorTagIndices) && colorTagIndices[colorPos][0] <= originalPos+lineLength { + // Process color tags. + originalPos += colorTagIndices[colorPos][1] - colorTagIndices[colorPos][0] + foregroundColor, backgroundColor, attributes = styleFromTag(foregroundColor, backgroundColor, attributes, colorTags[colorPos]) + colorPos++ + } else if regionPos < len(regionIndices) && regionIndices[regionPos][0] <= originalPos+lineLength { + // Process region tags. + originalPos += regionIndices[regionPos][1] - regionIndices[regionPos][0] + regionID = regions[regionPos][1] + _, highlighted = t.highlights[regionID] + + // Update highlight range. + if highlighted { + line := len(t.index) + if t.fromHighlight < 0 { + t.fromHighlight, t.toHighlight = line, line + } else if line > t.toHighlight { + t.toHighlight = line + } + } + + regionPos++ + } else if escapePos < len(escapeIndices) && escapeIndices[escapePos][0] <= originalPos+lineLength { + // Process escape tags. + originalPos++ + escapePos++ + } else { + break + } + } + + // Advance to next line. + originalPos += lineLength + + // Append this line. + line.NextPos = originalPos + line.Width = runewidth.StringWidth(splitLine) + t.index = append(t.index, line) + } + + // Word-wrapped lines may have trailing whitespace. Remove it. + if t.wrap && t.wordWrap { + for _, line := range t.index { + str := t.buffer[line.Line][line.Pos:line.NextPos] + spaces := spacePattern.FindAllStringIndex(str, -1) + if spaces != nil && spaces[len(spaces)-1][1] == len(str) { + oldNextPos := line.NextPos + line.NextPos -= spaces[len(spaces)-1][1] - spaces[len(spaces)-1][0] + line.Width -= runewidth.StringWidth(t.buffer[line.Line][line.NextPos:oldNextPos]) + } + } + } + } + + // Calculate longest line. + t.longestLine = 0 + for _, line := range t.index { + if line.Width > t.longestLine { + t.longestLine = line.Width + } + } +} + +// Draw draws this primitive onto the screen. +func (t *TextView) Draw(screen tcell.Screen) { + t.Lock() + defer t.Unlock() + t.Box.Draw(screen) + + // Get the available size. + x, y, width, height := t.GetInnerRect() + t.pageSize = height + + // If the width has changed, we need to reindex. + if width != t.lastWidth { + t.index = nil + } + t.lastWidth = width + + // Re-index. + t.reindexBuffer(width) + + // If we don't have an index, there's nothing to draw. + if t.index == nil { + return + } + + // Move to highlighted regions. + if t.regions && t.scrollToHighlights && t.fromHighlight >= 0 { + // Do we fit the entire height? + if t.toHighlight-t.fromHighlight+1 < height { + // Yes, let's center the highlights. + t.lineOffset = (t.fromHighlight + t.toHighlight - height) / 2 + } else { + // No, let's move to the start of the highlights. + t.lineOffset = t.fromHighlight + } + } + t.scrollToHighlights = false + + // Adjust line offset. + if t.lineOffset+height > len(t.index) { + t.trackEnd = true + } + if t.trackEnd { + t.lineOffset = len(t.index) - height + } + if t.lineOffset < 0 { + t.lineOffset = 0 + } + + // Adjust column offset. + if t.align == AlignLeft { + if t.columnOffset+width > t.longestLine { + t.columnOffset = t.longestLine - width + } + if t.columnOffset < 0 { + t.columnOffset = 0 + } + } else if t.align == AlignRight { + if t.columnOffset-width < -t.longestLine { + t.columnOffset = width - t.longestLine + } + if t.columnOffset > 0 { + t.columnOffset = 0 + } + } else { // AlignCenter. + half := (t.longestLine - width) / 2 + if half > 0 { + if t.columnOffset > half { + t.columnOffset = half + } + if t.columnOffset < -half { + t.columnOffset = -half + } + } else { + t.columnOffset = 0 + } + } + + // Draw the buffer. + defaultStyle := tcell.StyleDefault.Foreground(t.textColor) + for line := t.lineOffset; line < len(t.index); line++ { + // Are we done? + if line-t.lineOffset >= height { + break + } + + // Get the text for this line. + index := t.index[line] + text := t.buffer[index.Line][index.Pos:index.NextPos] + foregroundColor := index.ForegroundColor + backgroundColor := index.BackgroundColor + attributes := index.Attributes + regionID := index.Region + + // Get color tags. + var ( + colorTagIndices [][]int + colorTags [][]string + escapeIndices [][]int + ) + if t.dynamicColors { + colorTagIndices, colorTags, escapeIndices, _, _ = decomposeString(text) + } + + // Get regions. + var ( + regionIndices [][]int + regions [][]string + ) + if t.regions { + regionIndices = regionPattern.FindAllStringIndex(text, -1) + regions = regionPattern.FindAllStringSubmatch(text, -1) + if !t.dynamicColors { + escapeIndices = escapePattern.FindAllStringIndex(text, -1) + } + } + + // Calculate the position of the line. + var skip, posX int + if t.align == AlignLeft { + posX = -t.columnOffset + } else if t.align == AlignRight { + posX = width - index.Width - t.columnOffset + } else { // AlignCenter. + posX = (width-index.Width)/2 - t.columnOffset + } + if posX < 0 { + skip = -posX + posX = 0 + } + + // Print the line. + var currentTag, currentRegion, currentEscapeTag, skipped, runeSeqWidth int + runeSequence := make([]rune, 0, 10) + flush := func() { + if len(runeSequence) == 0 { + return + } + + // Mix the existing style with the new style. + _, _, existingStyle, _ := screen.GetContent(x+posX, y+line-t.lineOffset) + _, background, _ := existingStyle.Decompose() + style := overlayStyle(background, defaultStyle, foregroundColor, backgroundColor, attributes) + + // Do we highlight this character? + var highlighted bool + if len(regionID) > 0 { + if _, ok := t.highlights[regionID]; ok { + highlighted = true + } + } + if highlighted { + fg, bg, _ := style.Decompose() + if bg == tcell.ColorDefault { + r, g, b := fg.RGB() + c := colorful.Color{R: float64(r) / 255, G: float64(g) / 255, B: float64(b) / 255} + _, _, li := c.Hcl() + if li < .5 { + bg = tcell.ColorWhite + } else { + bg = tcell.ColorBlack + } + } + style = style.Background(fg).Foreground(bg) + } + + // Draw the character. + var comb []rune + if len(runeSequence) > 1 { + // Allocate space for the combining characters only when necessary. + comb = make([]rune, len(runeSequence)-1) + copy(comb, runeSequence[1:]) + } + for offset := 0; offset < runeSeqWidth; offset++ { + screen.SetContent(x+posX+offset, y+line-t.lineOffset, runeSequence[0], comb, style) + } + + // Advance. + posX += runeSeqWidth + runeSequence = runeSequence[:0] + runeSeqWidth = 0 + } + for pos, ch := range text { + // Get the color. + if currentTag < len(colorTags) && pos >= colorTagIndices[currentTag][0] && pos < colorTagIndices[currentTag][1] { + flush() + if pos == colorTagIndices[currentTag][1]-1 { + foregroundColor, backgroundColor, attributes = styleFromTag(foregroundColor, backgroundColor, attributes, colorTags[currentTag]) + currentTag++ + } + continue + } + + // Get the region. + if currentRegion < len(regionIndices) && pos >= regionIndices[currentRegion][0] && pos < regionIndices[currentRegion][1] { + flush() + if pos == regionIndices[currentRegion][1]-1 { + regionID = regions[currentRegion][1] + currentRegion++ + } + continue + } + + // Skip the second-to-last character of an escape tag. + if currentEscapeTag < len(escapeIndices) && pos >= escapeIndices[currentEscapeTag][0] && pos < escapeIndices[currentEscapeTag][1] { + flush() + if pos == escapeIndices[currentEscapeTag][1]-1 { + currentEscapeTag++ + } else if pos == escapeIndices[currentEscapeTag][1]-2 { + continue + } + } + + // Determine the width of this rune. + chWidth := runewidth.RuneWidth(ch) + if chWidth == 0 { + // If this is not a modifier, we treat it as a space character. + if len(runeSequence) == 0 { + ch = ' ' + chWidth = 1 + } else { + runeSequence = append(runeSequence, ch) + continue + } + } + + // Skip to the right. + if !t.wrap && skipped < skip { + skipped += chWidth + continue + } + + // Stop at the right border. + if posX+runeSeqWidth+chWidth > width { + break + } + + // Flush the rune sequence. + flush() + + // Queue this rune. + runeSequence = append(runeSequence, ch) + runeSeqWidth += chWidth + } + if posX+runeSeqWidth <= width { + flush() + } + } + + // If this view is not scrollable, we'll purge the buffer of lines that have + // scrolled out of view. + if !t.scrollable && t.lineOffset > 0 { + t.buffer = t.buffer[t.index[t.lineOffset].Line:] + t.index = nil + } +} + +// InputHandler returns the handler for this primitive. +func (t *TextView) InputHandler() func(event *tcell.EventKey, setFocus func(p Primitive)) { + return t.WrapInputHandler(func(event *tcell.EventKey, setFocus func(p Primitive)) { + key := event.Key() + + if key == tcell.KeyEscape || key == tcell.KeyEnter || key == tcell.KeyTab || key == tcell.KeyBacktab { + if t.done != nil { + t.done(key) + } + return + } + + if !t.scrollable { + return + } + + switch key { + case tcell.KeyRune: + switch event.Rune() { + case 'g': // Home. + t.trackEnd = false + t.lineOffset = 0 + t.columnOffset = 0 + case 'G': // End. + t.trackEnd = true + t.columnOffset = 0 + case 'j': // Down. + t.lineOffset++ + case 'k': // Up. + t.trackEnd = false + t.lineOffset-- + case 'h': // Left. + t.columnOffset-- + case 'l': // Right. + t.columnOffset++ + } + case tcell.KeyHome: + t.trackEnd = false + t.lineOffset = 0 + t.columnOffset = 0 + case tcell.KeyEnd: + t.trackEnd = true + t.columnOffset = 0 + case tcell.KeyUp: + t.trackEnd = false + t.lineOffset-- + case tcell.KeyDown: + t.lineOffset++ + case tcell.KeyLeft: + t.columnOffset-- + case tcell.KeyRight: + t.columnOffset++ + case tcell.KeyPgDn, tcell.KeyCtrlF: + t.lineOffset += t.pageSize + case tcell.KeyPgUp, tcell.KeyCtrlB: + t.trackEnd = false + t.lineOffset -= t.pageSize + } + }) +} diff --git a/vendor/github.com/rivo/tview/tview.gif b/vendor/github.com/rivo/tview/tview.gif new file mode 100644 index 0000000000000000000000000000000000000000..0583d7b95ca4da412e5d7491221366a1a3f7d64b GIT binary patch literal 2226085 zcmXVXd00&E|NfadGjnF9W@+DR+GscJi@(%HizI}ez@43!({yf*Yp67Kx_v^Xu`w0mP_V7%Bk#`V3F;w9H z4;0|x33$_i*ww%SfB-;*y*okRg!8-vT9WoF@7zPFC-zt$>wJ2M69}+hPnerLzAT8;i*xot#S9R z7LchG8>vkqYHMk0Yh$%_40HiN*Bq-G6RU5yMBhJ9KYE3Mu8u)im?2`np#jR!z}V2n z&S*`L@iI3Pu)xIJiejWiF*c!?n403SW+sN_%jp*8Iu=WC7Or%QoE%Hww57$8B_;+- z$|{yx*;oO9wXLfS&}-x5ZmUvnYo%vv57-tK+5!D`z@Qx*3nAL0J03a?N8y^#$ zuzGbu{My9Wkafwx`gL0C*QGHxU{jcOsp*^2)+MEFQc1_EY>2wE(f{414H=uas%*(d zXKu>aw%u;~jvUtZ9a)(fS=%zRx3A33bjNp8Ue({GyOO$shLa&V!3~ zaf>)yA;{zL`8+#5-BU%g-Lfat=ZgSAH+NXL#IJ$AxH3?Rf!=NlSMHa0R^TF#$8Cpmw~v*XIO zPHAUvPfvf}z@tZxoS0|APsDT>uQQ zD4Imv$-`>cB=t)gx&>tO@cPh;jlJc%&RfR%FE;g6Q3A>g!!Did|nzeEPvr`)Fd%z~$ygCulspQFwbx-?88WHpzqStxua7yUi-Yubg>yHvaOKbDp_p zUtC~zml=I-w;jEl@$^jc{auZtS6P#T$0BM!zPiEw_tWe9KU)Uxz@Un;-JHXCw@}0O z-j=$C#rZK$^I?fQ5qI&{5pOatW%+Ze9Ot#z*O}piEeN*Tw!_Q~#d{-`M*1*v-rcQ- zOypwv)h%O?LCl-OPrfT(U0%IPHb!P|A2>@`75^AUcD6#s8pF(A7XhNKOU43aZX}Pc zin+dXhxpI6ynaH@HHfm-TiN>fM7h21E%^qS$kjbDtF5$I-+yRxT;lGB4>pQ+|5iI> zLf5QI!9fRQ4G4@OAcnN3aje4yZw?2OAw%IDa~D*>z!GfRm~YdpixmK5z6DODBV~_q zDo#il*XFc5<-~?-&qA5}^k*5#SZzg0!0wx;bmawrjIEyy#4j}~1?I&9b=2$7Q$kHE zBnlES7)E^bcWF@WtmEO4{VE4HmH7OqtA6C7?+y5ay;GO5u!Xu~l+Rbu<$G-Fu3z!C z|LI!m=S|@x8W2h3kF5j5n<{;yRRj6Hf4#f?x3*bt{*W-yurLDPcMgq55Z|5>nn9H5 zL3)MlbfRAN9qs$J`Err1w^WdQRp9+m)OyUiU6x$&Wu-STnShCb#Y$W4& z|C%!8d-nigWWqmFmm$C^4s%%JcY*VL-)R{j1zkNDM?iDok7V?toQqwRnlj0!9ec9? zzVCpG6uHk%CWpbUv8SNQSzl=<^{uWQO~t{?hQQeD zk|BDIL<5&(ZYrV~{K05BxhG!e_ohwsF3N1<%p>c=IgFQlyUVU$ z=rsu;Ep{c^R(=ZEQ1{mJzdrU7_p1A+f?9;T1`0ob+Aky~-vw=fa_8+S< z0fuB%4m0TTem{QTwj)B`>{Im4yQ6PjjA9;#a=d?_E_Pl2)e_|PEv58`eV6eb584j@ zDgK_>G?N8MFzBCB=GenCwrvsk-V>{=VNp~bNd@Y00J2bKt~Mn~D)4vVGNvc>`PeRS zBce2Hx=HJXtj{65le9yOHGC_pv03{Cori3dS2XXM_S!EH2Aq zf5u*&3-QUBu|gR7o9q??mOo}%^(*9#b%PJF^K|@-Ax!QPhTN%8t8&PY8qP6~eRd%) z&+nNu8K))wqrUs#tmz8GEy?It2O7fmy&Q?OGS<`rjuSJ^Agt5@+i&B|!Bc6P8{>QR zipA}|o28hHlQgd{x(m3%$nz0Ivea2YH#_J;(^`;~VB%=zTfPOA9zGN0bwjNw*R*?k zP21>k?~9CsVrYG!2VnH~F+N`&pgt)Rkn*Y6%=t+p7cyX`R6_%lR1=X@djo3J5U!w5XN+xYAx9AZE&DO3&6n349`&5f6t zEXV>(s@Wm7&ly$uvrNJxS)YZ&>8b-uy7jMy5y-!12x%SudcWfXjITIW7PTWa=cyRT zinEU$$VE4s2kPDGL<_4QTnh38@+Zhp{`P8iQaf!3pn4nh=p6NG0-A>plMF_h)PD(e zZ03)WEbGSGo5TR#|14rVD*#xk=(BFysb{9_*0jx-_5_a<7uIm94hAhtrbZY8bEYO^ zb0)5*H<41wJuA8I4(_d&6AReonnc|`-`NII&TyyU@_Qi`035mF8U3{Pn-HgX_z0&r z%H)=Aw-39mDxt3H-n=k`e2I~?<0As4zr5iu+8_m65KP#0qAV@_2H|G6a*bflUAkXaenYH?bL) zWb`Rm|G6O(A3I`gn!z;sJjSd_+g}=~o&xjVA!J1-@@a!7GR4_wb*^K4YF)Mwv}TJ-7qV4K7|k>1 zB7tU^!#DaeqZi2aWOOtGy@ulCHVIsdBmKo>zJ*C|<*a3wO{Xtzd)8+#Oh-I=f`24K z5+sf;fVnLUDQJ*WjoJKTOI=3d+br|(21J>V{cPc)vr4<6Ta%%{%9yAG>;b328Cwy@ z`O8y|?hJ>VN^dhv4}g7+>MxGLmHx0M0zb>Hu{+R1SE|vwT*hZ`2^4FHwy>R z<3(auD|P%A7U@*u&U+2{MuO}^9F;E&n+0{!iEM@$-yV6{xZyePV-{HvZMdSHJlTMs zq>&S!k{hvQW*mbvG-6@xPT_)>bVz0(YQU35UGAsoyKJ&N`=ScEXxusj%qp$E#*j6| zgoLI7baXXRjq&#&5h+Ifkm4ooCS%dKGB=+}xd|YT%7@u=b;NJ-glZ=9A>GQ zG%q&Axb8ihVzlQ8LDY$?WT{+WVwO+he#umltN`<$0E4RXTZY>}MFs-+%VIo<0sWTI z#WFS$sD06e2xQ=|QgFV~-AEQLMS^sZfrk^Y9WwlA90NeoggYe4b3Ak1f{^bak5P&!&!){~-Uy(pY6x4Ag{*V;86r*~UiK8=(_J~M+ z(vWZ}zK4k$9tRYZ1Y3%geon5vAfYP7sQ5XOE;r56@QntH$7D;NH|twx<9~~xS%l}b zoYVnB|4B)6O40~yybUI;kx;)#NMB_h$(ObPV$vf9W_v`7vt`Lm<1K?s|QVls+(O@kQ zG2$6m8YNOF!_SLVzS2lEX3BXQB7%zPkdX3exCQx+7#LwsLFWL3$Gr$SndGOWdjuh3 z0#H@IQ`Rtz`j52fKL&*Fh>0aGdQ^~4BYvmhev6Yk#H2UQF>hk9e_)mUv{v*>?uAL> z6#2R{uy}?=MX*pdbiYz5i7$5LFD?TO`=4x$Ihk}%jGzF-pDf%h327WAbrcPn&h!<#=2Q`+pYMblAXjD6c-ytw$2Ifl)&WTAe!KCwIl30q!m65gr zz&4rhKA-w@^buIzUNINg-lkSwLC`5%MW~+#)C!}6*5nnxX#hs`m^!5^IO5%Ua zRdaIucO{{=lXRVios)R9YvTWk1*mbnZ5yc+0A?7ZGaT$ZIRg0s6?x@){b#irI_bS~ z|2b;!lJ?HfSnRwUB2Z&u#R!L!J>#-9SuN_Wla`iR;on(=$p$?I2l~6f=mKQmZ^nV2 z6q7Gf6$n5a+?X~aRoQ(r%{ViAXFF8C;m!m|YA5?n#NhO$345r?{Qh!8g{kfM^z2`ZF&{M*0a5WqjifDsgOv{zsDOLdDI( zXgZBlLji1MR}mqQk+kDFOr-M>v1IftOe88FitiIOskic}fw%e*$25pKk+;?vl3ZlS z?pI6JXkcD4NOx=RS#Y9emBd&U>Pwl5CP0{5p!Df8RenpnYABwU+DUi~^nppsQ!_vy z%N{Aizf}@mGKtq&{m&qPCnx1DV&?Q>Ngpus-&}aM=8fDXM2hH8lH_uGkvuSl0S;;; z`cZwZ0Hm`3Ko_I@$jeUO8m!-d(U(V^6(gjy!C#`Vtdn=IM%Kkkkl~`cZYQA%U2_VJ zbc1TFPeF$;rB`_gn?Zm-id{Hxv7h2@a(d+tmLu<*0RnwipS$b>g|NWbP@6`~4+me0 zNlI@VjYj%IQGMfCZDjU*zmilFNmP^(+~qOzvST+`4?<+%9~w^4ko`zWdI6-T$zFXW zzsivk7on(nZG_^cMeq<8XvBHyBH_{3P4H|8 z>eG%yb{XlI{KA>rq`23u3rtlzfY_2vYM`O!mI7L(d!K!}VaBikN(Px3?qtK^G6yftIU;?#4~yr(_{ z2Ih*0*e@BhCExG#-v@j{H^^KJ8Q2eE!WjmZ0pRU6t5h`O&x!FJ3@lQLJ|`vKV1XwW z1`uK@CXlgK<0SqJfVXFr?xzvYGcYMM+}{9Plzl z#LtJZ3L5b={9!)}|5egXlz%uQQR%&jxhf_896aFs;-B-(D{e7*{rzSKX8<9Mh{^+q zRGgzl!#Npr1{S%Hac^nFZR(iI0Fp1mp=QueU}$_ZE=lCvrUb)9_*YWG9tx1JRF+eh z*~+0dF{)Rw=^rKD`w0H5jChT9p-qB6%Tn1RMdUM7Ub9q)3(bg>+ag04{Etbz@(OvK zj9$7IYwKr_)m6)9T^5( z7^Ejk?^$Aby+C~evHMAuUML7`9GSMic(nPNYlF6H+}dn>v$aLW7v1>1J!9!bD-Hc$ z7_IqQ?o%G+F=2RQt@Dvs=L;!2_xbHyk>EZVS3U~uIN&klt`Tg2dlM)jeHUeZ*kpF- zAgfAu=9dcJwHqI9Q|%;-cke>jEA4byj-N-~OZEyscQ}umx=hB|-NRbk^Z0MjL)Oa{ z4$iSU8$F}C|62+E=lFzr4#q~O2@EH$3*wCgU#}0eR2*2iuuhn#p7HgES+&t%=l7>s zdzY%iKQjb3IW8)e6l*FP^xxW4P%ht=m2E^m5u zy!ifC`^4)BeTR&WuKBv|>YhKFk-$X-v#Xe35?mke$Y=#J@dYg@;>ij_RQN%>tIfs% z^m2`!>(z~EPnXxctgFrMj ze?0a5gJbT3*E^jshlADP&Z*{qd{(%jvk3aS>=s)x)%nx>#9!~<%JHW~?(2(gv(HWR zR{hccQTX!Q=U;zpEhPiT%_TID6iBrkTD3Ox>d{?IIM-??oAaFyS51o1mBvrStunit z)>n>twSBpGI6s>jc-l<;%e8mKMFdpqgE^6PKFttNH@QzW|rW%TF!)SLfB zncSQ^YkSve!SR#}<>%DpN2nl|?bpdBXIrgXeb3+*oXXUZ|G=;HowJKyM>e(GfHph< z%ZZ4VhJBAP$k@)BoYVoJ-jeC(|mZ< zUr+ZHSMJSkHwjgy#I-q|dksC(*!1q&`n|`FM#DbaKbB})Mos|yaVyD5Rm)<^l8J4U z2DyMW-7xO9&t{uV3NUSr0U)7plL?hewyg7(vSMTVs4A(&>tiuIFmJ-TsjpT?^`K|m z0{UfNVs4|5oAYh73H`Jz26?<-DC464njy#H1zz0o&OVcWe;|-2_D*OmQQb9~_9$`L z&9l(4?EfA&YvlY@s})`R8FAla4TWRid+G7_RVMW#Hbw@F{MvcUJGtBNq{D z`M?sB?OchqGmt6ypiQt+nxEKpX`tlbDgEokB?E@1aNi-7E{e&bUxP3#QUGAZ?)SJQ z8pj=DwxMmduhByp{%CC$sOXS^jNS>O4U)tG-t*C4H5H8Em#k^m*I|FIbs zU>5t-$OC=a0NwDwV6df@)O`EA)`FtTKMp8oPMy!b*&PW|8T+!OW~93uf4^H7TaPF+ z1$$K!|BX!(<@EE=wi#0UZ_(xbA330AXppbrl2*`zuk*#cE3e&=xL1^_@fYYaRYnU! z#UBcJYmsihv#==@+Y-)GAj(VH9r6}4&G_*U4+qYby<}Xc|z0Eip=)0NSEE9SgmO;R(+e3NCxeA;(1f3^9Up=REjB z(fgh%z`qPVZL_8|MCVfMp-u8eqDTR$DQ2p6kj)}y<9PswjNf24t}dsq@lJYNrdki` ztc$s4f4h+s8o4@YD^16UKdQBN2)W}gh3{^~QR&DvHJ*`m$6jd^Zkh*80-3f(e8*D# z*#P|<%KZhuc1JX$AYi?qY4b)`1I^YPSnFFqWY3@nH^1YdMv7T=7{b9v1R!SM(%Ocezrp{(LwxMco2S`F% zaBX7M%GmXNCUXj;**zM6(|m~TwW0k!^{$pV@mEZ?GM`fOIM<43{yH^Q)4q#cMfOnn zwr!W&e8rSyUPFzS{xa_^?Vlk1q^IJ#I~qzmZl*nm%Qg)c11dKV*9+Pjwa)_D+DQv* z$i5>@pm=|n;|(vMjg}H{NM|~`1_>At%$fMA(bx}vSn^H5fZheyo^x~?kV(i{&{~&Y2w6kM>2GQ3B z#y8k2q*VqBY3c$p$?FqChtkF}8QijxfSn-{3YrqT#DUj|w=j7!&}4>!%AZO+_j9gW zn{^J-ntfcRF~>7bmO`F(4Wxv;RPx^pwAznqVT|-2Bk~xkUOBsOuhk^^++6>O-W4%E zBWY?IN3wmj>6~a;O4x4zWAj4-{ZGHOqn;;RH6_`#iNSOWa}~{xf(4WMF4fm_&vbT} z!YPXG9L)hR^ppzhmBAxgWIG>^-qKf&Wg5=(^TNKXnns|{JemylOizDl1H_(E`_+Lq zTfU}eo6u#?k42v=sr}gAo`BZGm|nH#EHKnXg+!b4_nCJT>Q@Y1dJ7=cx~Rlu9DkkP zSl;sAS$GNzt0zoA)`lWPzTE44c(aD%3kIY=VrE|r&~;9x@B8yj-y})dsd-3DDv%+t z5%R4LmmZiT%@^Xn_sO}+)8FG|{RK7T6854CHABi^E*Lr?2S7Uo6MHzm)8wA0COho> z*y@4MnTogPSEzI$AP-po7aNT>lp&s$x2uMGr=N02)oL55GWp#Bb=+$t&E{=3DfqCw zUP&i;_TFEfHY4zT(pB{Lh2@`hog|iZ`JTu4!WO|zg<#f}=Gm$Nrb{nLAv@2DUMWZS zbU=k+nu@2=y%z}x1>mPd*~OPV)kmw{5)v~|c2YpwLwEXyx2c$G(&2601hSgxr>*J-Nh8fnK<1Wai$dO3(JWI@`L>UV1|zduk-m~#B+OaR23 zfv0pg5Z=%)5KT7C+{D|^yIo?tUDLZ4+;Y0z`Q08h0X7%Wh<=(~Pj~z;f=`U66-PCs zvkj|;9nvS4hYGvtxByLDrc~hVVPWZ5nZSl#T6qRltCrB9e0C{4!Poa@m-m>ReNIKU zBkv=K;4+Znlro+AIWK0Siw1HfbBJJJ8UVNjIW_#E71SQq=rdR}TWni{S zFe!|Z6k%_=vNv5)k_-o>8V1L=mu%L=qz4A4DKT4R=nN_*qaU3Cm!ypZ#d~8mNP=>_ zOV%1+(J_cp`Mn!Msx~;OxFKX@B1koVb@3n^(5zDK?)qOEVs>r;f4?6hiQbP zH1*FkEFZ4)bq;(P&pG0v>a(Zf#8kg{7I!#Xt3ljV#nvozsX0Ne5h{#zW)5 z7j1(lPQnYvV*Mu>qC>cf399Bu1vWHCb)c^1y=~MpJvRdTVzoz7Mbz|j_2M9v+LPY;O?aCk9#j~ru43FUe( zif4=p#?X;5Lu@ks6wSDtVqJYhhI@AYfT!NkdfCe1$SK`+--6cHorBZ**q6e?f=vH8 zyTRAjvDaPd0~(^-Us<(lVhJt2co{!X8b!*z{NX7T*bH^Ft1 z!mcBzP!Hs?+~EUPDz(YT-LQa21x@9KTXR=BQ+YlaC})Puw-NNB@VW0`wYnFsGQg_^ z3H*cbW=F4?LHs-kTgLO6lfm-jftS_-X2-Ee@g+6#L%&&}r4;lMk0d96VNy^P;CjV( zVp@3C!hxeoPN?jzE8BWh46HhrNQH}ET|ZVPMy#HSdM1T0tU!gzxnRafU>y>W^7O?7 z6J6dZDSCB0z6>r2PP^PkZQUe;tX)Q*&7OY-0IB_uO-ExC%ZJ(otd})z`^Sn%g9^mD zuQG}W6VSShvOhN9I2+^q5n2Vn3kjktEGg(#t+6uYz#i$@QA-v7P~8lQpcY2{PV=MG zt?1pL^Ebc5(yILU0o2}jUV;^BF%giHFDQ~iwZCs4SpD|s9QO$qiVy>PSDB^CfS;Ad z74g{nw42!oBuiR$s#}mO29se_kpix5$5DiWU0Vm~oCw&f?A6hcmUaBwU=PLx8;(2wenzX3T&J-7)x$<(i7)hi+ z+pOa1=PK0z>2Z*&;_{ZRpoYrP439Qy3$%HT>)^qm%PEb2ux6g{CZWLgQ_{0phx%|q zju=sU>0Bn2w-8>(DOVW!0mS7f*tLUJAmeF_2zE%pol=1%V{M@o57W;rVx3{P2>v*g z5LxJCfTPuop7Da0F_Gy6fnO!xyhV^N^UR<^fxn+dc@!5)(e4LI9p|7O{X9o3?=Bbq z*Ayz0pz~=0HWjl%dccWQJdyY|X=9mohtuv1z6q-_k&I+Y1Wx^0E2&@v+v!?577=>a zDSr8Cg}@Hrv^PN69bQ{o1Vn~s6|L=q7Q770qrxv&s}&nQU%T7}RYWbZJyK?T-7-du z^szz}NH8{{_Z4Qvg}No|5&oBpm6(y+KF?Q7d%=khp1CzPt$LSY(=qj1Gj%btv5?ck zJ@y@=q`T#`2-2090<3`T0c{%H}6OVzWb=zJJS z=*YOw#OxXwc)j{=3d8eoKX#l zm;2AW20_(1gmp!0xEHYbJmNq$cW(=iKLa^99L7fS%QI9LR2e0ORLEOc{VY`Pwmp=^ z%4pdIlX zZOX7SQgBhUSbE&HNhl&d?DnqM7ZPY)huNzqAYQULA_HQ3^uL%VRBb0bIJNn~?H6~y zLHds-s&8C7)Q!oPOy_%)=wsb++UNzjwIH$|L}26Aj0!<)aUt0ZU~!9Ne6Sz67mMCG z2W2w0G@R>k6;J0WIkSISR@pyehUNslAZsh&l?lDtBLbCXtpDlK_&EOY7_X@&I8Tc9 z)+lB7Z`EkEfB?aV!qD2k4{H<3f^H(aBGE-wLElhtj-JvX4W@|(+Og3)rp z4mt2kQzsOL|6~>CD{iwDSJ$Q?3{Fh%U=RFbk} zoepd*!(>V@nYth(MydTQDU-`FFn34)Ya0-;n!O0^#U7WtqlH7yXbzmi}LthHEyP-`52f5tO%aH{ikF%1i`WxG7>Nmvzm51g$MAj$uXp#9#qn%Wwu$$>dRD zouWG>jY*#IyFEOVr>pj1@Q^-0rohE6{+d**oEDbsvqtk!!PuiE73-JvfJoSDFEb!0Mx{Y=C%5nGhce(II91`J_wbWbn&ry2@x5gIVBHZ>rCPiz*x}yFwrWp|>xZr;R1JYfmLCzbxgoyjH(< z`-MExhIwc?85WpW)O-3|%`N{a1+_1G-g#|sOA^ILI$shJHl~sh#EEJZ?$H^gy!<1Q z>8NRwcr?L4Gj+gtU!uHJ~>$frnD`nG!Yh z`V=WQz_v|J+vdJu>QFGGyGwfoB$1n9N~)()D=lV1p04-&IAxZ+?R%^`v}CY{!`Is) z<;3C5<}7NW!#z)JzSJ%Y%IX35s;yNXN!-GVFJRc~IGK3{(X2R~DN&M=J$J8F8Zx!we`g^bbPu!WJk zcl8IOFnd~RloLG~m&j>$csI4mrFUc!k^CcPZM56#Lz^}-JxdzuZI;|K+LHNW?nJzg zby;H7UE`Cdjt)6^j_-Jl`>^p0YsqPwtD{?Po}*oj?xRaGqusx-T1P)U=4*0~#;l+} zS#tc!t3MgrH&nlQo_uZhrL*FbiG@K)(JvBT*rz3)!bl_cd=s4Cx9#4?$xdtIPlrxM z-6&OxPiR?vWQ?D=Zgck8UoXqE;on`3(`?yRF z|ASsSWPNE#@_{$>vj*FTkxBpbg;oyP4@XC=II>0O#GwmY_N+Esw{hIJLgRQs+^)AL zHtgS~7ZsEjY2O%WP)xpb#E6;N*YQ0wd2C$&1NBAy@8TqO%Y)&uk%mt1b1VLJD@=-8 zQ4}(girx9*eT~}ED>^FS!2G`?yIbBm`+s~1)YzIyr-$g-Yz=c6nW=+WE_BQi3DQ)YD$}_$Fz6*x{49KZ?0}e;zu>Yu(PH_Za=o zc$wJXhwLF}3?RuaOuZixI`9Wc$Ek7D&rpN3E}1#MKh|yXeX*5Fk2^`S-)!O42pHXg z5A|B80v*zjPm6p~0mzy0Qh;!|$UkIgLSA6La>oJu*bUL)AP-ytkT99bG( zgKui?^ZEAJ2@3*izD1MlBKr}a!gV@|f-G2J{RrpHG^5{-N$b-2NE_$q>LcctKNYub z^NVv^s&+<}`XzO(?MeFA z?5>`fM&n%25>-df`x%5VMS$*#BmWZij)A2SXPQhykcSMiaD@*x8!|t==opPuAOy-_ zpBCk%bDKk5ES(1(u2olsODNgijsd=MQ~sv$pz;m{;AIo@a^d@O9HB`fQ_Q!8uF(VXY&W2{%(14@WnS>9a_Xc+z2#K?KAEIg~&wlSn61MHApU~Gyaq^%M)9HHOg{AR- zb5}73OH|(U7ti;6E6=vdZ6zEWiTZNrV57$ZNBy@Icy6DzmRYEol_3Xd9c~k)S=?YU z#X=KUNE6P%_s6z24VZmP!JPvDt#5FMJ$3`QXQatI$NCjGHbcbE!$d=7m&XYB0#h@7 z?noAL`KOe9mM$=MvL(cORu1MU15Cb)1HeSJs(dyNb57RhIgv%shH1b(Y6v+_3B*X< zbkI930sO^RJNi|1X2pHh(rjS=6RE*@fTlY{FWVvOHvA-nOgC}}yLtlD3D|D;U7z1H zzNpU^+WhI}UetE4g~ z^(g!Nw~^II|6l{PzEYn#_wFw)GUV)D>SA{$HvU-7l=*dnJbd}3>Z<8ga_wKzu7Uki z2a3eCNFodJjcll5wbKB;v=KvLRn;g!14Ch-ub5NyikN1i5C)S+XH=8scsgf*7SH*M zDiBQ3`zK+6Zu&cguyuBlOi5J%+>EMNvuWBwrNC|MA}ONc!bANIgzv3R4t?6(@IRKo z_se5a5_8f-yETNo7(89ESd!;kmlc^i%yjuPNXq^Y-@O!m!I>kvE*&1;mr|+@7pUO> z6Nh-r(TSn+X@=7Z$od<1p9+t5+2>84^DKu{sH`{a$k^?pe2hM5Z4+=#DX@O?-@bh5 zRbxK8e66aQ>ZLCpSj9-6uKrJZXfdihxDPVUJX=|0#dGLj33lyoAeq6mEA(c_Pnksu zn{P6f%c0xOSXkRTZBaKzoyy~eA*5!yhx_EReN>2@wI|rpSkEX|2l28|8xZoyT0I^wn{At zY^iUosV7BsLbtK6*tbpw?37O;Vv0htPdp}Nvb#;*D(|Ox0A6FDR)&<~(dmorMzq7e zy4`bQJlnCgK70_X+I4=3orFbY!3>j21pK_J|B1r)w{l!5Z>~0EH3KbBycR13L5s zkUcurwpMgd1}N=;{~+j^v2;y2ao82MLIor|2rzC3%)Gl-Pmz-u{(dxnumYhL&+`@W zsfvIL3AKX?t}hLNm4x`T``Z?P^T)WpLsC!<8W=^Y^mO~d{@9t)jevC3cN#;^ag%Y@ zx)^K7L5B=LOOCKuRQG2oelAETzQGs^qmOe}wi)=OBYa?gKR(iYi`1P4E)#>k(>z`> zC`~@@ITFHR(X3{{`>$+PPwoX>;U_lY? z?sjeOQU|0L4$?si*SCP@Zq;pBal)9tfL#mF{o1)}3+U1yo^KuanN9~s#uMWM$meMf zt$B}3yMD9?mWz4cQu=&5y7)q4j5jSj118A>oLDqnMYofpTepL^HdpM}26Ur4aqa#- zSYfhj75?7INH=sIwnv$Z?8@x!Hv(*@0`#T=+*oV3O)(YL^m;kZRf6{E0YfTyjv2HE z)u74{0DbD7I_B>!?sn!cE)mC9HJOMem`;O!HI{xgdIyGs^^T_)$7)tFRC6sR^%Z<~ zIoL3S^lO(Q>Wxr1(3jkK@$p+bc~|>Ko^4MzVUFe_;pWUg23-t%Ex5ZZg0ro)%#W>Z z!~)2N+#F4=U-|+P-Nx~gz0$q48r0r$|_=|SUzq$o~ zLJiVX1p2b*n^U{-k)6vu2Eq9r5-mfKyurI3tl-eKr$HTN%1IYMqXoGXNjD8d9`#3V z9ZJ!jj^j7mOqicl$_a!W-RM0L@w%pj&X#N45yD zF6TK*vnMoy9K0R9uf7f8IUnFOEl7pwO9BHo6maa@5TlX8h8rkL%`RVy0F`O(k1IgA zy1xpIZnlI~diCO-+>3PK zs;J|&nTGd*LZB($q92X5s*7)jm-oE>>nVNo?1{Uff!{3XXR*+I@cC;$EDtl%<)`5J zNq8T60{rGoEKp;QD1-?H^T@^Zex9eyq+Ffw5o(F!pS}g^cbu4N}j; zHgi1v=o*VT&}aJW-C{)87tll0t%Eyj($VeL(f#+C#lAOo57jk+9N72P|1zJgDPv{~ znr|j=O4phv3FvWnqov^WeFDoJ+x&V?Xw33_Lsz|3^Y>p9-7KFoXe12k5q-TD?_Dghpa*?B4g9EOk{ z-k_h7>&u`M7Adhb;#!6pn#Q#q>(Mj_IhI`FfKx;_@os&V%@E@yK-oj zC;g2XuzGudZyl$dD~-p}R4n{$4ZA@0S9RFmg27+Nq3Z>9B0Qv;9sc=ISj~2SBQ_BY zbXt(PA6T7ss@!9~Qml+)i&9fz(RCs_^%Wabu&l~)O{g6(?Lg{8V#%RMYnc=Q&~@!P z)hn!_VT9K%gf5w*$^q2oXvV55RTu~r8m!fVG-e#perHFRR1`2^GU_-u*J)G7IhVpY z{w-nygJv}3uOnON0Vzo9Kn?&)f1kPVp^a|qfxynwG)JtptPpB#l59^-DN3}Z0x+9{ z%dt{HM&L`ckR_pk#%%u2aeATmvs4d2N8Fmo0*r@{I#?;lr|ZNbG=`;!K)Nj%sWnR@ zRFJTYPEDBORcfYXRdtjZ6s4<*whAbiVE zpl3O7)2hT@FUb9EP~NmGD>7o6T_nLDuLd#HD4w@0N)!WgD7KCX|dS>GRR zh6}2lir_>(JVGU*9tX~i_8}9rvz)XQ@#VN^d;xsl2MVz~Qwn6+r~!t)Eiub?U&?xN zGU&zReptFcgQmyq+|PROCQ>*eE;kD6b5PS-{-NjFoJ#DK(vu^D7bsV5b?k5cRbG~) z>TgxIMT+ma?HvE=1zp$GY;+K#)w}dp^#)htMe{q*{Yo>n{aMZq6dKndqvJX)5yw<= z*%6j+A7`TUa%oXpX8--sejvV}lQ7m7;};n_+QWxeY?MA=u{3YShddms{_L>;7?HWH zz4zDfB3GCc3#P*kTdb*|h6T%Ou3PCw*FK1xVr*&o@ugB!Wf3k+X9&}UN9BW_n+AwM zS2Cvt&W8#HMGw~ZAAGG~#JgXM+#V(hb$z#r7=1Fg>|{mS(0!T9gXa?0>$<&TW%*sCk?5lJ@8!nGsHR!xve5I$DNt+ zV^KfQ$$R8@GbY3DfIKU0|FnALezl;$yzDi>MT(&89gk+G!a^joik!KdJu6dV1${ZG z8#029MBZB`O$hoBG2?NqBBI`Q^Y{3sZDkn;k1((+hoAyOwTh!S_ zZhYraP~sSrX7{Axs+6!kH*xQws0{}YJ2MU%5W02h+0~6*Pd?w}+^gsi<*yLsWi$^J zXXATN`3AwYzK%h(|KV|Jcv^A#j_|@ho(cjP98p}9#^X@-CZ;M|=^W}cy-QhL00sC`r`94kz z@0U}%7*gTa*B%K_pe#jxvey@U`FqI@Xz3{2AG*1lTCl7jaJz%CoPeY#0*w_cBYl`R z0nSb<-Qdhq-3Yhv4P1C-s`KZ%yW5sq<~#r~Jip$O$wvrZ#>cSn!*+b^1oTk*@ne}6 z=xgh)&zI}Z%<6Dfe9MvPE9CmxCL_@Ts6V}AC5xQ5(5Q`NFz4ep#4^b>#hA--&h`a6 zZYGYOoit<^O=(I)isVK?VK>@Kj_=Q=wij>U0y+xNXbLFY;`_D4YYRt4Xk!_PgYk+& z{%gddgp!W!G7MjCkbx#fY9ElGQ7^LL+wnEt0L2-kn9FsH%dXD=GHk73rrL;70T1I1 zF2rtnU!t2Kn<2scl{L=+=ww~VvmzHH*WZ58y%$Jc$F!UN${{#KuEPa&R&KFX6)#r8 znBs0EY55VlQwYTk6a%m z_l?|Eb-%2oKzpNp4`e>Q`p(~H$%XyRO+4X0g@3+R4-dCD!@2V_6E;1;C*yXQmc89^ zHT4dhGP4zC+;Zvd|MFO#7b9;R*|DkrBuilEcQp620_Ls!a1iH2U%R&Q{6AhfTmXAg zw+BWaXl}Qj4f))!zN}!JipKBI%&qu)c8mE2%GBJ%8B52z8QCZI-IaVY*`Xc?F*{AV z<&1xp!1{J%Zss=%3X)ES8Uab8y&XE?&fy+)?7gnXa}#9cC8Y5bI}F8=BC9Q!(g4uE zhrEZ?%w5lbl#@BCyfcsWzjD5b83rK|*Zv+@^gL(t3GA?ph5UZUYbdsC& zc|pCyi{B3B+lw>AkzqbBLJg{$@DX0|5AyESZ<;n~F(~p`qU7z39N-`+OkwC))E`*yX-_~r6t;-AP02S|6&%tee$|bgN_-Fc zeo6TNprIL*m0!A&`oQOeq#}9w(r*n{^g^>f1Gt-KOWn}xI_~K@mNm&xdqXlgrPXvK zgo&6bzo*YbzTHGTTQdmk=lysguv|Aa@E$se$lzJ6rYn2vbH48}GRhY#WTu7Y-m;^+ zi>24C3Z_1PGQs(8ms#vC&KL*(flUjH1m9QOVc(-}hF*@fO|Y^C*e$+2q_CKBYJmR4@w~w;XDxSoYZNlG0`m;uSWfQHC$l^6 zY4^(aVUC1D@$5!zo&!i%X9?1ritukzK#NpxT~h?i7C>4L0ko9? z4#;ImZl(DRaQ_ql`dybw+}88e?7KE@-M}bm=^?@2vB_KCE+ScTC3w%g1Yi1P*lUj1 z@=U`ELORp3P$5}2F!9bvZXDuvnjhK;q^vaOlDAXuT1+T=y>kb&dCx$T#tZUaC@;^lmkKr{U* zH@pLvhI0m##!G+o)poQLo$p0!^LFTlmJRwAEx_W*fs&K9NH|dh^M9LDk*9)_zbnu* z=>&nqPc{GBS!U@D)#hvcgntrPekZ0$J37S3`W5#)HcQA6Q(r9lXYMWLj*!<3QH^Fg z1+F(C%syMV?u2w?o@skz->nj(8BFk{l{w{kK`8{2W^EynAxs&o(hp^Z`l-dF!XY`d zj{h-+XF4RG5MuszhB|1bB$csqfhOH5H2o$6U--J)&_dYi(yOBrHdjJ2HNnznSQRL5 zz>CBIX*&;^>`(=oO=QRy&++ivd%AH`GBoX$q;k*g4OVv*-SCxQO(8Royd?3hjwt{u z@*KCEQt_AFcB?E>!!VtU2d)qYx6ilx?3v-iw&vS`85b(6#lQn4LJRE4LSW@acNUPn#mVnj0_guKJ;#zZ={x3zS zukm)_ZV^%690>It*3LC!#FPnX#^%rBCywn9?20tQ;j}b9zu~=pJ)o_8J}veN3b)YC zSfZ0sG;ekfK{ir64ik_=E@)^jeZ1R`Alsp@YjkQG zdaNhT@|Hl@=AlE#)!m`)y_F+*oFEhOy2xuajGkIgV9S1)z;=4I>t}9TEYQhcdxi%d z`x0kFk{0jz@v=DQR*A)gH&S1*f1^{j4E)GJr!End?!4QKM@#RNbkiV4Wb~Sy3W(8r zh+u!Cgrps#GH4qq@k(e0g|brAO%BP5VjVFdi-r$Y)@}=u;Ii+8I^?YxjVv9uX_Z5E zllw_e_J2Lla7dv4dvt$`RE&4#wt#yT#jT1en}d_`K5yy&9K8Gi-1%=`K+!aEjTJvFiKpyOn2<9!_vNJ;-N1nG`-A5M>Z0ufoiLg?&E zPTZCfVrxKXP<(HhFULAL`g(7L^KIIphwNJ)-2esymIPO#Ju`k?``5)ZqOu0&qV8E# z&#)hz)3F-Yi{U9fxu zYbtAXG?2SL_R-_C<%H5}u0F>_YtZJ(ApWA7Iop>GyZ^l6J@{WMFGFMRcNB~Ia?d#V ziSvkk-Lnyth=J?Wq$Vf6SsvHsETd&sG{RD z37@y6c$BFQgnHkgz02x6kpAIb&C&Z_#l~XM`~u#>nZYkt_rKis@49gZDZqX}AT5(uH&gHP!mGo{1e+e21}f#~BzN_iua` zI|~h^DQ2&^V!O#{QZ>>mFlU|Awu1~3_y6i(q|uw;LY8F`V#T?~A5&c&^T=L?>DbL% zD3~hv#pr2cxEI0B?-}&~KUy`Pj^w*KGQ{|socHE3a9Z?M6WR4PXaK*$T0btw>_*N} zrNX$Ahf1vM@tERV-XfHB39v+)(H6lZpu`BeIxQ5v+7(3)L-du%msj zI2D?tVTu8`h-Rgv`AUE<6>`fyCSpk}=P{2o!^7~w?R{mG8Mz?|T3aB~hoKyVOsm%; z7V~nm)>cbuu|7n#oR;jJ6vJjgi*}suxt}bWr>Ex?!^sr0VhEN8`pSPU;Vk&w4lL_S zvD!@2nFlSVC6<~ziB%V19w~pgeIfmeQr?TQ>XqMwIq2lY*br#Ojj>Diqjw$pxI_|A z+crqE(Qmz|H=3UY-IQ#hE0=DeA|^qHWP7Uzb+Jt$%acads%eBQF+PlSrWG>(E(g_e z!$rluQVy~Vg-}ziJvrFhV*M{X3j_x{!!t4t^g1!(I4sex^<*Qxpf6~XL2xl0B2T7} zlfEx_$>^IO(Mv;Nra&W8CHieJ^OBQg6*v)e8dalAED$5J08D`lUBgs$T>#x_#&tU^ zC#g2RUD)vea^E)Zi`&`z9K%co5H&Qvq>AmOwTRt z`ycPgk|0WKs4S~zfs1?7Pi4t&wpDJ=msxqz9B0K=GL|@bgu3(UT9*SyD@NEmx9dzw zJdfBvqr4Bqwu9~*tDXwjaD*Ako|Ei8Qk+UG*u-g(SW2514~o^CQ2peq4k-qElCAOM zS$?jyK5tf4IJ1!^R4c8n^Berrbb6Hl};NcVx?+GmG zW7RU0x;0I1;}0IZZn07WzzG2?pStoihnU2(++KyxVp>*rY`AcUa_63bOFd7u3ZwY8 z&znP;OIfe!HZSIA$KQ+sMy#@SS*2!^K@N7MTz{q9AQIG9Ju_IzGSGA~Lrr1uq^st6 z9pQ555*_tZofTZQx*5Jj<(23_HSZcp`z9gK#rESP>?GNYVR>b;#LAT=pF7~l z0Lc~d zjq_xVDG@maqqvdXt6}={EY6n^kUnD76KVA_-7bFT--;bJNC-D6b3h)37p?s7gr2^6 zCcS)jRi42p0tiVu1nUFvK4SQsm=O4cEE2vo2gn)B-D)bWPHwD%NbWGiU10hPRR;s= z7IT)PLEJ5#RgDsVn`NM;W_wccNua(X7U3f|)fflpmHt<_s^Jxbqhl&3&oOKHO!8fZ zV>v{LbeV4C7*>to01k@8gLf+NX&-}3$tJ9}iM-0ZX|y4SrZ*{zoeuT=xFa?!r*vfZ zhu9!Y{c5a2x};L>MEp?kgYmM1F&N2neN z4~Aag$c?sE=U=kv++q8b7=)OIi=V+m^=kNPyP0TKu0|J zW+RR*Ww<$_QVdVz6gQ9V=RE+zo8@G-yJtf82_m!MRe-F7)t?wpmOX?=gA}#eDINnVlD@ zoEJ`}{cbE=PCL(jbqLi`c0<&_KCIFCJp7BCeXsCc;=TMERVJcOLgC@iCXrO}nSaA0 zjcqgcdx>uT5k2*h39|hi#bmT=zEAC3{+FX4YOy zEIEbWgj%)4R_5}DxzJ;X`!&63UBx6Bsk78X^jS!TR2L46ydY~rOv_`60=rJbUml?N zNWR6`1+j~c^uO_koqh9IaH3C$ENpeFB z=)o?-qIl0EiF9jF*P5iSIhJ_px9MEf_Dk364&tkD-^k=$as%kX>0c(EWp(hphqc$g zfzdbt`IJF2kJ3t%(iRRC7h{~)WNx1l87=9!ap^e@G>YJD?8O^J%YE4;Ckh$J^GTKe z+~swJYs<NC-CRUk+2pbrx%uroU=BIocE*|dXC1tT7u`k7SW&ypO zxg;;;a_G|M(+*qT)AVaD?4ovU+4M1BN=|;<+HxlM_c3s+gD7Q=?m+YDDC1Fq-{ z#!ep%vWgdzIwKl1A*(_&sC0&S2l|6WJaofwLMKy+GHiekVJ}(%x?Fj<1%&aInfIk+ zW{FYmU9rZd|5O)L1t5aLR@I6xqPnD+BymL=86F!|+gE|)7rd&;G0|)q{Vq3WPz9OP zr(ar-X$3F`iKV{Iiahz|y=#1Ki>>a;4UU?*<;%u&@rYhlj9C|$0sX5cKD1DR!=P2M zxC1o;NDH)Wkrm&;D_#I1nrX$6Oqe$z&n+-ra{>8rEA7hC9_F*746+>#Cj9ONKX z|9yEo3_jDfng=ic=HaRL9V{jIX_`r2y*UI~&WyPFu+np#y>KPYMFGbnzi*iZ&GNP& zGzx9cZ3MgvI*rl@3u8{y`o5Bc=a@ps+Y&3p7zP5YfWS+poQ6pQtA_Wh`!cMGEXYjU zE?t@kXVWkg4Zr)>^+Xf6^`6s8o>th~bs5-|B)52`?HhudKmKEPZgcuGh?JzXn3Y&5 z@3{4*m>9qR_lAGrgF8%mS3Nc=`4D33DBAHLE%@#{|T_^zI3w-)v zvCxss?5qeqC5MAoMlCWZKaK;Wsb0UYyDz<6wjJ$hPSF5AwXHPI?3cI7J5-TF`_@{ht|6#H%cwBYuf2C)tiP3? zZCa4l>6x!6^$mrIMXs+ZsQUDw2Z#F!EJFJDs-(-sG&B%BT{jlJU8!QuH`F`$wH9+i~B;|h{Db|ppXlvuii{5nxVr==&ItPJ;Sn67#bxl}m zx%~-YQ+d>l4J0H^_j2uO()fl-fce^{9F;f)FGnqy(<^tGeJuu&S|n0t`$yefyX=nw z1OgxDFl;u$*pq2+#G?h}WeIF9)9E`~EQgz`0;2N~+NjIYUzF1zeuksB(Qm@nu-3_G zNLuTp&y|v0OJ|ys8etq%6nvHHXQW|y{Q#UdGc-cgo2l21ZvAEE$Y}Gj75)Ab<8d)Y zkAsg`mk)hI#O;3Ppo0MTV+W%AzxgVPfu7;!ApDI*wz8TOE+vaLbt^8!;U7;WaoL5L z_YXkiz=lfC#eG8*An!F?6Jb3o4TRf{DR(ekLSu@wHda+>6zwA`(IS|$Nr*(Zn9-^-&djqQ_)PO5o2hCWzN(VQIzu# z7k+=Se)5yBS?Ew7c6LbntDo5(qDIpifb zW;Q%{+y2nMG`TM6wke<6PfV^l?TCsmB7OQ*Eo!m z{w6ze$nR#uChu&%d9vN0pz8ewp!JN{voApaiL1puSp>t} z1umHr@VsKcgal#i;j_J2o{CbNppBcq9Jmicl%+5JO|xG<(}nY-LahZ8cCJUUxzE_} zG7UWgnVkRv4T5g(2RSvl=Ek`#(z1@AOdJ#QBEYbV$1rCtw+a`M{<-3R+yC5a#Dyu7E>@)(1LG>r34T@LntnYTiO%-Cy zlZkc&I7s(IOv9Ik?x62MG<_L!;rImHNQZy;9-)hA8v1bEO+*#$NU9fc$pO%9pyEhi zzuppMPebx#wY!@wqrd!d?zuRJtTD)H{r0GapgYGOmp`y7y>ZlL#5V2Op7(yI(t=BS zf@uBn@P&6y%j2SQs93PsVPkv0V^UpX#LCp=rq?Y*wA|zJp#?EX0X(bm<(d+JBR9f! zi4G5^*1cJbTDJ)S{^@=S0Lx zNB=FO1C5qm$4(~;ms2Ji57+D{bi14yxwK>GUeHGSe}^`$yzkIQz7SfXD$n#UJ*sD6 zNousLz(w6%qQ}oZ@F-H_b75pvbG_%j0Xtzh!YQX9hp~p4+z0D{aGC$CsINz%`<=IXW`C;ucIOs%_^jmv1{H&DE%^)7$W9Kjxm z7q2>yzSTDS>irGzj=%wXetGsry1~_~e#ris)HkYa&6cKng^%iJTkF3i-p3BdeY|#K z*@rFB4d?+0Vdj4WG)Ar!VMKflFuEZ6;DuZ+BH$sCG6gARC{1owje)io&oPl4RF<@u zrq2Nv%dVg}SNZmVbFRYswg9(LjV7vSQM9-|Yp=&18|E-6esPiH6tSJL^b+m*229{) z^lkVaneMI?xE*DNbWMSjXG8eNs9bW~U-`n{J@3KdoAu>HVSvln0KTDfM`f_rWu_UG zpDS$&1E?YXu^>5~YLxJ?^c7!(5a3Vb@Sb)|WSM>Ze0px!iNB{-}k^ z3r4MV>H5=dWyc;QmM8S0uXJB2Ce1V%e;$BeklFA<@)}==k{^XSgS7?95X>|X;~%nr zHUCTex?^!~R^Z>LX{imE>fSZ4#^tecfn8H2;eQiq z4onY_ceQP^moxH~U~ZpiA~jncN^vc*S(jDuu<(0s{{nP~*81bScSp3KeB&pMZ_&>j z`+OO3VOk+1^};O+fV(G;_fm))8R|FGgQF|J^kXAvZ8g}wTU?vLhDc{Hcl@_Mt0<(5 z04{xSlveWcGY8DSd!v_l?q5*IDc5!G40V;|1B4+CHq;wNDS!&b7SeW|H=Q~4X$5Kb zgWsS;A@C|zC$4yIG5YGq?f)Duikb_%wE_PhN9js@?cRbr!w#ryKKpz@OE=2x(mv~( z&Hi@tGRs4B-CZ|x;+{_g=cXXnJOK`0*X(dn0DL7mSpfuxBAo&BA5o}LG3gx>Gr`2o zF|kuJq!XKbbcFrwfbK7?^aK$dtx^qp&I1nEc9U_q$Ie z%Zw9Uej)!bv1snj2!4@T1~ZjrXsyZ5A{<|Wrcn`ZMC3~Vxd+;lz%=$R-Sk_G4y-5j zaxH|xlprzrkr-S|K}wY5JT7oiK|URT{SVkGl#=;Um`WyiPjzjPk|j*?mN8N%C1mX> z+)Id9*?|8CBHj}VFDi;NX(R<2zX=_EequqtY}co&B|D#&FzFS|ozX5{$XNzTpS$xy z>h|9h(hLWcPt}lrbI6||D{E#C9~0rj>9Q)7}M%y^=vbp$?hmka10`;O+#C z*l$*e_^#DAwceQw*8QG5BgRr8H!b-%#U+2_;wIQQjVND|OYWC}97L$^K*ACBF4SS{ z5sU?Sg2dt2693ypHmYdBh(ME2ng@KIfvMeZIJn)Unn`%0#Of>2ml(M7N^As#Jg*?$ zQKD%Zu{|QvUci2M2uNq*&r5N86_o!{^fvwq->)VwN@QWPMH7U%6;?*L?qu^&7w7$wD>D_z)BI?Tx6O0#M_*So#T?lA6JkTA3D0{(DBbl=0|}qW$3kG?EM|E zTo%PjzFXO0pZ)YG&(6j4^y(nwo}|&}RQ}F$d-g+Ga0EBo_!MFB_27y0u{ASkf!inI^Ut1eE)OR=8o8##RfL!9My}Jj z8B-?!+dga$)r~8+b-6VJP_Lzd8}4t#E+?H6ucwYuGU#k>xMEG_SwrST6jR(m;5nPUorKV33{`!TjAN zIk0gzQ;eHn!dU=}D#m|gTuA+?OE%i=@NS$FY4XCO6UujXpv!>en)UQNPZTWfZ0z0*BMurN06iVk_TjB-v%YQw?IIfMy{ljZi*F)rCt z3Y9B?X9oyG(XBCxsS_9GbDDe?0LnSV(@$<56WPvlF?`OlS<%LG)S8a{$O)y#1c&4q z$6w3EN+7Zb09-l{SD3#4QBXk?jc(7Aj>#pW_BH4mG8u7PMkdI0oaK6va)Zrsqbj*c zo1D-{$fW|?nzaxrzEgy0lwh6S4dMS$$`)01SGRUA>FZuP z-t9-|S?1isitGv8+!I{Y6FT1g`80IrL*c()$lWshA1%WuC7;#`lOl{M6LA_3Q$pkx zhGP(f*V>dVOlj64y*!9GNFfeD#AHsQwwqoL__r~URH^$16-l7>IV>hWVJs@sK{);a z?n?tmcQVP`Bj|)%e-yZW8M%dG;&UEcpo1Hhk#_=Eg$g$rOFm8os7mtEaFRgGWN}Nz zFr-qohU9Xdyk3F*s|Zz|x;Lf(9E9Kv4&DVp5(~%<<|IyPDmL<_*3-SgM1Nk6`TVu- z5#dq4^P_>tM^83CdRq19dE28GeUDy^KYBxWED+r;r)a4h^sESb6oEV}CfYZ2t<%v) zq>$zS8mhD_=-qKhgzVdF^>@5qLr{P&3V4(PxkZ7lR$wg@0yXj%a|vg(aUKIir;tAL z{8piX1T9`xfFp8{^8gmDwh@T&f0@kKKjGO-w9~(+s9jOH;9^{{-7izr0uHXFi8LqM zrOz>5CT=&UkbWp586(s>iNWP!lWwJTBa0%YnXdHJ{j0zokGusiV6$S)Kg+f6SQ#jy z634~ljga=}NUs^vyo|i0E}u-XQ;rd`0`CAaq?qCQU4;Cz_x^M4&V#eQLp<+yY$@fR zWcYwjk?hXZ9GzdHu0vE{zml9z1z63sKP9+xQtU0Afs;ob&fy1imk!vCguCOJ9!&;R z$i}Dmwy6m8R{8mfD`t>DgM$2amVB%&9m}%&!yvfxj4q!Ks^5Y?BSs517^^@S46_?K56d|s z54S~Y+nCu>1bGbii%BkFlRH6@Li&8=8tWn=V4R@|oC;PVw<^&!O6)}?{;`sHLdglB zbSkbB+2{7FwQpXZ=M>a`Q2T>$S27#(hmAAl;PMm_Qq8Et#Zjlnqv*G3FGZL|^)Fh} zZPCi}XCU-DHYPI=eNlYJU&*|wKvLLdYsDSeV*DQ&%y*-nmzMsKqO#S<<+n|VZZ_`~ z*jrp!fYY;1F}6?_ahi<=7^rtj1xF2N3Dya1(AyI>%)m!PU{uD)k4j>%K304=O*n&#m+ z9q90=?)x7F64+cs7V}IMZn@Bx##dG?rZ%Pk^3p4^ih-Je%-%ysBK<|Jlh66k;QbSq z%+^WNalm8?a9J2S&Y{St3Oh zmV<|PYr>WvTJOyR*K@XfWx>nY$idX7CDdTwA&Ys5U1@Uf(I5mKAkFCooTUic$-vNe0y#RzR1%7_4CcPi3MRrNs)@7G49}E$eI;ND1(7cE zF>_x4#bi6_XRKGUrCq{kgjjM?FR-=^%#8Sxn)=<3vb-bVIxb=S$!T)Ft&Pq_TEuc& zr2F92h2Ol3HOTm|59j!cHY+BU-+oE{_`Ye@OH%O77qI;LBQG9tD&a?-{-Y0^q=+We zslUYOU7lWT?h$`Z8Yj&SUs`ju;pR)d!S$EJey#tid0sA^UDmts+S4_!PxV${DF8x4 zvJF$qKpxQ)L!pW!0i~v%<{4b}2#ZMZ^3mrin(kI$K=UywwHYAc@T6o3Zv-rJBVY8y zh`}rpNDHT61Z1ZQ?c8gqy|kU4=^&+Xha( z)2%LOd^WkUF9g2nBV9Tcd@Jq^j#0J9b?6ECVbO(zq_%tFV=>FyoY|>a2VD1(3d={n zh2E&Ru-$&EXJ*=&1f+6Iack^5Pak0PWyFm}ls~reT;{S84t>|C*|>{>$!Gb-}(n&nTWiO9xFA9He-2g~KVSen7b66wrA= zGIx7NmCGPu~ase$Ib6Zu2zjN!7V0z3{UO zf2n`sJxeB^Tq^ma^yH`Q!#T+(3ae4k)P&wyYgbCoWQ;?1^hbT<{&cFZJj zM$o2?qnxGlwn@CwkBCX4{9=NbS7w#aI&kCX(PrgRbVAC;vojI6+K^G_E(mEiGxvDO zLcORT{yjpU>PLR>n;@7W$y<8EVDuH~U;E`_$|nYNiV}1QUn`+$oDU6jyReP;9UFyqd@$pWCOteuX%Zip-+3})BbB?laQWWGa-)N{eb|Fu+9YA zzV_^lz0Bn~w>e*pcg_mqKE3+i+bb=baaVtmWLju+^8Uvs*Ohuo^j>Eyw zTbo;tvl8u=W@q-PYc^ABoQ7Q|v&f1z?cIdpVDk_;RJvpdMdz=SDSSrC;{K5rPaBr`}ye^VH$nk6*A7L08SA{ULK18T%JD6`Ojy- zXm$k}AGM-#%~-0@!sdl%Fi3wu1{)M-)Fv?&rpi=(REygW1y=PG2BaOFh2e`)3M04Yd#Z$v zdtGC}|0z-j=FLa8uhJAj&1G*$AkB@RwC zep2l$MccW6k$J;`82y2ecP$##9mBH-+^j4Rt0l4d_VqcOj{9Nxsi?h;O`xarp5xqe zBCX?lZG_6kvEcgcf(A*gtheOXWXdgRH4LAw4qU1@i+Jadg1k6>*Sa9ID>nSh{+#6r z_lD_G|3Pu>5$)EMcI_IWt2Qkc`^q#k3e4WBrY$ZL~ybfYF!D7=rz*DO|sg8kv4R9^s!dC-o%D$Y{An4DKd z!t1Ms9bccb(`?g;l7N37EAOr-OZgt(*==`mqp@Rs30t`1g5NqRhRVez5d9+-iB^^GJ&s$wNOCq?^BT_6oOp5ZwGcBP{T zK~ZD^jOo+T#$WqNtW!L9I+s6qRr!12u0sG&chH$^xH+??yxa%u>(nskSz(XN$G#oM(Zc2W?CilwfxA{*ChT-^DWoWJio51@JXr;0H ze#x(k#e4V*O1v0(uV&lv+ATfL3Fk>S{HR&vq@HFY6E_C1HKi6^zrr#F?&FW6N0^Fz zt?nd%-@MP?3YlkOXA=0O^Wow$R<4eDLz(yP*Z95E=Inih8(#*K>+1j|>J8<`q5>`; zEH^R{Jl^Gd=vGA%rNnId!XmceWU9|#fT&1$x5|u1rg=7*(atOeggL9U`_67PeCT*} z0ya?4=5CP^nD*!bR=SZc0f$M$i)x;2-^29!a4D?Rzg==;WgCOT+&vSwXlt^I8_Q|~ zAX~d{U%{BBT9VJR29g*RxgFccy~e*{rIZh`KSjph!qC0W@`@OciMcM;Al+p#@c6V{ zX6I)>q~m_l)|D`LzIHnIT8iufHkjN-kGI*%>!t^y>>6&ZZsj+8L2>|8M-~|0;9ELT z5-8!V3p?{AkIbI|*HK`ECX}H1G;#B`LpeG9!b6eJg6tYd3?m{LlafyVqdQN(ztdD!?rJ+}cQ@ zV|H)AoB2pyK@~`>InaB3JN)LVEJ1~^>CA6^mmLP@T4hkc;V^w+LatqmxR|OievHAd z4i}Q~|Eux_bO(jV%<`%uI_Wu1M^)}UD)%Ua!B?@_E!AS{8<;Xt&2ql=%G~QKN~{Mn z^yp1?%fgK^PaOKtQLFG}lSJZ*R zk80hmVB?cBw)MqD>W`=dwY2?^KXWSPq_G~NWT>^>6K3^xqIgiz}%e`@* zu{x|;X8HZH)ZTKYL1Yl7mQikeSrpIOzq2E>xE0*eTNy_DHO;=FjblO|hyC-tPM^YRWg={SCvkGB^C2a~1oV%s!kKb`TC<&8cu${Mpmr%8fouSIi=avk4f2WbnXTh0cfSGDY2m%hhu>IyJ+w zqvPc*R1dP>@)!i9<6WG1mgm-5V$&e>{8MgyBkmG}ad7cDl5A2e?(er1{>*@0e^FFZ zDh!QF7(!UR4nWnYK&L{?tzMj!1g~J%0)7&B1{NnO&UG`cn8CcnV4V?hXbjv(1*_F> zwCfbT)2IBaj*^N=Kr84gh8wC#ZjS~E2{Q#D2T;?8jo~6-Z#H!-^ z&O>9jFhV4>aCmra*m=0IdDWe+4+#dV^z=WRtCPK`JoC3+4_Ud85%dNV--4y355&!D?ke=4A%-Q6#-ZbUw^o+Dx)EBMxX^c_bQOLns6wvxRA}))g^w|62qe- z^VNcUQEL;hlIfQ$o*^aA2=>a*9yZrInD^OXC?CyP9s>|$VlKkpy@YSnDeM;#hL=e|D%)EDs=v^AP*=hyC2nKCp6^3xYDvM0m67isexLT zb2WAstKtq*xJfL)T@k(EXsNyu6f-Vv?n(O=3|ffZX?zIHg{@_vuV-S|BGkqL_S#m# z>>U!2fh?rMF z#7SX@JjjR*A~1+lB0_ry5vaU{C^7{A7os*?3M6ZBz*5G;r5Dkgxe0OFa54k!D1{Xc zqYH$uC~MdKv4a(8j2Bzalm$j3e*G=WlL_Jgz}i@_S18zbr({PbI$wb}Z2Wl7@0xfS z+Et<5>Vh`RL*xs!=NWPX&|H}yTPkrD3j$9UTLS2Otr*q$Fo%Jfs`mC^mFLTlI0dqR z0&VjaSb94z-MAlZoLHzlG6ZNdW&$%dtdP!+lL?I83gX0=lTnWi6=i!{1=+o;KtOx^ zV-8wan~{k22BYTJCU+usaL~(7L#fjs+t`b)D9cfxwo}nQko8y(kU5OjTC}moCHV=( zC~--iHkN}K8ytmLd0LtqZP$xjod-F$!geW(U3j?2w}Qfi5}YBhjv=6CX!l<$#^N)| z(dHv#IR=Y1%h=z-|W0Q_n*!3&>ZLZPYvygw6{zrHJyqy1nN7LOSa;6Y;ki zRtWIp6arT&tWeAW*hbM)>i=psKCW&bcQe%%@u6K6hDnzpR5)Xs?h~>_^P}z zhETAVEg9NeUv^~I=C^li0I(q8)jlbbF)S!Do`LuOxRl(JSyrqy%L=^LQ;gMv2*E~r z_HIC6$PnZufXS@_YA3AF`1(_QoR18pdoi8fQ0yp#Eqj3nRBB!8m4$ggp%Pi4k(C&o z0fJP5-3k;ijVb^Hg)?RO-monWG5NBxWQ8E~6J(5nOFu#>#)6~Ym1q&F5P*9Rqp3=u zpcmHcf7dV%T}VamnAr{Fl{Lq|L_EK@;rW;UW9UpATKpe4{yckjuN|$e%W6l5b*d!Y zJ=?leQb{FYDG6cq4Y_x8OAR4}bs)qyxkA3bt)e8XBq1#IWs)q?H;I1x6Lvg%KF@pa z_v^Ln>xN&3;)Tr57?IedNk(q{PE`N`rkIqzk=p`bqa*?60q++Qta2kz2mJ4x*kxSo z1B3Aw3%zl3h95cLOpWF7ErX zM6hEl=EC;xJC0yxxw&yzj75H-iw>jdjK3}{fw;LpNFNY%v6(UtITuANMEtxpy2^K5 zZb9KOQ>0iIvZca5%iL2eyNQ4yP+PJfNBQB5|DN+mU#nYd4*2^KJw*U3tG2`S*YuC? z?O%-mJTY)hIy}!3b+BM!uqPy)ZMi!di0b)o^p#uOvB|;L=jW{=9s<%vmv)v>3ZMsF zsO4bHNe?2iaq3czJ=S?UsdV&Fi^JREV@~Ss*FjH=PoY~!P=*>9@YucJ6oTZK<1*Ni zPqrcr2wedK;2%STNFjoVtWjkZEP+|3PP{g(yK?_2k|APG-Kco6g36^RnrfuijE~U~ zgR_NLPLu(WhSUqJ6m);@ty=kgOknXpnYk^XS=&4Yrr{*(`PMr*zrt1XTq`avO=q(0 zr<4|U&&koADGcuO8mn@_F#)Td=S^Mmj!r~S%W5V2E|0dhfes8xr+;=joFPOs|@rV%pQCPVqDOQr3i6$A>FE1@Wk-lbwu03>EZF$`>am& z52Y62L;z=+k*S8xWyc&QE5z`kfaEA19$Te5Tm%8~!-c7K7yHj1Tj^{olrwh!^%NU1 z3N3~rv-_EZD8*kyB7@cQ)bFiJA;F91B3WXF$!ntk8?j6Cfo==LBF@iQ+;mUsxLVL| zxA^|h5>KAU1!41F2?!hi7H0wMwc-Y{-{qOV9v?X&??C`f14hASKNMDg;c&&$U44K_;}5R<$ek>ediVBp9L2;+NAV;8XXzq3t4hr-QL zN_n=&Z!-qE@hA#F#UdTjx2|AGu6Ii;wl%w!hW;M^AdcnOzPyJ@J)vBVE#TPpL16{I}#Gs+?WXrhOQKLLyO5WJwmHcz4lWzO{ zdnr0kmvYsAqq|59IBtK)x%G#87Ks_^W!w~te>P1d@BdxU;U7}Z0%$Y6-&?`e;>(?2 zRPK)@cIHhN7jrhXuDtR=xcSyX;Oh?oIbb%uklOL|(Bmgi)6CMchjL9zoSA-+R~@>b zYQz52y&FvyIRBY2N`|gY{DqgktF1NSFPN1z`fKaQm(0ankBX*aDnIr({-IIb1Ev$Q zr2aEgf@e>ESZ^)1??4

O?!96lOZ3tLeS*v{xpSS0ywHKb(YI#Q85HQ!I^+Gl^-g zP8~`J2}t}kdW2tcG&(E_G=LR!oC3fk>S?91vl=89mZVXl0BpA2r3i~5t`4A7YQO~- z@S><*1dEc4k5-%0l6VDH9R}EA>Of0;fy9iZUoOSG?Cc7{MyZ8vh&o;#QUTf{L4c%? z0REo1P;5FX*Ar#&N(uwu7zld~L6sW3W4#9SPmn;nmC~}@Dq2hj-Uz1Tk^RKja77D! z3|l#Cljh3EQL?yIxh2ms7O3F+$TB*`^1hSJ5L)K>|aG#7>C`SiNt&TnACGHWj~>`RG#hp*fDV`EOLP z^=9?W!pn^zvx|2FmMk917=WQ@#S2jE0&zkmC`7u78c|gst5jednm|ubo!7y*n0Fk( zBOlesxWaL8ZXur>tP$^OPQiD%h7i(#N+U5~uu_SjA5}xZb%1=PN$b6z#vs)vQv;?R zIfieDvEAD)9&zj1Cx)m8I}QY$=`BgKuDcGU2V2jjK55HA9x@+uJ{Lh-wD!*T9+7if zlEeOgg^_KiUi~Pw{buj`k=ORk~YgT(iTlP{OV$J#!>MZdYN1$5jL9tLLz zJ-8;hx>f-G88`iBg1Ij-8WxSZ{6@d;PlScw(@*qytPvuWaBKk z@V|z>ZB8#EQ*VEN-7?~#bc-Cm9c%vL^3etVoG~cRU4HWR-Tb~5hn=sJ*1di|)>Pj9 z>G9QVvx@zF@7j7c35n}gTtckU`u`U=5wpC_-SNe#G_#xBoi3TnFRXfL-1m25Qb`=` z=c4%pOT;bAH8ZBR>4e`4_I8=*eDm^x~%Vm*g^vUYo~q;1xD33!!ez zuY3MHv1n}N!I6d$e&JGy-x({{dwD%LwejC#|a_`k{?F@Hv#ON5@g9*=V_HA@n zr0sgI$%(nq^0xcn`N!H;;f?;miA_5lF7=kho(u_}xYD^{<=wuUTiMGKH(gk?^0SSH zwRLEza|Uzw?6OHxzsoY>i*yU4C;M8n?-oQmAHKS0X?u=Wea$)dLJJ<>R$ zNzQ$ZFKcz;O!VTb%kM5p6Jjl<9+&x_NWJsVfWC8~S{%RO;mvP1H|_dG*d1N#u03s{ zS261G5IqC4y(fZ*brOe>sN)}}^D8&_iR~=c+!_>HnFUn1a87N?BpI~Ow`Y7_1;o>r z$*WzTlRQzopAD^lxA1-J0q=~jd&iD$I{%Eh{5;uS@Zz6xh{Dg7X{wTKZ$NyYsn9RUx-KD_)4!rY@yLxfQ zw>ubNvFOrr*I7TklO$c1W~-I>qyivSEwKn?0oF)9W)%#eTr>bFXOKkUib;sf0#Kwt z*sFO=ZzYJR(~vv?7&S)0;*c$<1>>D>@tKLCj@`vE&#OKDfhDzBN0+8bv^wcBi$lv? zC6S)W`C7>I0O+qJwI!d7TuygZ%lxN!p)Lyla^6~oKK$T!j0(DTx6L0A(E4BREDH2Z zZ%x}1DbGH6`;AF)g*0YV;5!9$kIKA+stq;_C%YJSufVTd1=c_D*XdNwG zhp@2e^EV|+11-g0PB#GWTPVNdPRhn~^!B>u2y1XZMwaIx5P* z%7n+WCN$$Tl9bekfzwsTBG728WUiV|NjfuEkN?buHzbQ!OF9C2 zR3^PJ1gK0!AR!7c@l>vIfF5hedp0SV;7FimaoZTQz$crdLwkTcTi zQZM%ETeal<*|8sQI}Wzt+mNhu6?;vwF%p6M5d+C#RyF{@;%_^E8@}))Pv52jLYtL@ zN;GM=m{bQKqhK@=VI-ogJpr)v`tg-TZW@Rfr6h_}kU~a`RIy#i7<72779#8h!{kpF zz^Z`CK))!}Ea$#}wl^{~VVP-(erY0$@5Kew_L=Bf?V^GR} zw24->1`N19bZ$J=;O66-^(y~~0!@dJw{PpLUjkPxpa=oK+?K?)gF%XaBg0m$+FK-2 z1HQwp9#J4l$M>&G_h@PhFT^DzbOnqe5~lNNv=Trf7+5&YQ;9+H@s()YfCO0w;2T!6JVBJuFg@+T(G3TIl2#u^N4T!cfzp!H zBk}8#_?NdpQHX$Sgdqbqoe^At5tcB(fhAIy&!B(g?@r7bfkaZ3fG!EbV!bp1LKojR z8}x62Ec@+^GuGLrKiKvGd+Wg56mDq1Olv^73SS9$RzP$>$r_b8lt}z5q|RDMFWBe@zn@TNN9o57rO{TK;=rC>uny*KG?iTz{ zdw=d)mHt|DnrNM`l?2qaIO?Fzsbl-LeQJu*D=eYeg}M~8RDqrdYnk+Jhee=jr;JuI z;?)G1gz|YBS$;L-liPahxst`I>*@n787*u|3#;A`v6f$cbFFQIvMhtjh&W#zIodt> z`j}q*aAI{6%gB77tX~dXddYJn9KIf^dm+( zNKZHQoO-|+6kJ3ot#puyR_2_|i_Pfr*Q&NnOL{WaVNPKG_xNQvrQL+la*AT(9OwYh zTKr04{VMo=y9I%2nL7;4#%Q2`QNG2D;Mon6P}>JR5h~Lt*iI|UpMJQZ%jX+-FdetfL&%Q;*5RJj`FPsYXz`JJMJq*xz^QZf5&iJ>9vt z%|!>9dWugE-~Y0WN9YxBn_GR{0i+somqUJ2hl9G)o+XQKR+S&awmW&iXJe$=da<3R z&|7u%g6egx@u1TUn6825`My{X{o%$2emxI1R&Qu~yB0?XCjQ_r6yh=ce^Znz#2|W|Kl@+nUq(ST-ICwr?;3r3z%s}Dp z=p>EAYewcIlDIkQXDw>;)ir==gITU>@gW&E8u&cAh|pYOo73vqjPXnevj$+UxOJFX zx9`M?ik$mKt8I3dRWD@7XbBJ>v^$eEU|>Dn zEA;bKx+ttm|GabEKJdekA7C0r7?3$N$oxHzG7byK?n>H#%)Sls$11N}dFm(9rX-P4 zzt3NEU1=|8+xLor{w-w0@^E#Lkl8o&O6oN#n>Cv0`jWQT;_Z{22WdtY0D72b+xC}B z6lfZeKbLLfF|tHJRRtD$@IjufTtG}0FRZnvghKp5 z9=%zxa;AV@GU-z%sBSCtk_#}22jjbdtLaKpIb_X1_~o?vl=C4^fR@{8cm1(B_fw}- z?A8oa7I1}P zC%K+(pXn>&`8<8O98}J-n_K-V1dI5}140?Kp+|M~<`NuWQX!kaKo6{I^>e`n9~XGC zu#^(WU%SDp3i9t23|57&-oe=BbDvlXecU7f8}cE+y%&DN6;fLZkZPvg}u1fkb;WfdHy_-=ymD@ zeOW|Kq|ZVmdf@rWZdg6J@2@@ozak5M%{uR!+#QeNz1oetmnAD_1CjZ<69|Jr7^eq1dQ z7Y$gd9^O5_=o)9yH9!c5AHZe*e4d(7(40at7@3Fmz1Ne_6VpdRi^M;EpSd|$p1U4a z+x{nM0MO-Gkj4)!w3L6@b$iH9|EPnx0o;R6I@y>AH23;iXNnSL;_fFT*O{ic?0pkN zY+Ew$S|0nz2md>-C?m)uOB%RXx4aD4bNK2#1ZH6SkHUye_p)4fJq(J7m`WI4m^g3y zlS2!X=9(q5sfE9vp7F0G_-WqsZef^QHrt!|^2pU633v0BJzh@T@$&6lKhxstf41P> zuVgch-qi@E1Pu6;)#E*Nk^KjDLZQVOwbpQ6tm+a|%MhImDR{e+_d)d?GNgw`I zd)DT44%h}tATr>RLrLc6VF(_geprSsG(=%NfrBztF%8%q-YeAb4_Ylc>b~PptpGG* zW@$tRHQ;_XhbQ$NRcS%Fh8FmUmr8{ok7Tt$qhO~KKnia%qmWvqmc^jL^6scdLN6@; zd)tp`xP~5@NYPR_>fAEsgTRdk|K^?9U38}w2DOh0j20yJiZY#6AA?VoZu@;l6^!5FT2F5} zx@qy57_0W@`f_W0Il_=2Pe^RVKRT%zLlaLTBD-nn&SO)q)(Kx;|J^eA=9$OZ_a3V+ zepz|q#$b0eGwf*BU+*PDy<3Y>#mCr*lcNiL{N{}>9BlH|T0kl(XTpQxogi60fUBpUbueKQ9)tj@g@M+7}MrJ;*Au zWL59COjz-?dXlq0)L)(+Sf6JZmr#T*vdtjgAI*>y+9Y_+ zUT&RimbzYieeSPO_=|3+zOkRuS;+qEyXKP0_ebiIvvv#iU*P{l)+OUy_xLFCZ`~}W z){a`w`La;9s+hpWAeG|0Uq>%S`2R4!|A|%OnWM?&o=8%~m`f{M0*bRw#JHYxToZQf zrg~}S)1DmKqkQPpKt<5juzEbqp^umSXXy3aAomx+b6K zWy+F}NMc2yUhIjGv~VFs9-ksXI^$iM;%zZwD?vNsil!8$&l`Zw7YZoE(XEDXx0i<|%JEcWui9NM2S4|EAi4mD>@?%$a-e&_uW*PF+#24gy>=C{5* zD<(K^*r>=jpJ2?-bj{3rrKX&-vTtW93@Je9NOU z7wdzm#aBI*J6um(F_#B=*1P z=_Y29X9|3ip+S}xV&*0Mps1S=%vm+2wYJBFUWCH`N)SK_Vd)j#5+|JGZF;affjBnA z3|X2OyN!A>F2M?G3h>z4WP{qvItQ1Qya1iv+#rH8mRU?s&4oTp&8d^N9+Nj*b|T|SyelP? z|D}&tnGY{BPcyoqK3;a8yup)UY8Po95 zu}eba0vbYpPP;o*d#!NFc z=cD(U5}U;jBZSALMzAK5)MRC8QP@I$>vnkV&igicWU5acYpxfY&y3)<`Zwx#CY1{8 zuZFhpzWlITvl}o6!k0^3)GE@V(BTW4GnA$chGmj0C9Yq~^|3X?uh%5g$ee>q;CC3CP7c!GDt^1j_Xm#tR`YiNqsq>yjc`lmc?861h&T+-Niie;VPT zVsV-|PZN4@rwz&XrZr~ua|-P762g{d!Im)*hFGT{@*7~&Q8n7aU4c)M%NSb$*r73< z6bXoN=o`Uf5p09?4OS)#MBOXq)ON1E8kW#jwG@x&wjKkeD6-325Ol6!PI*zZsZ#a7qK7}U12bUO0xHrXumXa~Y? zV!U)?l#n>9!}v^qMD9e*tzTT|U)%JD0yiFWWlfuZmZWS~I?Low`c;4H@dJB&1rO=> z3;f*%#fI7%=BTE?BauSht*K@{bXhN-D5NdZrVw-V`l~(#IUANS51Qr{eNJv;X$8z7 zZNb7ipmfjZ`#Q3yz*Q5fIAV&r6%y6|l<^Ji6l4>3{(8@@vE!D$FaeEjN z^t9rHe=va9qea*ahvpvbe?2k?6gw8=Wcf`<^5~Uf%PZUoQ?-g5n*MdpR8)RZtC+M; zk-{8RNVaf{itOH}bY@cwqQyGmo&o3@?pYvoT0*8&dRac2B_#`fjpOzV^Noh}tMqat ztyTn>sQYB$`gzcs7zJXl#|9|vDtY5*4Kql2Kj8h=u*zXj$Zy|83JWpzdMaQRdXVO0&Z+*L>@?u%sZ zHGS@Ps2fO94C!@ebNBCK9ez;~N}o|)o9$SkDqE**d7Kv|gl6JW9iw3CO0^PFf(LBY zcUU~aO2aEY9_gF_HMOD%|D>w2oY)%+GrxD@O19y53nkoMiO~4RI5~+?#mxB-67aX| z{GrwR*pF^w(S-mmMK@G9Hvuyb@g|t)nar$82mNyme`I2nQvsf|=G{@VbEaTUke3p& z6qjwBxZm9&!B6rGd!@AZygyCh=Gn>2x5p`7_gP#osaW90#OJy z!dwAdY)4TI0DGW?D_riYA(fV*kPo<`a3!+XAo*WHS@;24j7=kg^b#5gx7sD4r>;s+cWu}AZF zcCanav0eaxVfJX95K*RR8K~)L zpwt%9st$x*Ky{IkGZBYLs_sM((37>wHLe_pIw4_B^1cVxanqlGlRUGj7Eq+xvSE{r zx5Nk+iPAm8d#)K)L2R$DsO45L4K81C{9RAufcWo)hg9MOgl8xiUMiJnD z)k0LGzJ17JMx3R`3n^1P!%i6Aq+y!ty(EBzmIu6=HF#btl-7xD6>`csq5iWX-GP~> z!9Si4>5~!^9)X{zqI&{!NLwg6-uQ{)r&oG61ZaZKf0>gv0VXtzk&O5MKo~j9(a$pz|fgZ`0#)moPw9 zhO>l`cy&HbLecXPbz;cUl^_*UEERJ;K927QbvUJ4a1?>if)@FdnI}&zvWZzuiUYpt zkrAG0+Ea@R2_lkhSq|Gcy(dKQg6@C7R`6{sh0F#v{sVFUA5|Svh|FLQki>Trvx#Y9 z!pxvWvx-^L39<&Q%;7oOS=IUh{hda`$mcEEHf)horPjGxwhSV34lz8%*!hDN6NC6_ z1)Tyi8>+xWAu&N?A>skts+(Nl<0dglCuF`7qN+6nbB+DWTHKuL)=kuZ7_IJcWNkLU zxbn#W0irtF!D$u+p|YSTAn_Gc$$KPc0Y!hm^#&?9H?ULHOq}q?(F?>??H;j+Ie)4w zXH;_vHI|}pOtgwRSw$G@s@rU&N#f1tsTSt*?0*h2GeGK871Q7fVGYF5PO zq__BG3^I2rS(ZTO2=Bo;Iwk34pI|{QQ>2}`1f=40NOu;Olt{kTE(0i{4XpzIa>lL zt5Uva;zz2?s4>ilY@0vW$U;u2+ptCH4a-CTQdcqmELBhPR$bD7T2&HTg8Gwe!b;YM z5Gh|Js6-`mpnS!SpSzwH%Rs=moT%Yp_p5I~8DfRS!W z6`;c3Ig5e;3|0f#D^@aChzJ1dt#M+Bf!^@1BC()O5Pbat3JscQgU~ph30nWcG^ltn z>65aB3|;(&Rvc$dfg<@WwF2#_A#4^S8t0p6 z#pnbU;Q>JI(*VK3UEg0Mjw6yUMcW38saZTSev?fm+c4KQVD!6v90Dj+7;N|+8lE=W z2%8LOfi|28O)}4Vjitk_=fOiF(X2bITtexiVeu-Q@))`lAZs<0JHT(Q1nWG=3}xeM z72sZlf#$t)Tv`t4A?K)=7Rkej5ZFp#j;Dg;ZMxxf@2|*7K&!y)6qB;>5C3*3PYSCzjG6nF|{GV^{t!_ zE!+vL+fK+jeamuisP>6;^|=G{+zWC@oS2MMPUKM3D*?9=89Af%z4_j=jWbm*U10gI zi*qZdakeNZ;k{dIVV6ryXxNatxtb+i5@jy6w>EYheeaSUWLu1MZC(y&-p|n`94qUO zDCF#Yc$*{RbJE23)gW_(tuvT%Mpv)(UthR>jlIDq|4@NT-wg-5y!o{lr`YPH?i#H7 zn1$lNn)I=GZY}2PpR!D~C(d(h4AG-uP5DRl!ma5x|%o{xu&&};Q!cC~Lr-ht;Uc)VJDM~7j_WajbYkl!A#M~LH z6PJsj(@=b!q5bIh!)>oFa&I|M&DUC_9EWP>U9q});7-YOZmvU5DyQ0|l<)8Claj`w z<ge2rJ@VN zZ$1xPxcRQUbd8<4mUYqo9Qe8;7KyU7jlqb*yD!heNBOg@w|~i*l~Sd)Vfj$c6Ii|CQ!`IedFb_2RdA zFYzn#TdVzDhC?*xnrh6NeY&hH=QI+`FO)y9OUPec%xNvkZQYW~@fYOPp69=RwIEw6 zsy#SAt=3s;y)~`6wN1MEL-5?*HGiWL%Up(B@)K-?cbdLnT^n2Mwza#Mdauv&I%YB3 zc0FL-?ROut&brulo>!At59S4BohV%`macxw5wKcWQsJaEXII)+k1M;wn|&*Pnq?*A zhrazK$hUUM5yX+&(!a~?9Rsr>@=NQbK~t%mLyXgT(&%jI+TcqIA0+;C&%5~*QEonb z#stbK%JueaZ#d}dF>St6Y;~z>=Z&8Y9LCP)wtHHtq@BB3YKv2BME5^+zIK`T>K-Zk ztF78u8)(I9J#Wa5t{;wmP-44E8tkpzx54`EG3kRZTsG%l+tQVaV`kSsAGS4L>1J?% zJIq&Q<|*k?@4yzjKiDs%zOtCs+xw))T#vmXJQVm3gCz>c*4x=qA9MIY{)(`jvn~BA z`2jQ5CqvfwZk9&6t-Q3hIYX~4V4@pB%C|KW~ z)|MZCdsS?@ibpP&-CwctxQ{Q{PD#yJEYLs7%R&0l#oi4*xARVWa(PEj4)&ch;B3;nB^#oPQ}b>2T<=Cq zwOl0xYdd6C1E+Qe0RWG+1s zxj-zmf!1hH6&fN48hlXzjYV+}#ORl!{0Q$@jg3i#GWgExvg)kqxZUSK4Va%?oSnR= zka8o(eLCy|y{7C=+?%D2CMKYQGNPJ(S4Bu_t33E?iS;hqER@rTX8sV5%+SoyR$1!U zW*Ltr6I*ayDn{ch$WQK!tXgzBacae&r3Vf9p2!;GC02pTTY-Q%kkHXk)mlKY3abpg z$`Rzj6Q7>NSykmr4N!%{fN=3YyYI(gHTp7c!7-O)4^Q2=jo5E8=W;^A!?%l80StLY z!=b?tA|8y=09RJu*LW3g?$8ZtP^X4 z60H`&dlpQoTM7-<2E~T2+i|XDR%i<74E*+J1(C#yzOwxRgY}faaGz}`05djPQ)Y>% zR6kw#R#$@owprvTakIXHC;sla<7Adbdl-X4+w=e@eID3-tfb%2!|nd$s?Nr7oB}1( zum+ti>Sb*$oxtZB<_aCT<1)oIy1qlgS68>=2UHN5cqHn=nYej=K%1chw--TijM6Eg zTun_Io(xBgVD-_CjO;quz$c&Y(Wybx>qD-PHIDW(J=X3P<7YT3K;bN%apY#o4t1|)h*N<(HlK+JY&0j&q3 zRhuA|8YJ+1HF*}?ijM%wvQFR5zy&H~c#69iW<@yO2eCH&5@0*-N5y`BzbG||P4d0= z)PHKqrNjTn)X)g)x6W!UAu9A?S%8{ybxFYQW`PN2TWRavfV&;H^5n8B#pf@ zogk%QBDL4pw=ENC)rF`V(j`Qq!L_Hv#Eo(HUrfx%$i~CfTTP;oJ#KWOKko-Y)Ht(cGTnW{QS`+@^Vg#7ELmz7?G z&w+hw?&DWwBX&oualW=I94ds#`=<23d}ZtF>CEC6i$4LYWx445=(3H$l(-|Oi_Z`NOEsN`n7;DDKw?$ z+i{;f%|p7pKg8jIx-2by4f8y}lP2*n#EJ`+xxiX<;z881QHaV&=e-HDp|)a`xLbOe z6}20pL?M{`z+{3GkJ9$3hQv6rXb7fNU+Q-=`=D)iq+KnGg89tbrnv#9*|=Eek?~aE8M|PV(a2U0(t9t7z1D!bh_pyAaFMfY801@7ZF-$Q?4o~=C z)&D)v-}#3uw(YBNnsCuH443WFsEo%=HM8@zI@0bg7=V(N&Y7&joNE$T{7~ol*GtHO zNp|ITG;(2iHFjw^f_5&a%_@Rdyrcp_we%{+o}oMCd7|w$6tz2zAWU{AaZapUUgR@j z_-JR+d&^;k%uAPyCZSO37Czqhcgas6_k|c)V zr*5#s6uAazJp_Y@WQ-n=OX0SYdXg%}^@v zxY!?PxvoN5A!UBmcS*o>+ab zDeNHS4~zj(A`Dsd5u9uK3PLt?Nbj;J77Ez<3>rZia2yI>j$I_WT4oQh{4Oin*;v{f zMYc;+1)k-MyA!^9R^H?@lex?GjPtO3wFH|d-a*juQdS$ETH-nVZC#h3Y^P|pH(>SO z{MwOI{(H6!-rK0q%Q>mkgPwYUB`QdrDaQWGKKm%EZ1-V2B6rtrD}0}k^7vqPVc4hy zJ+KJlfaf6R>jte)i$fMpYJPG@KUr=6sfzTHS7fuGHqu6M)B^>1sWqw__7q$H$^5|| zkl_Jwt3O$1m0dDK8|DV3eTvR!sUZ{6TWLTQg=f1zt(_i~zal$~Gr;k501j zhE`t#;TI#{x)$4ciGS zRK?j%4lwDr2L7r>Y&k^9mt#0crv{}9>F~y33c2%8N@>cL*?Tu!-$;?(Iz*5fO>bB^ zYC}t;U|nIvCOOzXh{);%O$yu^5Lk&2u_+2`#!6}jF&SCzDGK|!V#dIr>8ea%K?8XL z#*XSpA~pGr0;7?m^oWgU7@T(5lC1O?X5pfAy z0WmFHsI}hbSuLfZ91(i{s+e$IXb>X;{-cnSzWL5))23t52sL69z&~st@53PNj#|bj zNe2PaFEt`WNXi39Q!vVpPnyN5iVqz-Kz7}?T0xG}1tWvNdO7)m1~aJPdfz7=&_R!c z)Jd|JF1{}U!Az_dvvF`>X)Pe+)E!oN_G*2j|}8re^d{asC1 zt8jiI!v7YN^zg>>6mqSGT&3`I5bb%n-S|JY^Fk5S=H}Q^O-HJ1|FYpXC@9-_6k3b1 z!>}GtxUuBBF+xZDbDi+R1v>=dhV+6Sox!xwAX#oW4B&q20gCXZDF8pKz)u4NvWE0l zOj{OBH=*GwGXW?4glCc0{%(LrLGF-agn_6%Zfv3sH?4zGmZjoVE2i>|5im}oK#2AG zPZu3RtP2f)hS{?ovstV^b|#4_AeVwoWYI(*w(G|+D>1OI7c*Z@F$1uRz5_u3Hps;; zmL1FLT}}xj1s$sZcf{uJ^_wZ-kTR?ckwA&pjLNRHtI0#Q3YC?$dFlf{CQ28rl@ zdk$}w9(a{d_2#F=42=C>tF1#O5TGXNakrCd@bh8PB#WHZ;6Ka0Lo^qn|4kvkVVQ?q zH993He-n}~HBcT!8T{oMXWI*8Q^@9-L=q*1dL8YkuKXd-M{#-gtcW*Z>|6EngJRO! z2E-5rZwjy8K+FCXg4*F?d>lr(d2x2!h>r%rz4XPqdZ=^dw$mD77>qRt!!ksqDHqGW z2E-MX%?}FcE9( zsMIA=@WMC1u;F+Yg5?9vb*r(@)0jJsQ!Q>GOkr@f1n`S7a*8@(5wa@@VPul$*&MrZ zqYmI5+j_RemIk2Ee;M!j23+o=|24kh>w1@23?6w#;=kQ0Ds-HF`@Biw+%=_PYu=*G z&@JHeThx3W)xDA8Ax+78LEW3M=JR#an)!2QcNi;FC`N@T5r+KWBFAWStS*>L5nk_H zyZPG%<2wxo-H05KH8ysyJCBag)1Mpa@eV+O0vVDCgsBrOvuNp6l=3>t8WdlL;|J>g z#xx?bSzIf^_LU;!06S{@7~S*7Hin>aFmZ7_8#t~fKJX}3-e)8 zuo9pL{z5HKSJlY;;i%#X57X{W>ykl=Uo~xDoc$)+il;eRn#n>g!2MB%;V-S&{xJBT z=al(8lZhdhGWPND>KzMsS7(cOS1f}}rd_GXJgeZzi=^*n9+^!}nN}NKH|_6c?^0Ro z?$nn?7ex=QDou8YSi|28n#UU2ttU7hox1${!q)ZsQ)s(Pu4s*=ye*^N-edMVkXfEZ zbFTefZ+K5nzdO;WeN|PR--umt%wR?H0@424B8b`Mh-$r?AI*9_eOsM)CnVa)#LZ6d z=r%Fg2<7U1(&6v*pXV+B1-%=K-oEmD_loj7oT8qlK4@SozX7e3ZQ1&8MFpmopAsRA zDpr`hk=T84)6>y;ny|UZ9XE=3$fhXrxcsiw%@tX9UH6Y0{<|(9_Yw7eBAs4KyX&J8 zgmt@{+11ET?zbOpFtZ-L_oKM+l|yUkG{qw0&hH&J*oYS7x7#m# zjO=`)^(dl)w<1^ZQkgNzI~BCz!R8oVo8wE{wiV3=p8+$>N zkZKf9NO+s(5;%G7ZCdI&!!?u^diyg1S3T}dZ)Tg)-wr!R8GaLmbR|Ks|Y^e48w zAnbbTqug$__~j?1@nPECUu?%@=fARC|MR$I!c&R(S9es=7>#!kH%w{{N2)JAoDei7 z9E&W@^eewhEg9TYJxa0edT_P!I*kCnb^P*D3Fw~5UZr|uH)_1e zQMInCF+Io)Tv zn`uYdIg^2kWjWU1j<-q8=PKLAONzdmJBC|4t@!+aefP=PXV>O8*IO`XTcar+aq1PR zR;{CV=OGXezX=6|?Xxp8&qr4L4>^ANRFbof-^FHkuK4)e_*LIFv+fBpd%81VW2lFoWXiAoaK z0^y5{Xi8*a#4b{bL_!4Y`3-4*dvNaQKOtt^{bwM`gfZru=+ zLP2LYpsPVt6^sp_Jf_(I3v?)I+?v+}M3Ef(oefw~a0O9G*2xFnG(V?r==AvgXp7sW z*^KuAsUapLdC9d!v}@j%CYE0N_L1@+=Gv#Zr(q3b@{Q_tVHa7y1Hkdkhz+#SJFQ)p zByL7UHRMw|AqyrIPtym$HD7*nqFm5h8_@1L<4D#?G=HGs+wdJ7wc`~OF1~%Nnv8(Z`AP;2t(Yqs0Fw%%@XOqRz| zwR1ffZB=u;h;8Iq1#UhmasK6hoW~8`%HPd(Axu!>O5SvBmk@{(6IWAqfF+=`gwVEj5w&{)7MAWEVo`HEZ5DshQF;@X)nkj^VSrlviTH zSex}c6;At;lkL+u;ZZXlvyhOf=UtO;E7^bZ^kCwl3+O{u$IOluwd?A9aL)a@EJug_$DFEuW+~APT@-~I&?g711 zl1GJv{c9d4ePn;0p!O)p+D(M$sM@<4d^`Z?1B{>;{A_`^K+ns*B0??~69xfOCknn? zPPisQ0xr-+IiXf#x&L#|!5VT=19Ja;#A-3&p=R|`1^yz-V6ng8nv22rKBycZxucEV z2@RCbG|LZ=tYB1_2GB&2!=lh0Cf-6cKyHX#sUV+KvQa}tzZICHYH~6qEYfA!vaNt# zUu6~W4Id3DTnrwn!%7E9qd!rXT}a1Tz(6&=#f8w~f<36i-Bl3c+f89HPSJonE5>ya zyvS<&FA_O&th#7^aJ z%F8#p+a$|wh*bVQjVkXR^Ho-niE$acS)ajPI>$Q`s$fWlnvjdQV6qdv>)48Eji_3 z;W>eus9uss=UEPb!@^+@v|km7b+^hR(J4SGwk?-0XR!eN-(Zp!3B(|2s!bx#-2OjB zXW|f3`@ZpW=FHYq)3i@D%}g6@YDzJsZBcc1;~Sq_fa{KZB?=az3N?Ru<{-;_K}=GCM_TxNT`jQ-R#D z(UJ>|h+4llkUq2T4DbX_KYxupe!#_#7~sbJgWQ1iRh?U=0&2>&F3U zb$$+jCeM%bi%O3%6BK&suynhLzJ3LVk^27gB}#hDSA0o&Dq?2_ZtC~FV6V?dpu^|& z8Zd_!hClQMFC59fkU`P=$Vgjk@KsCQ)WFfs81EUOX9Oi6!hJtNJ~7fKcxd3&wJMNi zK3#$ZNJG|E{@YJ|x!ic`Szgf!Aj8zC81~}sN8mF&BckOJ+zb_xvB4k6RLngQ21E@M zf`1}X;Cz^btQAYcVGto96P5{gHLiibtg({Jo%6H4r_AR~)y4L-V zA7Kz2b6nxgC<~HwYY`0V1@s7&>1>T_OBd9EbBAesvw$weZji`GYaY(IbvfX(fG{&# z$095!doTj*lg-XEDkli1g6EP5=aPE*Kb=Wse*~cC^yY4@J#CRP5FAiXz)|3w?h0+L z9v22nQOhg>>OM(eE}8fTiHk z?UIB#b*ZmJUX)Unr+ZaGK-Duv(eYBPuqy-|ti;gOdbt&4ETG5d#~sm-HSJFmhQOUE z3T%#LSaUT1e3jag|BOgWRRQbFlqjjd0OO1tu(@5LoPmB+*?6~hpS}J2S}*Md^Gtd@ zEQsj&?AUCMb*o2>@8S`I??C$vml1$3ZZ}bD8W4B9y1QMLjR~x7cf+IT{$MzS%d7yJ za%v=HL7}Qmu@Pq?a!|iKBcc?0Y)(cZJ23q`OL_Ju^>nnaCgmNy#N7{U@Qlu6W>bRmb(>33v-L6~OaSFZ^eDw&O^oFRNbMOXga|o(rd3L&a3B9@b zwdbbswrmoo&LpnGciF$Cfxp znbK^t4s+|hI>O!NA&Rf#{cw>hzx;85BGUMU56z@#*3RF*;SCE)L81zukinPK)>4%0HJ+j&9uvC8TaX1r8`9h?<( zTcV{LHi~5M#a8H*a|;@jLFVQ85qYYMtZcU|BfxnM(pYcTLu$J#NwF@44oV5~$sCQS zw9#w+_g|~}+$z7q!-fWN1uaZ(oND+mSTczrw0t6EB<7Ms|6jCM_3(DpHjn8W@^$&* zmw}BSP^0kG8B#COhAl}q8c}DV7eRGE;kug@^0AK6olc9zEp1mI+J~x7^{gXb`qbHw z>7iAGm&*>Q_8@DVImHpE zn>L*}Rt8o5Rj!T8 z)DSdzGJ#n{%PUJv3pS!NkC^B5+P22s~ zFIts(U3)Sz)M_Ti(y#S-z|-bz%1F$vV_Xr&c=UF{Z}qHv8bJE3AUOROlEaz1sB9(A zw%|(SgX7i8Q%K(Gltjt#WFxnG;W`PMC})%AMKmp7ER~;BV#Tm9k0~avz5ya;^AN)k zkm@d~Urqv$r13#U=y40v(Ad|CvZHFte;OUnSQKfNQrCAluyVhSw`;EevKuJ(#i=Tz zK&{+YOC_N9?;Euaw4Q%g?dCNcqj*4Mc6Z9i4J>K-TSlf->Yi1Vdj~(m_|60Ii?b>! zL?(TnDu%y@6j_QvhVlzP^+YIao)9WQaRP`rQ~WQ{xLJmnb^vHZB|%9P#mcHl z0+yR&_4&ntOq@Rxr_VOu$V5SAwZ00BB^$@0AUeS~7j?j^0^Ft~;t)l_DdKffu|8Ug z%TZ7qM2crPBiM`-ymhbz1reJgVjBuTGS9R?FdG1=4Of&tE^_2&9xKK=b47Rr6UbLv z)|44l4~d%WwfgKyZyMrXKSv2are^QP&nm5NemF5keC54nYOjty=I?QaW?p@|% zI7je@i^~d)D&?ZHp7-tdR-Rk;?aCqHnKF4^-W;*1p0aY5x~GxEY|cJfoOM`EICWG_ z5v<hDHLb+?yDt2y19LNu=O9^QG~`>?mGe$MX- z>q_;SD_#Y?)mAP0+kD?Q1gNmfnQf25MtV&I2BlWC!Z;nGGjh|}is$JQ72a)T$`Rgw z)LqHcF$ySgGCOR2!VDEZ@?_CO;RB1Byp+KHx7|6Wg*nNOALv!gYBv7GKj9OZPqJva z1DL4}2R5YL`}q9g?q-ZC*Q2B#$!p9r8#0hT&O0BR9nHJiZ+{|Iq;HiE_f$$G^~~_N zWmlVgw#{}u)F<~VlN9>!dq}xdXP&uPuFT=^>YVTSw*QUnOQCr@t%QlFb?y{kAc^2hQ@h-+sHdjA$jobEFomOcVaUkI>aD^kzIs~1joR6J= zJl!?sFR3$_6$sE60NTRBdjP0DgXqNr*m03=j$maDK#14OqKT8_rw_|0+e)! zIP>@uA+8$!DTJDnVy7>meYs0PcP3xrSD1q4;(e_D=PnWx1xd}>=2Z9)cAat(VPAZ> z>z@j-nMU=wl9Z-W9VzaxB2)EfZtZbIfd@V1o|B z?@}b&J*0N%A8+;hABMiY8Ei7Yw6a-exM8Jjy`7;PbUe}cLs?8!0Jd@gm55bC(Vmh5 zI0qn&LofdNf4b@FU{JeRXR`8n#8(Rhg0uMiM-so0mu>W8z&rK+aLO; zw`}~$Ha%YzZrJsA#!cEUBI3`7ncz|^u+b7?TeJoVgQU!4J+-36IA}h*N%Pi2*`*iq zTeP>py<4KWDF3X)4zBdJtby2-2NZQoB6JMMmV%J7#q~#jhR}EimmEDC{{4r23X0CK zrpmjkFY=050$5VDR~3MY1uY-M zeY;;&bM|*TB1p{^=MfkHvdxd0HZCmiH&2__%yHC6dO>jJ3RseC2M|Y=mV<9LmLnR$plK$phP3$t)nBx zPQa28CArz;z&MKYwA)ahU3`F$>LXhtSm{hVoTQx34$3dX{^hfxY9KdTDJ5gY~aPwtA0f0J4`X4 zHdEy)8fNkY&MPq*mMgXRh?z^(8W>S)($O|Yx8JGs&!-Ii5x1i|Y*O=LnzG_}Z=IVm zmm6j4uusPD-lK?2OO360j-~zPJ&xw0V=z`#B0Lt1+eajH9w+#*KMBkAHq1MPnM3ar z<<8f}|8+4fA0(_BMIxlm1Q`8UNU6cNw*aCp$&Sy-IzH&QJ4Mgsh{02w@&QwWLxf@R%Qdn>_pIL*fI4Ug~^y)`85CUxZ^7C%YW3HwI0Ci})YR ziaRmWzv`x+{PXDE761GmgndiL5OzT^t=kd=iKHd0SA{aMSwv-2kYL`9I|QG7TPW12CkU5itJP%h zmS-{EioNP9$}ege*P4m)C}&QHgF+mkGZ2u9L{h&k_9LAMkWhoIgn55SNjAR`4B^BU(c>_MkfTKe|S96_2C z)Z!Yoyu@6Vs!$_ZU;X9F-@R1hrx1rpgeY#)f+=qOEIurOC~5@j+3bjl%%gSdDP1&` zczp1@R=(3Xi<0G`l>Id5gQJ9ScpUWODA6~#LX*{l5-2sv ztg@YF&yLE)k>lAhgPEWcCR!r&jCZQeP^-QP@8UY17I8@h5kfkY&)N`^Rw)<-CS11!91jyN@5AktIYJq|7nqP2R@wdnqT z=f1s@XYbTBf6o50lERAF!#H z75IhmY^nxx4A5NenZm2j5i<(KBOdvtoLqMJO@H@?HvXU2m!`Mk8%31kMk0~Pp_iw= zoqJEt)OtqA#RzmH0y4z~L%A@!TVQsiSf{DA|5?}LMIT`U=r=B4pUZcah)mXZ5U7wo zvGeYH!Vqepy-cwV_FpH2k&rC5gZr zB1fj0j`0=5D(w~6T~a36SON4`@1GpMu?+$+G>y>xz{NJEl|y_y<*P|w1;CC<_U8bI zNr)FI1tvbu)5b7W^oMVLxa*~A-m((mK; zrdjxZi6DDM<72PH#ObyJ_veVe3U%+DPPT?Lu)rXCZ)?s8lVK>&u|I`CB*pSFYvV^J;e4_vJJw06#Tg)mpYxd*at8U?!=4V7om!jWB++BKoi{p7SEinoX zCUYF)RsP%mdGq77?tAIeTTIv0C)D<@D=fil?y-xBd$VuaqD~h3&tDGIc-97=H<2lZ z6x!~quQU5YB#t|%>#VBop5t1dt{Vg|%x1k$4!kkm?`>(*^^8PtxqBhS^^mDl-L3Vm z;l3vA$f$7YCgNyLgp-r(usK4@yu}9bbOV=WH4B*Y+Lp ze^oVC1=sfz036VA?_9jn$K|6(trO;TcF-DnDl1(=eM}QB4Od)@&ag3$+LQ6;&|9B- zx!)zhgkaz;nEWVbgj*|{Q$+8-Q$7&7;c_pxj7Y~{UaJz@^EPR>@lq~#Pso3|AFf_m zSomMW#>*#bPc_zkl*XXe+foTf(IN5SU^!cNJ$v^3)S3KMz14#MZVZ0Dcwq0Zt$WSR zP~Z5|T7SODHm&wC=gAUSrFr-0y{4^=FI$H9OX$TBttECl61e~NI=tp)U4E@zG@(GHEz+<39#sisi@PO_6d)?n$7qxy7XKLUNd=}?@; zp4~CD?#uAeL#pr`LcytGGoHiL_}&Wq!K^vh>Kfai%XKap6LUA_*9(k#`E!2gToNy=Uy z>%xxZpn%V*pw9@`#7Qt3s5hOaK#b9hApuLUlP(3<)bp@r=v>ZEfnbv<6cfIb;*tY_ z6jW)ZA|^Uyn=I5WIzndrXF|7a@3GkBsLl<`%cS~AafS+jnOqDi)$?$i6j(Ke39PC?085mX zKPACXv274JzFm1KS%C!*2@%KQkf2YOptLGRbA`Zhf}01r@gtmTa*)s+rB zwT7k+HGqeYER0ptY9hGk^yj3F4+F>NR~X@DM6uVHd~Q#+2K?)I`r6@TBBqzATL|H@ zpHM3~UdqgYK^-85LVRtV_9*rr(qGu+w!s``0EG?28&S-gMhxG`LGZTG-x@Q>8U~-R zCP!|BNs%f0QHaYbDHlAII^fMxkWvX!%=wx(n`U2VH!1L?1HP_{>RFzP5JNEFsk3lH zEqzD?#mr~Bqr%jEtg6nHb!{(4Wceo-Gg)c?!F{4igFoNiIV;(6;*U(tMuF*e?hVyd~>;UMTKfX`J{}#gA!@hbRR>gL>QOi-$Kc)MS7YtL;ERTYIth;>~@aC@I5~NGmHk-4>R7t z`wd@ImxWKiwZKrl+^vTx1h!1+6qS!B z#)`fBZzY^$967Ofcfvj3*SdyS4^K^otITx37df zTxkNJ1A3||bWh`)OOv^qV!~Lmx#4!V!L|zG>j1xZ6TeW}oXDvWV7rI_iiZo*wmk`X z5c1lMFRg2O*N8K)?TK_BYIiLIjZnm2n&AQSwf}zcv?}({;{!H*6>cmeV+EwWgrXCg8yOQ%D?)!iFfOG4>?y^oeP4;9@F9bxJ&Uxw~&!R!tC{Ewp&ihiZhda^Oq7kt| zBc3ZZb0lxDdvQK&nfs)ndRn`y0(zJ3>4Jd3kf*->89P)pqcC*q+hn2QGcM1iP@Y@% zl)7}3GJ@gNV^ENUp)Xo2fC%bg~vtqjY`gPPlb!fO$BnB zjCHMOue<%smR@r#T=I9nE|3fuw<3hJApizeAHj#e29=CyN-Z!`4DMIeng_&}=_)X;OI{q5&IWOXZhqQsEW?=?93B?9 z`w4w`Qnmt8=Yxi|Sz0>SHw8+>CQp|^56#agbkoRG4w+iNBL!m)4`bYJODhyoH(DF1 zB1-b5edRpLspS}Yag3VJ)Z8eQz&V!VBJC&2n?hwIYZ;`1%C$k|Ay0FMYC7Pr+J|M2 z3n}RT`o|po%uLTop<6|Vi;WD75?YdQ-=&KwAUvgZeq{C7Lir36q1X+vk|RH+y)jF;0hQ2+PX>#*)_rh zBB&e;JNH1Ua`^W<3~nhIQI%{plOr1AYPj3m4kdV*^*}LCF1m5sz$jHWTKn2y#GNh! zQO1V3M^l5RJGZ?RmEy4T_Wn1LCdG_ob8#?}%Yj^^Jqdz3(>MNWOIefcYfR~GGeU)W8~R>Q%weFD?D`jx z1z+YKb&iB$io`XK^IAY`eJlkhRhAv z>FNNZl-NThrG^W!=%j308W_FBa@Cxt74gmLw03t%yX#!LuAJjKU%YAvMp?d2ES@$X zU902?CBy77&((vTDE@fGxaS(N$ktEaZcNm?1!RnQro3r4WbtV?&gu%UW)5w5~#6u>PTfu z*e65qb1fCo8dHc$gpIlFYg8cOn84~bVDpS)nu&3SAzhk)#phgR$yN@u+l^ri2Lz7e zLc8&{D{rzi2QjRxumvn!=GXSWdl+p$0c!xV=@Y7jm$&e+>Ix5+V$U}r7_$MXbz14N zV#ryg{nE=v&8%$AW{*RIolF-`G))Sk2(0D+Tt%BcAf@tcY?5Va3XIK|2PIRs5=9e_ z3kPioTn9X*9z&Na;n}j)v`utoNm^2t=IypGb7Iz@$5RBbY4T*VynOG89GawH@bqf9 zO?SKXF%?y_V$btI0{emXm3Y77_H>rCrKAdNi7X(BvqB23t^jdO7(0rmokN>ilgEli4_k*e z|J!XS6Ze2Z*kO&Q^B~vTm>;)24A+8^FDlLoXa&yifAO}Cd#qRGt<9*GKCATUV|N_E zKY_4S-dugk#$KocA2^U(8|`(@y0G243$iW@ybY%hbOt0A2JH3s5i5=~XSUL^Z`R}Y z$NL7J3H`fqePCRk^&7AF3XLKMA77&H<{M8!q_ckW_%h^)crt0CHlVB(FJBS*>GO?I zIUX>^=WfKNJOQ~k{F?nY102Y>gt7js!*J7UR-xgO`F-yL0dnMyH}8xzD&GjaD>|Xf? ze{_u4wcp$0LRW?yzpLi)(XpOF;(@gTk5+E;ns-1x0Yt)N=i}R6ADJOO@{SZ>Xhf2w zn`^&`Klk@i@yc^i$Gue&1J?Mg=OZ?L!aum4yn%>SVK%z;m`5ah4KlY(edT&<<=ser z^=*7&A0b=Zuivn%*5z^FwzX9~$9=|Gd40XHlz>NPa-0tYHYcjAuW+nz=>6B480ONo zf3CN?saw2Ah#UN?yfW+4-0h8lxN5D)OC3Hj$2#*^YmdW3#bDMHXdmwT{3xq$h+S}$ zDlXs!ZtWqgURk)AhmT`DIciOa^33Cp-QW}xTUf-%Fo}21+U>g&{~lH;fLB#@_*ObR z>22_OuH6xK)Mv$pz*SJUW|-r~rOv;3(lxttdj^#a-F@6oe2WhI=|6Nc&EZy7+@Z3R zzTOp?ElU-TGPE9*blh0SJ`i@m?ykJ4oQz)^*2OP7R1wcrUA|TqDtKV}ZO?57pEAOa z2nWCaeLs`<=&(W8*0;B!soyWfb**a8Io~S2SmSf94>w`gljWyLef499zoRdYou?v( z;$UO9W9v-M+tZ9ba}0URx&x2gigd0&pT%B|KOJ2KCvzxdWDes-u2 z_tnond!KE1j!%hXmHN2h3bRA@*^e`*E5n1|bV!{XezPyQ<4)hbcQ`Q{_faJlkSkRn zI!o~!5KF#U3@}mpy+g~zS4!*3045CM%V3fUr{@Ka#0FcmVI>%b;sApjgxCyY;%^?E zhpklFttrpWS&`D4U}I~6%^qStKg;mH^JSec@^)g4Ttq7-F`M~8#am~=0f8GW$b7PL z4=~%6n3LYKZtuK5bx=52?h$wAfB<_`Fs~%-L+dVeRF~*JFS0WI)o6Xkw;4x38Q%pc zY8kvKZd)1eu~Kbed(=9k%C_ZiadC07jn`z&+QL;XQ0avLB~9l@J}E!0P=XKrDLuG) zweRl5tiy*L_xvVF1JjbJ3m$d;yIfG*4MKt|0=BGUrhvp6ggkVLxRmzk<(wuV1$_Kd z6POc_{Sd<%Yx(~Gjd&Ob2(f-rl?h4)AgxSqzy5i3MWR<=Tt73ev-KF8D3+~p3Aq7D z%{rjyye18S*arsBIZCxsApL*X6G^M|4RZM5k*ypb#L=g!TH602jL95&%3*=t%<@nUSO)?IG z9Ox1{-~itC7x=InJ6<>+G$WA76MwZy{zunJzv?rSulr#v;_kk?`%{pqf7e)QUE9?h zptM!hY=KnLwmP=U&7Y=U9Eeo_QQbvGzU3~b_eX$)h%;xXK{o8{OJs+uhXWw>?7TIA!<&KkdyD$-+fm5j7LMm$xW&L7yQ=te=>0Sair^H zI;=OwNRca4{|2Ydg;ec-d*RUJ!cubXt(oBMtDLeBWmPz zH`{o|XoV=fR0&g<-t;-UGJVA9@wtprqg=cyi+SUDOzw)8+*lFBYaS^awG0BzSXZkp zizUWoL8zD%B(dR|B9&Gm76W(@u^_3;Q(CyjGDkty4yO#0wSanQD?U}hL*=N*%RBg1 z4}xLxO2==8`xcV2DQOQSJO|Rv@oX{);EpmvuW2a2<>9}47+ctY(fL>*-#=^-E9Ed; z#}2e~)^+Ih8Y9dLce`|b-(6Aiu> zB7a1hTt0F1K=p;_6q&CY$ZZP*D081LT{yPma}49r?+_BuNnP{u+tYg(g&_5P$hAV& zg53v%zHr(bh*%#vj7>{c!l`spfhZHE5i8H@tJp1BzC zUc`7wLELR)ZX|{zxj(XfI{eQYIhO}Zext1E_%zqglgY?Ezg}LVS}{9JD27> z^MF)a1AF;&;N5RBD(M?Ll3Y zO&BygL4j@c68tvi11fC9X&EeC`RXs*6@vuuqxw4tqYnLUPFS+sI-c#A%FBoG#Qb+udDC8vc>xHchE%&?gg@c7A~X#?a{cMU+B06@R7m;|<35c(8sUP%UxNL~|bLxHu$J z25WADqx0FO`m6`bpPqiw97B)KzM@@b8fZgAKn#m_?!f0xD@Y-`Cq6A841NTc_rUmI z1oL?Vf?dIf1L?&NzX$-LnuL1Sxn9>exLRd-j7&SoXqY($ZkoOER7EQ!a~c4z5F|i% zxm-kVk`TgY4pM8YYdEN=F{}zU@(2;>Ti?R>?#hEIB{@2CFtlP`aNQ6A@5DFa2wa(Z z&<#9cW3AcN23bB%t`UF1n53T~z2?+3xi(Xv=^Ok+#YYb5C#w@-iBN+}(T|y}vx*-Q zTb^Fpj|u4LPN|H|1GumVQRbu<`53j%_z`n1>jv-1Xr4R^`-gjJdzAe|zS+`*hv78n7iHcYk&H z=+dkIZB#@iD81c!VZPJ-$}HelI=~WD-ush28R4HR{n_|a{qrk(i`Vx*eLwrmc>mJ$ z=$(hs!%u&fnSSofc@!Q$cd7J$qwi+B_W1|Qm72$?hBO=w)0p3AG3WE-N3m}Sd*2`K zWVr)xAzsa_@M!`TQQn*TV^!@`rMD12gHa0p?3VwzqNqWC+a!&(t1folru{yh44&%v z)vRQnQ)Kz(>8gTmt7YqLSJ~FmDB#r*Y{;~IX^o{%@XYzC&t=ywbDl2t6%j9zAtl@2 z6+#P@A`BVcbp``%*%#)Jf0C{E@7eLM<3)-sPp7%T{?D#~K^}H{`OyD%{oGQ3+i2`% zU%S-&p8Q>FhS2>Kvpu&+ZUaT~t=2xp|7$zz5Ujdy`c@yP78GE0z8Ja|;B;PfDuPK2 zzwDmzbm`DOOCb;+`{C&^d3VThqVe>~w8yx80OZ4Na z?&IRvF^^Q1)UEKT)p$-?cnl&63!W0*wG8w8Eiv4PP4f`EA~=lifa%6{vGM zsi914Sy;4yPf%JA#TH6PR1<~AldXvqX3@@q)FOYXCwQ{K%txXS56dv>4lOB}$y@Vk#S5KoIFbRf#OU?8+ z5UwEeC0nKxj*tvjStQ3IbUsIk7=s_@d@8>9Iba6Zq%i0LfJI1Ya|qDJGk&w15hXBj zDVmxuw!=>`&P|VhJs=EL>3j*Wz7!U)?VrMcp-w)gO+x=6qXxBU|F6!zJZ^ot2)X@&5 z8IDB-CN*^0a>irlo5#M*(l5_0t2D)W%^K0;0bqXie;&iFK{Y4q+8pMLXhFs*hj6-e z#ZV>BcqGO?df*!NCP=nZzl51DhA{z5&`+`id40lmL4X3rk)+C#3UIAd*$vpz^$DEp z#IhACv6A&$0n8MP;V~&*0JH$(1}}m3JmOm96pz>3f_fsV*fYcGb4Ji61!aau(r+gy z{3LWlxZenV9j5<{<=`Ws829Qg6DU0#Hh2lEA&R{cKn+udYXj8U5b{eY;UQ0TT%nwI z755UMyp#;G6v||@OddsvapdsE;X32$O~V>C#zY^urA6|ljj1vrQI2Q>yQCXmoY>|j z+k*uRl7~6ns;eE$w9X6aS~<{d8O=**=utyFG73Hv&{2YGap^Z>AMIoTqeTjv59`ev zspVZVFiBp!CUYs4HOxrPLK(Nj*h$TRtK?Jw;PO=CCAcmgb&h9&vPFmjGFO4#`%~FG z)k3EFb)gbPw%n#lb8e3czDlKKJA*7BFZ{Uv~UqDfC(;4429Q>7HBWG9mPt3Nr`i-F)o=& zBm>x-6UGeq=oSTTh(IU|!#%s?T8V7-ScU^YT#fw`UI9I2c=;4sRL6ESD}a$<`a(X1 zG+g-PapL9|8xGId-$c$`Yg_+gm@&wKJUCtd$*9i53>3<`ScN`e%Q9a*0A9L2GR$ZK zfvgyhMUG~*X)%-Hn9Ao&#|KtNhh)&)*LgQk{k zg`OX0~TpPo%w(?9dqL;_k%w>BsD0|j?u$+Jy z^Opv)1P^}*Xypha86`gOO6PMuDIYX0cQK-5I&-q3mptF&v+JncYtLu_6T=KiKIK`! z{>3WIsV?ma*)h7*@V^sEtyT2aL--v4wx-voT9V%b2EOYuJP$@ULJX;dsXc#k;3b>= zb)IBInPgJxN6~z5vI4=_mq3%9s*@rpk4XuIj}e)aH^5TChaE)uJTxW6X>4$vFr(04 zy-InEn;iXf#yH>8C)3YSFm6|o+ElOp;Ao~v|Agu;JKKBE4xqj7(VmHE zX^l|=ENC;sC-@-B*QWOf&;&llOVn*5AQM52ksj@G>9%oz(G`OqLaE#rXWo+xCHYz& z0)|ISOpPFOhd_BwrtKhLz(%B2nbwZSh7zN7FHQFj#aUaJER~HjnC45AVTQO$Hn`ee zIJy^$ge;tzd2gYYJRCkQWh4$iOaWK6*aI;w|vPPHgYB1>O+msvArMZeZ!1Ane<6M zqpyl^+vr|P1fb$IWO}4DsmzWIv~!0oQ%3-@5j{Y_;GywJJmGZJC6gG2OZzr6F_|g& zyH7x_??TCQAzc7t2Em*M13x`Uct4?+9K+lpU?hqeuqGp;g&r=ua(?h8=F8#ok-ds# zmMLmymy5n(6-(G+Np=)QJrNf&I2(KH>?9ze{HS^-#2Gj-yKF95UgvbRV#m%jdW+5| z010jgWK0bkz8^Lq!@56=7Kpii*>DdF#Gz!`eTNPe*0} zCV-_$T#bPcSHN^VjM)NY&;d~4ok|11DHxlj91L-A5@(7jfbo)&6}}nfXiOxGYXvgW z*8japde~@~5hRmVNC`C(92Zv0;fV{X8Wsg))?bT#`~Iip4d9JD*LdoYVa+L{r5h_^ za65WvGvLkd;FBXpj*9|HGeQjFFy3>hv_m+do?4uj<1eS#mundnOs~Z?YE2SlI*`|b z;Opb5<{nV!6MvbJo|Xpi9`tIy{?**`Zv?*fH4c}$gXZVu8r3y|(+ zw70#|H*8ME!3w=8P(@Pv>cq~x-3cdY5^btuzB+R=pLdj|SW-Dusk$J+SpSDxP;Bnq zj_;#jZ?f?V0BS>3z4_UBwrxuz^U39%XL_>D{lysic2djYxd9G~h|;YeX)jhiX_qqO zRrG;L{Obc&*eMEZ9rs>90~CF<1x8|w|EVg5Vzt&a*A3T9=}f`XgfoWvDUA041`m1H z&3Uvwj>bRx|5=bJEsO#xrs#%boFBh;#Y)Tc^S&Q4o!*XJQL?}Tm*@pm`2XH~WziU+ zPPC4X3_i!;cGbX4Q-Mw`gd;mltnK?XY2`2nL*F+3$r$94E2Wj;nHYS=rSCf zcNbHa``SRFI5)!iM;U#B8m%8PTJZ(iN4Ln6cm~Gu@pqYFsgYXf21Y&beH|lN>*41! z`|+^~G5`{4+EvSF*g>>~Y@B7F3k{|?jrw?D*YM4Q6~$FWy0(Y{Rq2hAE7esU`T*>h zRAh}%Xc9i+DS`+9t?6KWri~@d6J#9idi?G~xX&IzTU}kZpBGScKAv5XmN!E`VG)#8UPzm|{ONaQ* z-QEz%5XY5$yl4^{F#UC5X+HKi2_KaLXr&&WHaKUlke&|g0@YgfjrIIGr|aFV@6XZCAQ*Z6yId~8-`h>r2Ywxzj@AX>uHmD;okqa^ z+%uRZvRmu??AT*l?+IYNOIq{!hFz?#7DpSP%|&z@1DhUx)0e)BlC^4X-~b7C%I~>w zWtsJd0GI8kqz}k(dF}yOj|tbi{##++vvO>}Gf3H2;qzq82|oNNbrg_sbS8$j1<^6} z&$u}UD@RqGKFX7F*8H1t$0uR|n*@h`FwBiB4X}CiCX9-zbc}5Dls4?sDp1HFb}}pg zLbaVL0s;0IMR{p+EFu7C^-eoZ?eYLl;;r}+K_HFK8Va$#noJLGOF{;ctP)^P%Kn#1 zfNy|PXMNb!B-W>ME9`2)b8by?b^OW8;RN?adAJ2Yod>kf>3b!Wol>p8%sJgio zwHAWPQ~I>b0lwp$p7t)odwKdN!eUt;iB{qIR-sozAB`PpZ+K$>Sm%)HHH50HNJ#D-7IwZ`(*N$L~atx94^5td^ZnQz2q;uEB@^t8VZ)x&?Bpcc6vlg8a!a zB$S|i1DJ1WBRzblcn0oY)%vC8FXNG-)pbpZv-jx7RBkr4n-+8fmAK}o68vIv~EsjcfUz9rVed*2bSY`&WH_Wwva^Qf5q|Bv5$XSvfl*&lUopzN>3qqI@Ma4)dsoYswrKS`~7)g>a5udD|Y0vUuBE%;j(<0diAw<9X zJ-`3v%$YOi%$#%I@AvEVe!dk<+79#e<-1ZKy3Lz$&u-7*{aX@bLY!8*BptVIe;!a5HcECUo;q{0 zdel++Pt@JUzd||xrCfd^Yf3tA-|qj{c@?dW(pa+4>Q%CT*5rd_W=HpPLsw1QGIyG+r^QmX_vcsp&a?J94=YHRvGh000j!ex2+nVUsEM0ix{E)@`f>z?3{os<*Y1>h< z#|fPou}2L_t7*9;LE7!9=kng=UP$?Z7ku8yn|$-FakQaBt>0EUOCMEizi{79;oUx2-oUEELuErPrx}}%e;8` zh++@VwP7y2W6`MUvv9XCLCffs#Kn(RbJtB@udUySB>VKljZ~%-wmV4n+6;F zIy^s3@>*P?I#<*R#;U})XD@u!wB@3Us8bI0GTpFw$Fr=`bci|V}vYFl4q z$hSx7v@VW(MXJIj9$P(NC43NBT=KTo{>ka3kHXJ_j?;+?e96XI-*mQoj(J(#$5{IJ z$)=(^4imrX(w$fXZX}&|(H=FfHHEigSj_kK14lPs(7LT=j|x$}P!`bj+#W&);j8_?$B&u66{SAJ9amegg^I>ZnxvHOFTAP^Gct9Qh?0Og{Z>KoeTau zE?%B_I@Njb*`ii+U6}UaT%D(JKuxu)t%kpTO6@~t42Pt5(_@J-Q|OqAz2vsXL?j0~ zHgm7C?v8Z~j3;M>zkWF7amG5V*3l+3zSO??o_S_^<4!vk!CAw7YxVMt*QFPP%xZsQ z*+9>dtdwph_qg%PfdJD+i|4ZrYR#*wA6>YL2h}iPxq}pWjpxJjQGn=~EubVw*3rC} zwE28QBZJA)!fd|`3Lav~<4rUmK)1ucD3IrV>z}zXv(&*NcU6Y#s+X^bKN;Iuhqdp& zxK0IHWc7AE^GW)6s_9b;54$HP|f5GW@XLi_F?k-dN$-l5@ z1yYi)^f#068$_tx~@QIsJ=M2O%I?XfpRs7DRi4Q1g{m`@b(>s5Yvn;O|P)Y`);;XV0SLs zQ`y1x0E@8MO=L1TbKu$?9rui(6T}#4mzwHRnZY|;`!cI1Afl{@;&qxeBJp9gHY&3^ z-fR`Kz$ZddkQeJ`eR6t7^ZBEO4-5RTTfQz_F}g2HazZ0uCdi!4Q(s%AH26Kd$m;SX zqWvdg?z;t5O^%xCp$T=?yja}H_)1vgvG&`QueOCAe88gBo6~m6a8!+1v@Z+A`IE$C z$XqxbF|65WH1`k}qXf0_2}H^YkW7&X5S9QMAat7ilv_7V2kHLe6FtP85Jeth_`4Xd zITK&L>fJa!UfS<7Bv7-Y>zocyg%IUG>vg5P%rv4 zGnm$cH%4q0*|#qY_L>1-u9zA(;Yj7o+S&4aFG&0MOpwI6!? zrg95&U5cSCGd%PnWYh?z#vhcrQ64by0HBfbe<}!?a_?x48Z!i=O{zz{!XZ-XRf*a1 z@9AQAOIVxDF&Q;s98gNBm!;GRIrNFU;g4M1SfybQMX!Ox+v3+{;dMEDeBqn~-UZMn zT#V}us2xI(pO&K7r0lx=*)CWa-ozj;?OcbvedsSsLK_&83px; z0?>-0jxvQ=3F;Fx!kP5o%n9Gu7^Z=+*g?l7D%vMaRIz})MUzK~s;a!v;Nb{B>m=Bs zn!4mGlqFqF;=?W~z*M@0&W9aPFN$iHfCd6w02c(w`mA?Pr7CQoEEHOszF^%0^0dq@ zUa>L$lcph{hL1%Z`Fm2hReLV2ImpJIWF~&igYB3$eH6u|H=f471SJnc7-*GCc9ap7w8O1T25Y8rO^5a` zyG%z_#Ux7UP~l(}Wsapz<$yDQW^m=k?OnFtMf4XJgEeV*;dav{8zSh@Ro+RN*KUPJ zK)|XVr_ESqLP{|8NHgH3TBF9hYayDX+73v$aCsh|MzZE>xt@kdJa{XgzPke}aUlT> zcicY$P>^R>gwc~=2TBd#;(lULb2%2NR-097u6{}_Mc@?XmhZ(S^8{d}oRBS}iY4$b zfMP6FJI0`lq881~)U$Fhlnc9Z-~f~|9uhRs$A{0oe3PsuI3fP;A{qbvxb{slWweazFJO(jduQ=hROnb5@JFLpAJ(v_qEAIx? zb`k(@gk+48W@$tYLYgN#bw~-oiX<1(QJ+iN?#)zg5dIgY^9JzQe4s=@{UFcWBBGA- z2@=*kv0Tj?S@r(1;o0N)bu{;Ewt{V zj5?>%Jc0_o%BeXj_g^yVZ>hRDdF>Y~hp)_}X+GY4?i2MIi87By)mbU@Rgj$?Q$Nb^ zGfL_w-oX)(RcYthh{=;2$yRtV6q1FfOQ}sLly(aHQVjzcbyl`Fn2&CQn;k-9Zcz`F%-%f9MW4rwVgb`rfc`XTdSZ5P12WT(MbS2I4C~KFr z|1(q&`YDP5q>(V}yaJ>Gq~v5Cg9VvM2_bx~JehSC1YvMIY}|pQSd8aEc1qwZ1jZ2n z3Li5%*@{8m5{Qt=g)`>3M2duPOF~NF5?~qeoRWN^#4}t<&ScGdIb>&fReK()c2UmV z(nYw;B~xY4Mq0L|!Eg8LVBOjyq^G=sIZpp)gNud6e*mdfT%L!GKk>E z2Le!av5dHY3Ah7l?Y&@}q1TIDR#_0?vSM%dD87YH@OtS2@$tu{AV zW@?)W*Hqj5PafW`p6ro~$nfT% z4>C8-U0S(O{;)~)v!=_1P| zQ67m^XL@|DjK?X*Zo1zM2Nzf~bX}b23oY9Ne_1x{O|OD3d33dT9CeFvx>kNarN4HA z_aqk8PuNoR&`5K?o4@6f{)tNbhL$S}Y(r-+2p?Tp;^dfWA>6UjT8%tFAL4upu+?6W zW&9MKaxZ?-!%6e^nHn-WdHPPWm)pVU@UgCevBCM*8iOq|Im(BZ!oUVQsmrz@ zcE@h{pbtLwK<2`XgVE^^?v97wJ1E-l@j+i8-K~K>|4G?D4;C#ufRQFFxS=C~ zC*Je%>RKP>B0LV-kJFy01wYrp&*QbMtWOy}4PNOBYpSAa?l=+@5Ov7aU8^zD_DWRS zSnnro$Lle-H@u7J#rs9Z2VApyurklXU)S+mkL$WzkNigMuN(R%8|(vx3!l`oB_}u$ zon9k;3sc5eBb@&3+=pfl>DvPq+Ewmz8}1HxIh1qgpP+QVKhsX@Q|_zA?Z_*Khj1~1 z*;LCprpxCG5S4|GbM3N?w`B!68F29}mmanp=YF`L-5!_tA^NFvr>ok&;APu=GQ05i zc^U~P9(~q!?C4Tl`@OlWA>i)|8+v9>oaQ*)xa+!m#J2{!y_6fRXKGwgZQF5Uz2D?Y z(SR@WqQByYW6%gRPvPHna;e}5Np$1s@*(=RONNva+|Lc<$4c_?Ok3ts`>BkI%LDfh zPFY*BG`dtfZawmKZ{n95wMr)+woNnf< zT)n$z0hdp`@>O(>mYDJm9XB^F=2O2b_nC)S-^uVx*MvUMs9*Jo#LXIibi)4{u|Q@h zvB2qZDfNj8w_@vsEQ{J#-yH`&0kl%;Db};LAFom@hwqIj4|Ur$yFf1x>J0L7-B}w? zcKM0l^;O}INBx$3@g7{53E0Xvz2G0Q!5=B2L?M9-|F!_wGQfoknJRZNr8rXr{wC1JFb2%+wb^YN=6LIE;;nUq&P_PnLXlfiLQ2));?2=K}KVGvI!Kta?&DWd% z3*nCzoBso$kyQ%io}Z%5@bT9^ZZMdU{!vnY18Olmne%|_ z6!0ZSgNA87tzsoS5z(04E`3r8+2@L;b%kA2vje&?g)uR_oreRABb5K@SC9!3Lqn1@ z;CulwCpEiQ{WD@_PthE(-Xhg*43=^VDAucorXmHTnk{?)y>~MjFxJRH2afsXH{tor z#`)3el;GdnM>Gbni0cQzIjuKPRR zt-JBjtNVuNu@LKJO>u`VL;(!LTuVGEBOYT8Pm$;(nmScCqvY%EI(DpYDgFbN?Gow*>-GDQB z=ce39U*@kfiIQw;PH)&^)>!bVH0{MR9fXk^@&G;-H@quJGv()T|C&8w^Pa_dF#^A1 ziEc=v#Qne1ulDAA=o~kx0~Cne)py;KNAg!6YBURFnzPjR9IYJC_50aYP@a{c)3?OFw$1|Ibv4E*iD&+!DQJy{hdekI8 zLLky#@;t~1?lQpe-1jHM107r%_Ej1nyq`b7h4OmOIsu2c06)F z&2}HZdr=p8h#_b`H1moPhh(`paTT{&xcD8f3pADh=2##SU=|`lQVI%f5i#RTyh!>4 zAffv>C@bz32yqkS648z~S}x&ns=-sHd*p3+GbXWo;Vyh*&JCgv#vZ~S**!gK z{r7LTsb$W#-|Pbub}G6sah#QT4Np{B;Px0Y?pZK%)7{fqgCtX zS&~4HDxJzb1Ln3jv|eMOR{o#Y!RMJ{ZHphg|8IKpN;&SYcM(qJuTPcf#NP1!3A{y_w&|3@Xo04E{DV)hqDV|WSq%Ivk1s~FqFPLqkCi4NZwSmav zn@eF%oW-7xB)`m%#I_YvBDGF!%oOAwa~vC82Hi-b0DC7#Faj`BR&;46 z@^@A{ZfEXZKnnJ5MYIhYov2P759E-5t;;=K>j+ z>(BFtfcPT(@F>O3j&s5F3swwR5Ym!yKPscjflMr3>nF*@a>SC~(0 z0Nvz8yqQnMS?~PGT`E`|u>dlv#U>jDAm6e`xGE7eYXan~RF4KJpPw9|K!O;rG>u0` zQ-YOq@`!87ifqZ4={YGU?2W+8q8&10SQ(smumoTdPw$ysg$tWio+oZF`$sC@Inl07 zK~dXe zY2?r7kY}2Utk_24oSyMb01a6DX7B(GT>>ztg1uu$DVsAI%!a29IireF%9SqoB4*7> zAFYUP57trNz(C_Z1@_ux@ozXxI%$3es3RcFY6>+01_d>kvm`59km*PhEDmr4Upy4z zSj?*T_s(Pczd!S*MBuX#v)ck#TooWePN|O5_131&nHBDQK>s^Nl$|R^;2p;C1f#W} z*3Gv0ewg1kJ64TA-hP_G>ALudl=hN+N!#LXX!NsWk)~nhe&XFRlMZ5!>YYGtVv6Gw!wanGkCgls6AP_y3vLsTP>is|9>4;_f zMZ-ZC`yHsoX`$7V87*4E?Q%zSQv~yhAz;O!tcN;p&%+en&IJ|j$;iE*9l`pgWFXzk zpzXHx^f^?jnfE$@P$JRxAq`IKzTWCrA#ok+t1SD^L~i_1(&eP(h}vlu>o5@4MRv5p z-N^=K*hcQrG_g-NchuBkZ7i-&TA{1I`pLog59gx}&sDD~w8wol;%IF`R?Bi?aE#$l z*i|9CqHBSxxf;bNQGbl_kKD-Mk~rNimPRsS{uTdLZR|qle10j*!ti9%IT+idfZghD zYa>M)Pg*`-7CjUntDDR7lq7GW{YJYDGe#?(FFmdfElJadOXA8^f9<+^Yl?ylbuf5JQ@F~-oJE?ys!V^T0GruqbKr@nbqzE6j&@z$Rvh=>= zSLd>TioAh6?*j+COvd(C9!5wyP3zczI=Y*`ak%#)tl;e{}S=d zGJvA86p}yVw~p7i%i@bVUZN1AD`AIOppWv-K7!Si?M5UhymY9mjBs81iu|fzz^h#D zc{26}WeUQ*(+L=>dA!3r$Fr#hxcMZ-a*o~kw`kyy=U}mY!bQ(#x(bqy^qIjYe`IHh z5BuqjA4Y!nPh8((xoG^b#W7y%>=(I@LFId#w$-8Q` zo6cUnHezo|dZ&+;zbd7dGc6B#*G&)aOxwSg>}1--={2AA+wjwZ;&yE$nS7rqzfY?? zYkn41-C%~4&W$sBbhLKr6uTx~7Y+x^-S~3TX4Yc-+WrTJ*c#l!TaDX2>#hcmkQZm5 zrmVmxj>Y5lS67I8Rz2`DtPL1B6Y#3V@-sHsHEuXxw14;YzBTbTacrl+iC*)O%WyL& zQ=ssG=9x7&+YS2Z^g!F8>m3b(j@X-e*(EP^{&M_LHgE%pMe+xTywPsf>N5#V{k+W0Z7sXrg)(z z6Yt3sy8{<5yP7TSMBm65a4b~O*i)`T3gSc#w7=Y$1{yP(iUGEsHu~jZPs0gdQ`lv{ zX87cfHYpoJP~zsiq&Tfq0G1QdXTU`DGrwM+#LW~YGUv(Symp-^_jc31y#ufTn7yY# zPga5Bz|}>s{hjSZ9mCxR4FyYz@eW)yGdX^VRPf>#@zvsisu6e7L;*%Lj-P^aXq*Bz z-WlgeVV~!>mg|xn3GKDycSrKN?>u^-zoA$iOco?5h;LfydVB!p?;C3m*nRyUf6rV0 z8fhJf1s*8CcTvS}1OR3bGN~3ra4d!tgd zjH;lUrWWkMaNro?2S=_+2C17JFKRe^&{4}%6cE|MkXzgebn%FhIB$Ud_cTe8Oqkna zSBDjlj*)~NT!`URjKLy>GJlcmpN8hWt5k5_47|>+0e%U4%ekK0(WIFo9c#{Atc;q1 zO$`O?&u}_`bNaDpCw6E?CDVvyw4vxf%vQd0@2D_ZyG(h(T zRS0azBlDg`2auOJyIXypEjh+rl3W4;QWRzj=A3FVsFCRuU@j8q6oa~|lQ8KZ6=?6eus|M5(a;F5Q#gL-_pClu46&hY#ViLcA$rEl@ z78!3pjT)CWgvR7fi4S$d?(T#%8j(38T)`7q^1wMR6VDtVqz)8_mf)Am2r0=0T1+Tj zUa$>=fJ*$CIAD1P49DWgYS3~3UMJJGsU<|q3%P(=h`g|@lnBU0Ny&u)$u7%TSd6N` z)9&#tSsgbSM`9J`08ow$Te;y3{=Sk0Rj^c?Brj5=UOhHb=gt)CKhm+8F$@?4MAHv_ zP42sAI;~4a-(#kTADRKkT|3%ePF!M&jIdEEiXstG`Gj6C)Vfx<+kDAsJ8^OcF^aDT zDhWHLj>E|X+eicjALS~Dal?eQ&A8=U!scx0huu&8)MGFsw#Ag`8;RNC84zd}y_P(3 zEDFjGSoC79Dk%;+j$0y#L9T>eUN&Zqep)eB{&6IR+4yihLKNwSBBi?Zaz zJ*e1;c{r!m(r-wSh7;^&!qKvVJeim~1LuQ9cS?lFnWD8*21eQ^w`1>g6y@9Dv!;r+ zC7(UAbns&0$~*=!wWETWU6{u!V#-m!nIeGGVR#zOoq@N$EZW`-=PM!48Mygb(I#H( zE$-nFC9tg+cJ6@J@#Av1!WX>g#qk$MxO8h-t&l{()F^s#IF3!ojRgz9~%oFaJtr_zGc2WS{3iw6|oc$br?oJdaBu8|8wcA(aWEcHIxR}_ydIl_- z%To|*?C^US=6jR{kB(I3*@^c38;gr@y7XMmXG zx2%GtQqJDWi|o3p#9?^367ZaY`OQU!mPI*AF-|EA;a{?p6Z3)NuwuV^vUy&}%F*}8 zHCZwC7zXSD4yp-pl45@rGrFTNI~KI-fRouoTLZ)RssF~)0mJ00PCwK@od*tM@D5qA zTHol*$qr(6O@{7MA9Lu%b$E}Q;G`(yxgMLVZiDjJ1xE)M-r1V8 zSX?ekghQHMf?HH4N^5AAB~?We9wTh*sggb zD0Hfb)ePoI#0?3TlUKBw5UX%JQ}z_f|AHdeX`Wf8C;b=0fplepa5ez*Z1Q)Y`urF& zQ(vDplCi6)a1_l*zm?ciwW0$~+#(CxOkZPBki+zLnn~Ov72O+;)_ln%$%~?p)p?|% z=V$NbXBQqkRCUJB`b{rAMN#x3`i!n0HT34)(IcB5c*3~=4m`7(5^G^5qeshJ>rNJ> zpoMuzQBF1-)hyc6EV{nqsnj#(uPJz?ls89Xzff#hN}KfVUQ?ep!~5BNLH}PkDi#dM zcF6-8LCW)j!c|vU$KqA+rgJn+w!o06#M$B0^whG3^??*Hk7mD(RkZ#=dD)DNby^wZ zf_b8|8zY74dHacWs zcMwLga-$rQmczUc7l{nm7ga_Q_EcWRJ4pkC!r9u}uoUAC^EiJd_3EW0cUfHj6#(*7HT&Kr` zn2L6O@;=UNOK)cpbtm8{iwBZHI~wYeT*Cy)I7&D+HfY{F<@h~a>UC}XU&PP>zL^xg zXN_OB6Y%3TWTnGBwYKpq}N z&NS5aw7^mUyKe-&I)wB8O8tfN-$K8`_tSKsh&OaMOjMV5kxqU4SqSn)NHWO62_AHa zkZdBIFF+I^MmYxt&^1}N5uT_ataBfqn>PrrVI-%KqIO^%0Un%>igkIyOG3b z1tQai@2+P$^9gAoVqFy&H3hD_tg+h=A1Dz=GsUJTv_?*3JjcLqM-O@m{EGLoUW=Ck zB`vDLpwQ3&MPc8%g(&l2GuTN4C>G((eDm%?ikV-T-FAy!5y6NA02?JD;yh+vr@vaI zji1|_IAMkZxgo#qYV5DSi1)STfRx+GH0}U>uP%f^Rsp%dBK;h5@DmtX)f62Q#H_-X zj9<&nd^5E-IFVMQD=BvawC@}5E!}j#Vd56Y6MJ zCq|~^DpgOM*Ip}i@nEaINE5D!sUZh6Q03%aM|M)Gl+&GbEBm2#dx~rUAV2fkRG~n- zdY^HYS6qIsm%!b7nm{|cTV*>XI_M5udb>N#?>HQ6X=QiqOW+VO$6t?(mYrYcJ^ARBLB&z8`Y7L=3Dph9YpX7Qd0ww&@%TW-=#fdl^Jo2+a-Zw% zK_-Amb)rAxZDj1+@dC9=UsuHKII?hMmJcY6-Plx8yB~1OD6rsGe#%Ust=%k1SlRP( zlEJNAv}t7-biE)lsO`uTIoXjnJi01t^wG*>KNFObRrCJfznKqi71pLsE`K6f`?+8M zB|)w*mwmF8QMbG6>Ek2Y9W#nJE30;ufJC63cYDEbhD+lzh|e@K5x>)GK65^( z+B`0Ouzbo3s9+E=3uXDa&~s~Xdqj8k3{GMzKGR~c1apVJC$DXtli+%oE?VYhRjM$yEHp}qrMt6B;pH;iqv+I;A*EwqkF!R@Q@XNMnuJ%}ZM zY4v_T33os|yLR22)yDtq>HK}C1e4GFPWDk@{2SQx&GC%?fIB#vRz*&I z*QPoHvhf=&s$Z)TY?1aaZhrFDS8G=F@D{oGH*g7kw85;3rKQkG9Vgrb%E)`-5c9G7Ec z#}gvVNzkPO2eJ9kjUI%6>#zZ#;}EILna1wWA(3e$dWXGbM+dC#`BpDOwZZI@ii2x7 zzAUdgp7wjV-$%s}T{P6rvXvLPP!yv4_6ExFM@0^XiqhRm%k~Ts4jYHB2;(bFeoqA3 z0$l1I*@{zXX{4mpf(kvp;4%*g_Pwr!KQeV<&h&S4zh=I)9BZ7L^-JXo%g*d0wvM*z z51e%^fZMoFa5bRG%vQS!;TG9~zv zU66I5WrcigPn2jF)}?$#TZqRq&DOc>ebn`sa#ndQuj3s#7R%Un2neOx0REklKvy!r z`5jEal}4J!m2QL(WWf^VD%~lBU>BRttVKWveCGgPv3*jKR4Og}PJ-mUR-SFtmF-Hi z2U6T3r|rVpH_-m1%6nvEi6G~Cx9->B{_sM~iuoAOpJNu;TnE*%M#gC$rA0bpZ50tc z<0ifgyw4a|;+##|3e1rLlYfm;z47MiA6T$1Ub;Fh_lM5O;Ub&Vwu-pa2D9p9g0JLr z#qJOb{bR`C)lSQc^QT2-r)u}@d9I^8DqIGLhvA3|N@~;;$LvM%vW=@DHNR<`zC;O| z2gUs>u(sGcukcZz(w&sYt7=YD6qy#geaPzm#ov19krP#D0Rvs?CKziplvYe*^CAso zxV84EIPDDr)#^5B+Og{To|)scNCEC^`7j-jLIOTSSS=Ue@eOL`ei5S8$1CC{67(Yh zz%;#+k|#Mq_^#@A4;kI>Idejz+08ftxp6p`xQ4B3VvbXz5vFKGJ|b+k9abd;eEj+3@8N~HhdMM~{Djt12zdV>fIzAT7|Al6Nk_Lj zal@;{UV4CzZEJ7XsZY16RD_*&CM|^fkw^V{`o??POvEge|I^Vq;iBs# z3k+f6g?QI?#WrhsCyP8r{H>Ufd3dM!4DJlR`g=^zHWv8DMBegRFrF66H$FO!Qek6g zi}x*aE69fxvJ-%V%^@GLA5Mmtw;DO}N{ep%SHM*p$nEr*>e4Nf=%m&%Oh)PXvF|d2 zv`-?;S>&TRhZ%q*@B!9IK)anolmHrNJqAiuS3Cll)%tipG9A>`h-1d;8PSOQw~wqL z_-TxkB{mX)850|cpM3zRD75nR9MAM1RQzUUmFKqq~;vfJse0>56F!5a`Bb=U2go%fkGK4q+GT#-%YmJyR zPG~aGa36nlcZ7&`18#C06J!U-dD2iUY-&S4xSiv#HzM+39Go}Rd30lekro)EXS!Nh zo`1zJmxr>X2kn;%o@mWguf@o+-?~|R#EW0+Aj4^v9r97(7PlIw-WYOmwf3nddrMb( z0~|f2h{{I1ydZ4y%IBTGqZhguV`VCFBrHp(vAi~Myq*~(ba`oC)>o1z^!udY>56Y5 zAtp+HU1Z2xh4YmNIZm7vP9}85K_8Nd7UPM}2z8!ee4s-j!yU1j@;7vszq#R0lOISU z+un+eKW9fgj37p;|K76YxOQYmIzmt)wPlDA@_0QTQI~L&%=<{#&cYkR<=%2$gyLw0 zkC^xOgbd=0yB?Sm2_xduJt2$^o%_EFs>A!j6T^~f)pECU_M;l_h6%Lr&gvfWbEnWA z@!VkX-QIurh#q#}P+{#n&>TIUifl@B?O)#xm~g>(X(_H)D`~4%e_YX;AuyI1j5Frw zkCfnOUF_R^xZ0l7+^8wdQ#m9=6X{&2@-HnABwQ|A@iMv6qD;5ypJlnXF4gu8YXtEp z`W^+`O|C6(12p~`fNN&RKQZdtaCijXc8!zz#l%8>hDLh*UdEAsoP7f7m|~UJk~VJ8 z26;rv#FB1Sc;5S@s%Pc5#IG;%LNe$#)JdEwFVV;29Su}cRM2T!$BG_=&T-EPU^ z$u$+g4}e2$MZgtXI&AKqeDH5$U;mZd%~h1(y1L-4L$|jywjALuJu`XBYTn?E?3ORX zgR5rMrJD?a%wicP}H)Av&4>+P{3xwp5v{v=LiJ-Kt zH5C%O0`W4A)ONjBYe!wH$I!>YI&@`#wblvTw+`>*-Szu4?sTF3Q2KpocOK54& zFLac*&u-~@w|7r*UupHb0F8TB-!OaL-H)S{CdUNbY1(qm_3cHxq;i7T+d?>aeQv4W zL>VPt`;rZ^FsusR=`V4|@i>&Y1iPQqOxoI}-8AG$9>v{H4LWhhPq zBLF@I-5x`G(V7W-AV=SKTC_-h*Eyf4-qX!sk34eiae9Z#xB}4)ZvBV|xXKVaAO}yK zG^H;OpXAFINc?F$fUYs&Twj{gppspNGL9c6diiT!?4}m4dEnZ!zCPBA3nq&H8{ftH z1#*0U_`Axgek!LN?QgM_C*yeJ*#;Ng+f}bsPTEe07D*?8EmxaDNhDM^8>P5$V5E^u zLkJqkN)*{p1Hj1wH5xLX1ANXy7A!)HCfam5Xp~&}`uP3bX|j2ky*#7Sa2f@~0{doR zfd^tx>}rJvX^mALxqid0FiivU&YkO`^5x8qE_xB#JJve5sh-0H5M zT>yu%IBjTXOQwmwNe|8kL*CU29l2CmfS*-umw8zqi7RvrhiH0`b3m0iUB1w&`!w@? z|LVIOW5}8fVlZJc+P&DRQ@2A4<$Us+4RoBv>7GgoVjm90PDwP#Hx{%G2)Q?-*>T|P zlv3n4{II8Kd*H?4!2Cj8{Qio~Yq61i&5S_YFlda;&FlhpOL3Rq9 z&jWum6|`q_?YzW$oG#fUGeUjH-!VKRY}Iti8mlW?2gLF);>@-MgMA4gpT-5_Iyt-U z4X=ORxjy!Qmeneo-^_HC}Oi3D|7t8`-beLW=fvxN(Xy0z~@J~YUu!{0)J^PRwm!A}fpm-jTy zW%dlP0zY*}r60Cei5xQgzHjXG;rpp8yPc|`s|0X9(&a4Zc9Rw-kiP9D5p%)^v@6!* zl5v0LS*VA2s72vPBO>Q|Kkw_06KBObGu>=iw=c=x!0i!Rg`1y9=`Yo;(db)<;lhVr z`E-BVZ)Sg`4ri*|gw5d@PXUx{AU+ah)lk&&U|bt0z!+KWh^3_*9PTu!P1?07p6rHh ze2u7u*Y5~>d}PMxV`VGai~aHGEltj^oL;rDN!D)u_So*neIf7=lKF(oc_{Bwk_PQk&Q954xx|of#`XOT-RKvO0k`T~|IB7pz8RetmR;^8A$q82p;wK| zZ~+x9Sc5^=#hpIV&!KBNePV^nQg=h$aK*&fmYnmW+aF~d^L0+@LTVy1auRjfV(}8%#AvIsLZ!_nxydV7O?=APS zZ}#)O>xVs7p7lasN%w+j(Z)iKuhU8Aj@mUNxOd|sGqq>P1DsZmKbw2R#~5VK;yjdx zY{!m8g0I?oLnDmabRPA)>Gqi*NvL=O;EDe1@2Dm>*uMGm^zqkDyQ=5A5 zagDFY*f2RPz$GF4(1Oj6#T{G`5wv`B$&)4)`W1SV=(*?6H%FZeJLHl1v-&kxL-VE< z#7Cxo)EBYU9{KIUd0|YAF{CGksv*4z#GZI}q{Z2n zf4XjYs6Qia?rg@Vx~Rbf|E7(EvR#GumRC=AC=5NmEhNeO0q8qc>%0UCmX4IiKl1r*waR&jcIS*X#<6a<^<%(Xl9 zh>c7EwntVcx7ZTcXhGqbXu+9?B3Xm$@e9PVk7&V# zjFv%GR-y~A$N!7wG`*Yik~_PP?JI za*mqR8oGjR6dO-)CO{_@HZH>g<8rx^*f6;a3h)kCd9&nb zfYv`LZF z*Hql5rEU6lKiHrl{c)+`g({1~X4gKOr+{})pR?WHRI+5b+1Qu+=64)+Tmnu%u6jlP z-MDPI_-)Va&1(kV)1x=O$jz~9X#b$c=Pw4HEA!K z#xh^dwZ6Skm7EW+_$K9;Ew?K^w4*flewI5aH0Jgz&1d1TP%|?6#F`ZYOAWr7{yI)u zB}Jai*E#$4j;nfR$WXZ1re~nWYBN5fNV|HZH~3PobTI$nfhB`NqXvLi=2EO9IxVDB zpA&+^m0#C`!;)!6_k>Ay5$cq`P5zIs+3(8eo2CD)I&ytY2<$3-`;PNE2M{dLI-)P% zl=Ra$_2!!whfANFJyD~cId+i*AY78)gaGo`Tb!P3V@C1fY5F2{{^Ee5`QZVpF0Z+F zf74gT%99^}Fp|N~#~wPZ3>p#^U93^j=QN{;h!6FbgsmR1fXjHRU+av~N(TM{HO~d* z&0USeVXaB+9y#8Qr2~iZiZn1Dl}#Hf78ODwRj}{Y!P{^1QqHPwD=ZXq42J)YqkE5M>hb>oe$MVTwpp%o z+2+<<8>u9hxr@?7LaHGmrR7o*I-A=>ZYfls8VLza7fH7bAt|Gh?jseYS|v%B{m%FI z-~QMh9@}Hb&Uv5r>-l14W5UHZD;0xYZt=M;r=+tV1P{NXuwh> zUVe|GX|Lt*nr0O9W?7=jA5PAxh+~fAlOo46>A}%{<0T1j^gAK$t*RSW)vx%2?!1l} za~*@VzV^E}E4-Ve=^F)}U`VNseFA8tww2IS-d*LvHg+8iNrN`ZBq5`p9yBs}BH zH)X?7%pzk$ug6eN4hr$V9Qi!gjWD-|l=;XQ_i5tQ*AUM#H;pLT&=hn1%cr4zE_(&v z+-jXv2v%hHOwoWTHRzlMbWj2m&UuwuoqrEz< zV?InsPU10Z4a-EH5kI8G4!L6?0Zme83D}IXJACA?%={8&c&h!g@r{VamkkoI*mfqG z)(tmj{YxO^?rhArPRBThl2JSTb>*Nd&1rv3jB9vZp)bH>?*X8pCfgx?90L8oNWh*X zd1#8ecch+2Xu{%jYJ1Bf_=KET+OD!JLf=s)?K~t`3gG6)Yi3rgn9MjDWXj-jlK^+vtpB^{rQ37@O>ItX}(%+Ri#Q;j~zj7_A3IEltrVDGKP zIQrqn2}2zoFbEg>CC#2OB=dGy(!WB!{~O)|hwgT1VA4w;a}8EWny#*{belnniD|ti zxHeK`bKd^gr&nF_Y>B(lx-VQ4=G#ywDD8KqfRK3~C$Z>=20{PFx%WCw_xbtB^}Dvx z<$%f>7!MUeh`k-ib0O?lPX!LK7v9o8p0*BNWq;tP1E?TsjGr%$n6njU7i%nA1I%9y z#>SzYch(R#Y~yRrJGc{g0epCMKU=By6>FkT!PlF;8L4d|jyyojYTcM7FNpJ9E{chM zQ`sMc0L@NXOq5F{lT)72T7!`@<;^qU^_q%t-??3{V;R~Jk>qeo#P3KlnQ>z_^7gGy zAvXO6vu>`466QeE#%VG)AT&Vt-?$#iN}tm8Jz$*|3Q*@* zlbYB4DCejozZC)^`7@uO@IsUw8~qsoQqBY9;*X!%>VhboO)(-=0tTN)kpYmyeG}_X z5KKHEW)DUI2LcWmi^p*($=o388G7XS9sT(CCE-{}>d%7DJg7q}R~= z>WC9kolbg~@&gHAvGwYt*Z`2$6-hgl(ESHVndNJgp9OKMlyDI5c^Juan>m#;lUUmX zk1`dJDr=-PCZDpvP$$YMw*bnHH;PjX3Pu3~msmMwqaz+T)}%2-S5I7nV@z0eLGK+z zsIMa86hN6^sDI$nZq$I`60Lx7tBZ14Y|WxS3<7dEWyHtLb z(Om0PPLuIRG3p3DeLLL-0iyLi7>0npnGJG=eGhtz!r75!QX&VsjJFfmNenQM4@~=& z%F`2j8NpJTf=`R6LBHVB6yvlmh&;<6u>e{ceC{TuEkrK5C8v!oS)<&mN}H3?d_j!` z@Qb2Gv9kv(uA!Z@&{v3P>_A!(Un41rwzGy2%UJxCq1u#<40rp&ENqLl)o`qZ!8+Sl zQray1m*nIH@TG!}qq|*b{%TP1wF!`eFUC!Nx!uN`Wi}0W5V`LccF_7G)lTAHw#Vb; ztyuj@-FfNLsR_Ng8d@E{AY9;q!_9s^^SZu`<`HCnSRgNF((|W53V;cR5dXs+n%C5# z5QY+)1>om{2{1s8k|WSbi;*t!e}c0GLK4bbQe5o49d7X>^C|a@@D6+&4CysWY!g+( zy#e(^XnzKKEfZ34AIGKBaSkGEqr~Y5I!Gz=!aFin5ZQA(MCfnyq=E0a9e|%bSB)Y~ zmPlS3im(=owTwTehl?;h4~>Wb-X>CoG6CWllni!Q96c-?!o*DjuqhiZ!G=TV8~2%m z0wlx@o;$}rNDnw^sXkX1IKXbe)VuVGxH)yiQ9Ab|Z>bl@D{IQ|5ks{v$^M{*ZzYpq zc2Dk`R3)BFR~7EK=n2%l4RyG~DSDr7Hc_S@!{4%fS;qU-?Csk-eSt@wW`1}5j4ioV zwsDDO367H|i~Y=r%`-W(JLdy->vQf@nXIvJXB&0NC7v4|7_E1pGdVH-Zpr3mQ927v zi;C+i1QmgL8+@0v4T#Kql{(Rz(!3+;RV|?yC$F50xcpdRoYm_*|LQkZlg5iBrm2aw zJIayIcjWmm7W#+w?ikZpAN)3PBsOqQuKy>@xtZAj+QhnJ!YvV)pyNH>*vDSfC>6UY z-*+bFNy{!GQq00}e*TLs>QXAZDgq3S{^u8D_4f{xgW+H%gCAa6ea&=(S587{_m+Sr zf7NL}Kh1;yO(XBe!D>FJySV|h>>a#XL7rw5{?67jSGFUt;ZJ&eG^e&SYr1?++5WAf z67j=ZC3UUg8yEhSpg`a7RXqbmv-@xffd|Z@FHFo*+M6Wio335iWNLXzVt*V5>DfMip%s%rP2N>gSsxOp=TmVsvW#Ugm5F>k8h}6$xl@qoX$M>f5%~eC6xj zjUAV_zI}6G)HKMa+q*T^eEt!`i0Loz3gSKDBnq>sNU!<{_Ru!8$-4xbvw=1-yyd+i zn2>nGhDgoD!jX2k6?|O}I;M;q>U{P9amw3bdNU_A@>yOb>T=VB26{ug@W$hq;R(<} z?gRVz@+puxnVetXZXpNRP+CqMLM{jOp;XgeKSRJ04n$=mJbvCSuIMY#rw6pQ+}PW* z^?i&5JvvULus80S3~4YjiwRw!W!`L`?x;y!>t61FJ2JF#(#ZHW{fG*J2e4Y2wB`iysNjuHG#R z0>qGZhuoK~;a|5J3gwpD1KJ{bUhT1@_|-hB=tq@$0!ofDVPp3aavbOw#5jt~eQ=zf zeo{^pbO53GHa8@2_C+KhAT8*^m!cJmX2);$*K9USjlHu? ze+oJ)YLAbJ>TC5s^2$6+-AF@0e3^ty+ji7m2EO_%&G1;9JI2txT4yej8_Y{JFukDi zmDDa(`u4%)gBNlro#*is&s)v@t+QwpeHX1r+PtL&){S>g@7cfvso{6IuO>&WKx^Rb z&iTbmW-AyfHT=Uxr%4S%CC~?ir)4gpov%4l7iw&}1q~4=8MM$EO0LB4*tng{gAyym;EH*0}0ZIjou=He*(~cFiH#|#<&lBZIF2q)Ox7Bad5U*g`|MU zooqk|ktuwF{REBzQbxIGLy5^AK2ZQz3bp^E3JA*wHN_B8Sp`sL<^OI$@SK^PPM_+c zt4~3g-ZG*QjF!AfP><4@tI;&6F$B(IFd$`stN#&z|5Y7m%0rTC;2$m3S0IJSRiX3A zwIV4@zDCqE2jI-jx-?Aok7$r+3elnm#}k}K&Gb?F9run4*|gY5H9AOe>0|7*(MXG= zK@j;5sLqR|4ML{#KfO-os{FC2%M>{$0OxABtk{F6C%` z0}br~UHDosj!mLURjDG?3VLW3n*>NO-=v1yItg>^Yi%NMP@-C~3HQp>ATH8AT%x)| zN)bRtj$9JeO@#`f2Sw_$B6sCck-<0qRT3RftmnjCN5niV^oKw_b>?L}$Qmll~Fv=zWb7TH=JD>jv>`B+k zqBA?_H|E`D){JycxRq5J#lx6x_z}YizeUu#z{GduLs4pTHTaHJ*xy~`?j8QD#IUo# zZ~@Yu0JD_SH*7i@4xXqCmerW+SzmlwLYc22yr9yoP9RU!&=NDqFKqBTK~lfpx^1gy zvJ*O!i-cb?0A?)h_eF?<$(Mv|he?`#A_V}OP#fTU8+6Psm zB`9D`4ebv&=tU)U(9KfEaixFo0X2jz@idbftYLQ_X^v4v?>`3_-U3wv+%C3(G-U@{ zN5Lm5qy`E|e_N9NTqLZ4Q3AG&&_Xol#|;!x+VUEvhm@jlqY~F?Hqnp#(LxDlEW+et z0Swb++`bRow~L>wdmwnQ>7jx57uu;v=uf8^bMnrt+shr27T9mLk6hM+HOK|2f53XB zn~u>DZ873fBnnBF7}Oua*wf)Q75#pxbHmzOEnNCVuKF;;Fk*Z}5qV^{Q1kLlgNro= z90qMir21t8!;1_(d5r`0Z^_cz#HI2jl*Yr zmQGooX*jJ(3|=^A)K`c+n^vm$^ssYQb}REUy@ge9*=j^YwLken`~FcwV$1yW!@e&k zG&6&#k5+jxtg%Ed1M;5HA+2kf$v<@$k(;)vf${hKmRqtVU}h`RNmN(D*2JEr4Wm;av14KSh69$BzM_H!hgwJcMH1&cOSzZqI(4=4b&?zZxE*D_HEgP&HH3xqykODBfVBUm&Upa`}00Rn**e;d8yG;eO$2fN)t!*|hl*eEnK zI?Y-M6mB~9+3H`>_roi5A`YmmR2C)UU9U;DY|!~9dSi{ovbURHeiSV&c1dYgtaZ)( z@CLPVyqR6#vL5m0;g0_yNR^@Hd`oytDipLg>uXC=O3i4(A<`jl)eXpWu zcO5EvxQ;2B$1bny&P7H{(B4V)Ib!V##G6xDEqI?)=LNs&;|VufEPN<#t0CcZhIbA4P@J5UZ}cuD zqv7HNQZmI0OdxX^6+PJuE7jes*{VfDuNYRIR4~X)GV7v|%K;ZCodU9B3(Fs3rGXw!AHBv<^^5 zCpE)MzG=Nn-Mw+!ocbu|I^0Z`KT@MIBlQl9Ay-teRh{kcQj|Su#!k#xMsfp!bvHPuik6aqKeJyFriWC54F9%eEMReUBD16=oz>Bzh z40v70;*jzID;wT9#@z*0uuF^qWEH=%DG;^q6kG|m+%-~)AN4tg)%lW$jdKgMekize zxF_-GIk7xc`=SXtcM}%5o8*boN&N8B=PYBjT2xTA@)g8a>u55+woG7(zS9`%6|f!~ zp`qG8W};Sg4o<3NkJlAem@@9JAle#zYAr$6gUXS-61$U_qN>$=!oW2RPx*Qqn}hD0 zk;;Jv*Tl0(Lq87UsZt>tZ9Af!Ex3RYwG+qpyAQtvl*k^vM>nP-%AZ%&rPak#0IiJH{h9kVS^wL8 z;M}&YE%MX;nWMoy>W~kJUW3EW$*JmWw=_TtndOu>ICbEQ)~;&yLRQjvr7(+vk893 zwWc1mFc0c}ME7+%bRMmE;Q7NoS>(YZhGuJ!*goH(hynd|3-28IHk}3YD}LN8&#Yr? zXe{A9U+GgWq_^|%N95~cozdHI+-@%{D2g6qKFZ_OeQaQcldzRF6^MiFw)6iv~-~MOAc=h4% zwe{wkx2Dg|J-)ZA0(ejQ;$d+%hDH7rMT;2S=626g)0OJ}<^C=A+w&Ey@LO$*-+%HN zrqx$I`rO-nz&>U9ZvNHHFRtz=FWXa68AChf_BaO`+8f;#qTw>Um}r-kp}nuw%;@h~ ztM41RUi(O>z7YbX4>@ywfheG z?6&jO{pZ6AdzZOR2tB*FwQY2pb-RGgW9*O$X!WjJMX2sT3L8MLA*0%kWsU5OeiuY_ zkJC6P-BY+v;3fqu}`Y)p1k@i*O}sZHEkh#mHz`k7HYh00E(ovG7ObM-EEWAG?F; z97_!j=9KK{VTCD4M7{q$J|tc@T_etP9OxF2T*L@AgxzT7kdh3r*`#qYN^=bVPvYb< zyk#pU@AGyI4jF@ww>f1NqN}4pP)}GaBK=n?xbmc;yxQ;5JU>8$bOdmb)o4dL$mbv! zaAgJ;yB9#1i;xy9GG=5kaU8IfRVN?-o~(K=1n9`HRd@Y0d02|P+7RO1Z6N+-d(Mb< zvd<|^06B6&ygXnm(T4#5mqMD%wqxZeC0R`kmUy{p7j(8?sLb6cJUP%7nXXH^-o`=j zR9*qg8om-I5a~}ER@5z5{l_LLS!!5#!Y(5I;}Wg~2k)Iq+1sHje?!7l7np$vVH@cO z8Rf}2{bszNN4o8`dA1p!7KcjtIR+R23}b=nmvO^W?38SwzR7pq$Y_MFSO61_akVyj)FjAq`#Ub4lBO=+PKM-k#jbtm-#uUUaG8O&? z(pNeDaxC!%mr+-*1qWDu)6rk#q*get6SGl+r81yU`)Yy?fQVlu9yuJWN-8ly1`M%O zzetEueAea$ty~1)50M^{QA2WKFP9O`CN57^#n=%Dmq>j8P|r532Y?`v+7mMA3t5Gd z%WBz(3zLAY5Qz#A^VXAQfXr=RZuy=g0D$<%!Ect6>g37UT?Q^Z^zTyi*Go%&i#Y*N z`lX{4D@sWc8F+w;L5Q)_rNkbE66wdH{gM&gIRph4=?=>}Z15;R`o<<0UBqqA!)u7K zh9}gPZovKJsT`FW{N<2d@c`Hoe@9hWrm&i1sKl=(buj=>;4*An9uc~YglLdNYMp#d z_)caw{I+?jxeB$7GN47FieTfWIHW#V<2}ZLs!`1k(Q;Km=ccS^^y>vq4>PhXxz%27r4ND?Qp0UUT4A0Fkg5 zU8*WVc>PciVN7lfo3tPy-jx9fl9Ffe6H1#pM8p;;xQtA?!)-cNqZJ_1{3;>+7U7== zlxoSth)W7sC?w8{Ri@;`YjV;Xeb_am#+KE##zenvt&|I zkooL0QVF2)Pkip5Ea-3P6}Zjv*-T{5jY#L6K=%hvY^Fc(&R_rUiAO$XU<-? zq+Wrw_?S~d>8!$5C71A9p{1vZnTLp5X7DCb^Ir0q{%7qwBTRN%Dg`hQ2=UHdKZl^u z5qu6xgRGvuQxg)O*r$Ny4YDR1bQ2?V=_`>65LtsTLd6(j~b(y}7+6t6oeZz9n^m!C&M@ zvPC54J*0Zh5`7-(2VG4jA`Qt^|It-1{8sTw-F4s%;F*FS?IMkBl3dfyqfREi`wqxi z+Ve0X6i3A`Xu`sFFra^3O7Jri9(k(V;x1A9Y>VFzMEgDtEJUvUpkDh+gwmtXkr%__ z`E(u5vc;5RV{9S;gD4s%1uKk+WOSWE4JM+0u!->c^IwHZ>3Py50X@zqv`_=zre1ha z>#ENqy%K>|bim?@3l_lsW@Fs|;w;4M9uTeV0_Eft$q$9QZj2_Xo^9?)4sIw6!C%`8 zb?B58UA*idXtvUctk3#bNfIFv@W5U@FnI*rR^AXouD=#8x@R z^0O9e>vM4b#6|#sE@;;miZA&(nOllO@cTE%XJcDSRc0aLZw?NSA(d>E*MkTX1|XM{ z#@(>`WYTZ3^4fp3>qHR`=Cjk9y_rARl-|P14lXe*3f|C6D~kJJ>vPoCNcedw8p z08`rk*tlmE<$Z5}Azmj{R@DJKbvB~*wM&I7Z2pR{ToGwZacIE@9XK*;gM=u}b9CJ0ngnr{MaUGB62ypX9-{gsTAw4g zEJgnl;c_JC2nDHB7Ci;epV`>oTmn^wt~vhjrYf)odPEgJeMWw658(guaPq=qE(WCf zB-|f~_K=vA#vxSz1Mf<;Uqon?fp`1?^aqH<<<-3_#p=+lHUhv85xx(4P$nXElZTvn zK$;BkEDSqc*7_lwS|KMjvC-*dR)-upMBc0>u$i^iZNuEkC!^kC>9}0PsyLa(rbL&1<}Baq zT0?p##*~S`+2j5iT=b>2$XW8}0?#~!gYH2hesWd0vc><=wSJv>8~f#Egw5HkdF`ZC zhds$S-fjeu?#~pv5G7Z6Ll^@9mzKm>%)|1&5cfieWW>*`XMnDps3Ou0BjY?o^r^)O z-3rpCW`d{q&Q}E~n>$e6N_x0(@3)*(FP~M| zH51i!o`gWbmieN80P5M(h}nu2N5_HBq8mbW%t8T4N%m~Z%lG+ayybS~A98aLcabX( z-lHJ_!+270`~}AVz%K=$8!u1q+|v_)Lf0PE#&iY1%G3y;5y-{>R7s z*4%Rk7v^rlCloJk2f3k6npzC&j~;MV+#y)X!JC;s|J9sOAKDtsQ3G-oeEMfp56)-V zJDd;v8r6H)z%@@_c`YjR_Wu;qS=sI$4Ay~H#TRsKN3krp5P-v?@uz4RtiT#%jtkB) z4p4{?#UPI3l*X2z$ylnrla8GJQ^kzV1mt2tHXuYeYzy>?W0D=)FY1~@uyNb`u{x?D_R6#~!#B+;jrrvqO_VE=-l7Q}>+eL`%h{WTV5hOO#whCWtHO4* zgd6IAPxN2tpt6XzLf@2H!;BA4`%c<~_!izTIy@+hiE@3XW1HGgr2GhJdOtemXW1~R z`{HDu_1yNXmKVQljf2egytou)bF4At{mnr}V)u{H&i%&Wvk?!L-_wEKd)HZg^g8RW z)8eHUC;cz8Lr%R_IZ=7;$ z*8J{r;8LE!mTN|Z(pyjai?1%TnW|s3scLHTQ29^!seOqjK0a7pV%d^fwk7;si!B*I zct)rXTJiHK^kyT|=la~?vgO3reT8S6Kk-^#%*4T2l9PTQ&#c`@88zDBn?&66n`gCJ zX%(5%-C$$&&HVYwKhxBz*3Ce_mg`G*yY~m|W|MEZ><6YeS2B#hzf)EZ#N}PJ)LgP6 z*WrZcp?A)h<+1|>3D8P~xTQejerl**ptQchNsV%NtK|n(aPypFVrJ|{Z1h;`8V6^w zx-9E>Ld}eQ)s3;uB}<=Chwp1Rto-X0>#1fO{;{gk>A_p;?fFYbhUKw6=;gipk@}I6 z(q3IPjcL90$?`HSZv&0u5=Z$*gYUfhTNatTozDc?17a=hjxdw`9z_P~N8;F&4{Nhe zoaeT^T49o+W>a_&wQbe{3Ec@~BjL5au0QKrzWT1&+D0wE-y7Se$t&6cd>{-Zo8;lO3YZ$BU-Q zHBL9OSD7ud8z7w9c;~nm?zr(%Vj5fJvkZghN*x=&jeeW*PRI_m8z%J2LoL7QN5GqmogKPZd?3kL z)O@~t9I{ZiTIYs8=!>Yt z^157k<7!#($?Cr;q{D1kepX`1jV`Z3!*5_w_~aP_zj=^ARb&UB30L8FeO@|Olb@s6 zMSCK&Tco_6u;phu^i`d=;w6B?pQMw`*!-e0z<4>Tw#@(l0T*7VoF_r;1KPAd1AJr= zroLm~Lth$*%bO^#z@de{1qS)umSo;%JEkQ2F5ZuoC3-=&@o>|OJOmd?Al=SR(l zH19mzf~XshX)DS4ipBKSC*j*?RkjLcm!`BjQNl* zm+j67hQS6|zUwSMx4E~N|1Swz1=|BT4-@r&El>ITtYRvHEuh6TT?3eIC2#J z8;VF% zWoZaN{aB!uRQ#3~lPac0D>I#rsO9LL>IU^uMwp`-w)#v6-t%LS&B-fNKFcHjpA%5> z5I`dtmFj=1?vYBatN0?xoSCUwAj`Lg6r^1|sZIjGx0q`yu=w-&Nm(SKE1OM9sc_T& z%kEh*=O)}O_aM#kum*!QBvxZIEwwbqvMwie&o8f^&xAg`wq+Xba%0^vMc>j7l9$Zq zfB1F>07untB|LqI@>7)UGRwJRzA7)82w)E~RjI=2d@^Lk#%-L+-%dvzWT9U^%vIN2 z^7-N7Vs*g3AG<#;KZA}57GqsSKw@dWGwX^st^hf8$%bP>?1$3has&Jd%{s5^)=7Wr z)$OjL2Oz-P(R@{In>2`TCIZyO=ZWlUFtmAJA+)OW{CkINHmh+|$%NPn1dh&U<4~kH z0ekAkP&XfrK@&T=9*;3U(66~yp;p7Ui*e{wdi8DzkgCYvCzK#{kO!IBqr648akuPb z@Z%h$2yu{uPGVt*?41A35Hi?!XBn#MciyS%4afHA12X4i1?JffbX7O@phLd91ZzPC z(wT*oDwex#Y1i2Kd#1o>S-zVHo9T)EIaj`p191Dhmh8XM^U{>y zKAwvB4nyyDGW_x8Ajr0qG(b}!h)ahSDd8Os@?mV6m1Y`n;VuBjB1d`9P%;aIzawlu zMU2e;)`dv}$SkXD3**{2bh`W)XDUAomwjL!LuF<=>R=D@(0HAkgE~kaAIRB+oLmIZ zrm%jBycjv)C&aqTu*(%5jA_9#nR7-zvS6iG8TC+z49o1OMoQ4{{ng399h*4*f&QcE z9}I{VRNX%oQ=B{7JG3%+xmnL`-e*%+=&I9}u7u6P(kW+c;gV?1K-~bm5SFdI091A#3h-lQB3hNuVyvFM8s_Joo4dm<+ z@U4n0sa0K%mvgi6GJ#bN(gDs>%DaZg+@9=2YA6Kv2qwqO(|-RkPS#X#q7z@qAi-Wa%~Nye80#*?I&~a1mHvHkr=0X~g>RUDwsS8a(xVDkw;_1|}4gO*?2nB-n7 zAP3)Q^zLc3TN*aKF+bfGvsiXHT?l_1$Yip0k_Z9MB6sQN`pN=;GygM0GsL-!NJI+R z+EWJc`Zb*t7%d%S%9zckOS#ic`GoOfXL{%$GiMKLs_)&fuUBGH=MN0Arwq7kJ z4|b0OxcSyJG0N*3e;*SW5>phl-|s^$NG`x8rG*&j3?B&1#sGrQW|+>az;Jul>7Dng zfxJR7R0-fO&L`3_rKS0s8Uw8yfGy%2f89VUwkoc19ZLy3F?stW>wZgCl27DGV%KpZ z&fy{KtLnt5f`q%Y5nQxsl_)|T7wd3YQ9K%2kJH;9owb0=_1i=Y2D$Y#gC_} zzRPcStgNp{1@18$(pFa)wOl*4W6|B!XN1bq$}C6o7oy7U-&KR-7W>@`KPYIg0=0Lf z|K}8C)cVITb^K|GBjr86+F9>pLv{J3#=0}L?6%IT5}Xz&9WTn z^N*jN4AvQF9xC>8FUm2ezbPetxl*3^?bUHNo#9Bsr50vYJN`=_p*D6=jSoLscK!6> zZ_K;ZPuKaqSiQ68u%nI;*lHeC`?qs5Y2ny^1*X;f@D;U1`#;n?i8oY5Y`Xd9Lh#I{ z{9md+y{fPdIu$poH%nisw+`+dRDH%jmvil8W#s0O)rBXnwHC1IdgN833X?s~n|1b{ z{OP45yuloX9mpDEwOb*yUZ7N4FaCkbV(E{inYn!@Cl<#e8qq@xu$WKX?81sh{+k zj{11c`1vR8G&}vdJqE9j2>)$Z|2^Kg@)_>bS>eVlm5gdhp=4_Ty{a@-lr-`3aQ|tu z_BW9a9J4I6?~hSyA;98rJ+dDj-$F*Zr$Hb`od=-e1Sklor8gsZ$ZP`uAy)g?2*lO< z64?;w5QJ-lP`(hz2Jcm!GB1<`kEbbe%`&Tc!+!0@0l#7M&^Gi+}$BZzq-Et*_P3`u@85*`qxuy6`+&Ou?@O8 z#aiW7dyNL>Rc%5^GYI}#Cfc;oq)H2*i*kI}VXFwatHm1kSX&}&PP25d8-<7*#<9L> z*DiI2;GJny`;M&-Hzk*y)U4(sl96`@5C$yq^H8v>ON@oU;3ZQ166CNm|ayAN7&A$I-B^B`|ZnQm~4yOri}?qI>^^P`_X z8BPp1#I_U=jCgQlKM0sdXy_q~tr8GpYXSJ0jLpB%q(!dkf@x=mc}TU4V$@BED9r9Z`tdCCgi%R_YEaGZ|)QO>(GJE?T(k?TWnh z5`Zbm4N=N4hr6vGFF!dd$@VAvPXYOR4qS^7H%W@1O4!ymqby*sP#{31C&J6ScjTV-}*Qs)c&E@2ePN~rdyhz~x^*VD_`|M@(CY(K1mY*I)($^ALAvZl?u-E6pVUBJ0R9iVOMwLWXbZv(NOdh{w9Qqn8L=4xq)yjEdj5-^j$kB)U#I-J9J zpPmlQ&LpdQPGMWl=5LRSyBstZJ^mpO=p{r?rswpk6 zgxyP1j8*?y=sGU4)k$i*wbq{xo7&X z+Bg7znCMJJ9(4-)#~5Y7gL2Pgw?~<+#gC?UID~tiF!e>nZOsl*Ci_{EWt}rbxUGhDR z&c1$g@&Ocm>Jbuj0IP!b#W5)kD+_fU(yx!@G8Op;I6rS@27F?@TSPLDD|*)qf!} zMEPk#ERQEh<9J`%{p?rK^u+YiH2}^z7`XgQ`-{lJbH33*v~Ndl9uk4Fj|1dJy+za& zNi$V@jDU<*CQi;%FS%`}#!i0`+Gd0$=FFw8lrZkCN?u6Iw5mS)$|1ACo?MF!pqz8el<(J6t!QGar6fj)|lC%9Yj$b5_qT?|4$1sRDRp@6I`ygqCs9 zSTb}uB~*QqZ{T1B1ml9cjQDIbdIc_r3q^s;Bbiw;(2cIC3+%4}fbXh!y5WlgxADu{ z00i#U`SETaWW>Daa>viLL+7-P%;zp*HNF;Etnc@JECJn}cdrL|(x1&>V`fUkr-VrL zLoR;AIEVe@FIxE_Uj^Kb6|EQpEzO&LnleAyBBJGskM}&r2|~B|T5jWei+;~VEq$XK z=`Y{l0eYjI5a^g$l#2l!e>~c#HfD0fB?hNp>*(`p)-6`!a{8#JhQ+;W|H{=-hjM4m zt$7TX{^q!y3PLT+8!JoQ@GDKqyeLyzup)Z2EJOdru+P@Cr^9$OsRNEX zQ&Avai~mAhs7+2&$Kli_HHDROI8+)Frxm#o!py2We+(h=fCILC@+&Evz0xUN>*9V^ze7u z^Pm9N-}3A`VCw!yTP**wYWVAyPQlxrN)0=l>js?oVFpNyoAf&ODcWD~`OlkT*Sl;D z`Kd?)Ief)F4{wxO&z>Q<&NRctDgWfjNFc%F18F%n~E(5W8 z;h+boqAKGfX>nz4{nSU0Cl=Nl-POtR{p_4Y@I20_jP2fs6qb7683|&xk6kAjAwp)$ zzx9)j9GV9VEdE|c*^KE6dB02b>BSH*htM>)7&(=#BjsxBdg!DyjE$}stl)ZcP(#cgpn;*+IpAsO~P_CfBk`! ztJ6>21Fr&clCJm)LCWzRrayeotUVQo>zven8k(|sNu=XzuT%fU{OwtCXKUptFe-gG zX-41*=G{p@ceg(%Yq2ijW{&Bn=#bxoCXAt$Sa;H_-{gyp(n2SW(Y`h^)~c2t`(L5? z&5!*-bUrDwDtcwaN}caf%x>KgR^)>tRW0)=P(n*yTyNRBi**!~&^H%xBb-$+-5`OpMHk49W>g^vw%v+QNeMBcb(2 zsCPG$BQ?ah_JtLFvVs^kqBh#wN@FGK*;^yOr%zOtjoe0(-84gOx2PGL-(9`_qH_Po z)fA$7N5kBjwnOU*jAv)H`|ShHhQv3Q8J=fWV`JCk)a^L7dgR-k{_67Vy5qjUnf{~B zx#V)grw=vMrg|M5OT7t4BGw31)x=LFQh~^6SaRW-+hJez ziorEo*3_L7$Mv=u@t$tH?LhHyk}6JU-DG-e?(N>Q<6FT!jhA*0!x(@0#o5?Ti%S){ z90K)HttL9&yHb1o-W9q(lAD6`w%A2!pb6Gq__Z$IQX0I^nyl92Jggu4(iou3 zv$BpckK3-Cw?umxLihvoUFZg?B-4z zo^9BDJW~7kz&b-&!3L8x3}N4PE0Ngdlb-q z^;%k=_LgU3Obg_Jq6K^m6Z8& zSUsMSf3x}#dTCYNzqN{R#Lmjn^$vCWn-u<^(|q)PaSmzzV+l#Tap%LK>r9EZhk}|X z$fq6PZ{XL0jW-5$?&#){I z>wr{P2c3kKkc4#<;!`<=VkMLuDj_-a+xPL?pRnEU*IxJgx~}JS@=EKw!jT&Eh+gmv7I=mHg{nI0@EAQ^d9<`{($6b)`y3EVzz@1t2duN;I)*C7LvGQ+d_t7nf z>+9n59I&lp*skTFoG;v9jLe)JWn~oAKUDA8JO}OQ@~ArS;Jnj@cW%cjx1G`Dc~RmV zp;KKtpHL9qjW)mSao4kJ4atPaoyc=9hIZe6=G8E{me-x4xs8YX`0dU_>8G05c8^|k zQ%lzV|L~97PD-ij*A$(4qTx_gkFVHG4nOAm<3>YM#Bqd<9fA_T99os>R z+kp7K`iPcH%HqnhvzO24ZrRDlTj-^C*sk%0x|2hQrzV>l{a#gQg=$_tu5gR6r7C*- zsHLn%xDi)Bpx|+L-G+L*lJvLD&F}ieBt9j`#`%1{!17Jmm7xo=R0l1EaoT9!sbM*0 zl@2)-UUmEl^F|#{qVHImZB;yE;|zR8mfwHj6g0b5oLiZ9_r$J=ynFT3QlHMp*L(rr zQoo-iUo*yK;KveaD@%V5W=b{_yNkUHs}@?0o{hJEdf2YFRI~fM&Ln+0FZc6Vh0;`& ziD_!{uQXWw=*)ZxJeYX-h^iNS#7#Q+@>hLf1wYs-`ue%H-Cvy8dRDrjio@?Z&1KK0 zn(F$5di!lZ>4zwcvWn3i8Dq1+9Rp^dA_QS8yxO-YHO}r>|Bdi*ZITOZ93i7UO8De;pN^3J{?IB+C?!N&6v4l0AnXL1dYb9ymYv>;@k^Qj zBmI1hC#8ZJvMLB7?#yYH5MQwy!!L|o$-%GYq*F!D7$T)Gw+E?#L@%W3h;XeVS8hxL zRgJ-jt7uMU?|rg!XhPD&dk_?32l;BfPXT!rL#8vV*lR$iQXLg3j1dhe8a$QpahpW% za9bf6IK#?1FPB+j8Y(Po=Ab@lt_!awbi)JQFqR8^*{SliMszR!KOBUVk0e3Kp$20b zXn%~UIDWP54MCW*Cgns!yi^t^q^K&0=gk<&)*cCcw2T#iYoe)+4HK53GMtdghSX`j zIiu1mh#osJI}Z28U0a$gF7}A@c&-iY4c_gR!AD!c#AU|fcSXQ4>l{7*CkZFMj)Lqx z+$sWZ`@^bk@SD+zwy>A!TrmwyXs~pqhowpekT0i*xKsw-7Lt2D>- zj;#oL-1^s6Hhc)HJaa?xvR}WHsLy%4Al9!25V9dcy=pf<_DNMb)9t=Y4>urNT%LiQ z6$Y4(x+15I{brn_ht^vIh>4yk3=&Kz`E4vo0y4elHu?z|9@Ef@em#KZX7Pxs#>zk^ zfGiY(REWR~CAmTL768!?45Bkp(J(0VS2@n!{iDwnMq!dBh%yba(-5+ntxDA+nC~q1 zfAib#K->$%tGWE5PNy5q=$P z)KHRJ6GTkcVV0SpbomqSQf0FlZj zrwXfs0aB_EC>$2UX!9>Ik!}#aQ>fXiF^mujTE#SAr2i!t?C4Py6cT|Fu*8mzIRtk}PeS!*vq4ne)6#~_>jrsa09*pmVFjR?OpQ+8ApcAeq z;g-J}B*Zqs1UEol6CiakP@x{mAsBr01stlE*a@v7q=6?eE|o2x4L{l`ElEO3_V+oF zydE_1@m?@78(6(DCvX8sA#VX5gw+;umf(Wh0n$C}#56WGyLi5N!snB#*yO){ycZjv zLr{5-jcY*FLw7$yBq~ghxkxsK@qQl$y@v5cj8B?rmqRh+a5sC@~b1hp8?goxQ%vMf*>d5zlAP5nhuM*Qvpu z_M{83ozN))gzSXwUSnVjAAPKGf6yQ8xDxR_9*$}N2u*Jl7hbD!0knTF@=q(l5eQj2 zOBMnlKCmiJSg`uoo%JBLyU)%xVy8bm90*`#Aeu2OK8>U&?@f^|s&Y{aEkNX_aGJId z%W8!3VZt~Yl<^=iF<%uqcvd57nE|>1l_5e9C;TyeR<#-?G?|uLHgspO4RJY!f%*Pv zE%IXZw*D(|7MREclmR4hf#B4|z=mp8;v&(}nx^hJp#L7VyBRx{l%|gKH3(znMo(XDi4BXqy!KY}au~nm+Q)h91Y=QC*#A*meg$-3 z_8E+v2kV8Z)%x+Pre6?9s^wr5GGYLKFk4m{}n) zN%*15)F(E4;RYKU8J-n|I?s1?^6PUJU7Qa9zMKX~{?%mW5*EHJ?+6WRV+KwLlXNdM z$cYDGrO%dr5C-hTkWpKM2c&cafZS|w9xfY|MDShDxQFHQP(cP%$~{0 zP?hZFVmgq{VlwthmR-`LwVk+G@o<(6=>bWI1vy=EtG>iM%pRM0{#Ro=?-9bW@7<;B z-yMF$exNeC$6eg%#)l>s6A<-L=z2i$0)K68A2vzjZ+x+vOK(ry1LCkT*6}iarHz={ zOkRLNx`FyD2p0+8u7#?*0nmDI^0@7|jfv|;7xzZ`smbeBc0>Q;z?MTlUy2=z$R{yS&`&@02?nNGSVrPdbQavI z0rmL{w|!u_!j7=Qc!B^}wSqTmF+e7UlqBqt`d}T4@^%EBTG?VQci^ug&$l_>qhRHs zmuvE`U`OABXc+c%6#}z>52tWlfScknXkDGJRZg(|;HVlI_MnxBl>SRlJU8I9Rq$OKoCQsHX zK)JJRR~qW8y%#Y$kQyyiy}PU^5B=LBX50!@XO~~#m;WGYeGlP5Yg)uvJ=2w}^`Eld zJ^7?_3f866JEX^uTIu2utM70TFN3kA2^CjJG7j#3oxSU$U7bFGMxl?^XTpwk-g==M zt3^WO*B`_Q1hTM=9u*#>vw0w!ZE?NV376%p;`Sk~L{#fd@G~GxJF3Fm%}g~$OIKWf&w;B=Aj-f z1mnyk;&?YV4&lY&g@3gug`U&Q1eyqCbM{&ps zc+wIiUU+QTU?)SR;s*{8{zwxK)E~qokF{;JGaiH|JG};-6kP4M%o7Wt=>EJ@S@0Q4 z3_*mKo&^v7WZ6K4GdIQG>~vxrS%=3dYXw@KAF>H0TIiqhTp+l-iO zXGickem5A`R32Cz9t?#YVUVF8#d6?Rp9$cZ&cHtUZ zm&1PFS&W*p_jTN}w*(A9tRW)j&_{%-%Wnpbh%r6AfJ)qR+KPC35i6$oqdGbZeYdjy zGky5Q<;WvooPjBX<@wqK{S>1J3?(|}wlje860W-qC21yK%oMLH)*Xpq7#Ie}?N-m6 zQNOz5SnjMbB-bm^4q$1!4tv zShPViAKmy6=tt{CK8cN*hkwcqUea_%k40i`>PPV-BSIpyOvY}#iWn8pBMk-fng&#wG0WtA5GAI|Ec5hD} zL|+S?ou%>e$jC#^6Ov|32<>o)>L0Qgz{g0aKq4(Y{^nbb7&I7zQlXK5e- z&_#MLKx`Lu8rn9{mbxS)kX1zEjGA(TAcDlgO5bCcJ_TZf<#5>`#DPrJl7^ryxnu{8 z_7(xC0q*Ecu@jDH)Vk(^fMu(#$$}u(?eDWz1e!8S4dR;Om%^!gFrk${qgH=^^uMM zq?JVY$G*Y6<}4zjKqP)YQ;qus=0NR9FgWmuSpp0M3(PnacphlxF`#j}*J<9FRA5BUI^ ze?}vQ_Bim&d4Ai9ga~MrHG5pi9U3CrtbI+TfvUlfXThGoh9%|4rni+JmtH@H-yza;Le1k?cDpT&*lR0eV9eU@y8x?4aK#?K|*%F6Bp;;2~ zN}=@dQhOKiGIYQ{Ux(})H>j>ouppTsWcIm$a)nplDni_m$9d+Swlqz-y{SuG$9DrL zp8ChYn5zwBTgJJJpK*X)N$Hf?dV%!zfa)5Dl}~e|xWmU7$(5R!pHnhpWvm%{Z5{SZ+@1W0q>Oyp)k92)k;2Cgx& zYCNX%@=Gcf3I+pJro5Mx7}DjqTq6ktlB|zJs%RqTlL636EW3vCO|U!~CIbTAtS+_7 zMkAG9)B4{#XTt9dazF@jA#ty?=oa$bsQL(8J}paw1bCWJdv^UBJN2ZgQ0f!Qo#GDy zVkZWGaq9)YxB%94DpEEYMEOIR^2eFDYi?|?{De8#Qi%6Rg-RTglt^w!DSBQQ_jJOw2oKCZPC!g=cf?Py+31RByxR!xeiL8AuoJ|VpQo=C<0ynq1y6&OaR0CbKHhuoEGPx! z>R2NH9PBD)!8&L;;;{MS_;RW5l87gKne-Vz%qt?h{CQ`+t*1xo6gP`Rt3gwukpz1o zXfsiSKk_Q{4SZ@#vC2VL;~FStTobr9e8NPvVxBW||76Em56*=fLOJ zJKLvW&Yts#l$<=sUevl@N>2AZsg-dsQ6bL!OIxh_-Vc8U5w9w~*&mxfgGs5aDIR%h ztw8lE4ndyN)hCt@MfiYpL0|WmONX*#Wr+pZ>XcNIGg?~Kcm6ZH09Jw9-MhePhO zSA+f?7jDH}!Q3pn5tY-DC*i&GMei-Y%(c563}&8JTw=xi^2RFRiDoEtA1~~{Gk(y# zn!SUvJAVx9PrWj|y|>)@l+o#zJI!9ztahe!-I$U%*uCX6*1{7jx951yy3o^@ z!gXcH)BAR#jY26^W%RTG$kd&5MKR@|PIR&yfZV5$vufSm8upwO|7X|q`|IoI1|u=t z;2kXFrprcgN z=Y{mA7ux&!pVG42=OVQB%$!wXfC?;ly;JShu9rE;McJTO6)|t1RkT&#X_WuYoOwgA z$5h!geqgqxwMWVxm)fd;9WH}q%J&+a*iLd`Hmgra z?DEkW`p0*sv8z$@<-f|n6I)*F4%UlZI@|Q@sCN*BM;>h>&#D%FHIKN}^Ku*C zBl&>Q59d#pqMpne2VB3WGDX;A+ecA5l=I*I097w$-yLb`)8`+AKYiH%eUG=?w^I4` zTZ{GUZHMm{9{L%P`W*d$_Q)(3DW-4#LZL|j1~3N19~gOC{4|Q4S~yEc!0*YzNgIX^ z32ORssaihOUTw7l1qv3i6GLrvcZ+GR`6}M+^*wAPq9XKO`}qf_=n?m;y{|MptTG88 z_usqH_}@7wi=gV$(RBBWN15Ty`yI`X8~qP!7WrIld3qt_O6*0uQO$V8bgGXlZ6xLbhGk(2w7}QD zR%UkJtMIno(p1C83>mJuIO~hr`$3*j@s{Y98ad$U2#2`pvE|*sxiBM@Ns;jV({{6i z*7^|4Ib&!f?FetTOC%|f=({ggGZ&}P%D@O2wqvjbXzMjT@NeneYYa*zPPO`g52#}6 zA97CBw(ss$$^5TzBR}^~{OQT9O1t^+P~ee#i9=FybBYiyee6UShRsjj3k2Si-MTXk zCH15)Vj|;I=|OCHiUu(5-8g1oDLf>0q&EfLCEWVe*b{%%fXmww)gd8ts2V-V}IEX3K;-ony zH5}SIeCwwKTPBH0-%{5kiWXkjw$4kAUEwBCp38(+auf zUDeH^$TGUEKUus@N*g&gq`Tu;%C~p)T!cpUX)1a~V?w>`kNZ~tB;)#MK+fgS-Ashc z#LHYnz07hk;=t;44TjC14__ngpVc-XMwQ$mDp9{?BN(e8Y=-Uk5g(qm1T5wSVHTE7 zIUF8|qaIpRIv1MgFpLQFP6bcUQlDpmc% zqp%-`@I68PCZ5vT|JCU$bmU^(n%3<1GI*8?2~EgI2KBJ;_`~Pzmmi%v?udH9JI**$ zc(Pc15rMU246^)v^ph3*H!(IU^br}oexX+#@-6Sz`>4QB9-_#(pa4;tz8|=W%5fbz zgVCtXN3=SgJ~zFi=-CoOzG=Vk6=s}8B|O?uN*Tr!CQv1!Ms7thnr5yP0XYhyj=oLT zec$f3P!?cL4b=^+xy&R-01}KO-XH)YB z!tsTg=S^6kZT_wSt&hzhy;XfyIXK%9Ts#|n(N<(Tw6|Yw{h+9U79ZWSTSnjr&OkbL zO(y`4h2G41&9tSaY{Xh%4Ju2fO|r$cOwUqSq^HPC99}H3o{&Us@3|xn_j*t#A_a2O zIq^8N$BgZR>boG1w2kG*L1v#RqI**k#=rkeEriZo(NZ&p3!T$gu&;tpN@e6YPdf@Y z7L7FL(!4ajgu#16S`-C(ZW4;sI96DvMj7j?3z>Dl=!PvI>eNunai< zmdE(PjRg=F(-dFhmQv%P??w}-K-v4AE(V_YquJiXG8@`FeL_B{2CilTp-Fz~7sow~ zjtj1&Hcb;Z{SiZf#TAAAQ=u3b_1UyRLxROWI71t{T1|T-v(zV7LmL9AQ^zxhHLJV3 zbo8>et;tHXGMy7?vaZz}sxk>xO<Hs%Dtqa% zlfBEdwf$RSX6QkyIi6xpFW)jVsTVMqIP<%MLCuI`sjM=!)yUzbO&Z=nfB06p*&c_` zPM1UI7g#L`C|5~Adxu@+8_%Ll84Iha^A}HpN@haT$rnr}Y7VFuHQZmX1jxP+?kXU- z(@z=v{`AEtNGy}!5C1PV$Y zT@(f7+TX_d46t3O!#TN1O}Ws%?WH_>SN=x#r| zNnVaJwEYZynEj~Y{K$sYPnWOvv8BSGxSWRNlWF@aB~Bk2&>Hie#<|aL-_$j_dU)O8 z%}cMOWIu$SLrB*By`b!oXiD859{5+d$ddfgib`&qhH@y_?kGSf+S>`Y_CWHe1UZUg z)r2+Xuh1rHa%Gvoz*O6#bYTI4;I9%!I8tG^hE&a$|M28?4>hVEwY_-_>@g_qXbwjh=S0HxU@9ZYEqEK>pXMca$rkY~d7jE9lX2 z_OQW{K~Q?QyEeD6v_b6%H5^Uhr`le+yXRA9i=~w5kV6;H@WJ|znMFa&|t&K%wN-Fjb@T7Mkif}lGXs-(N&3<4{+DM!Ds z*OvL}&;1~8ntYsTZB=KME1>jJLQr$wA?ex&c33cVx7{6hJ0P(Z`H_+PG|Bg@sB>^2 zfppz+OwM{08gLns_RVtZ*obM$c2bIuRBx+Q)!AxvuSRM(k}A%lH;gHNl3#ynEA<^ zT@lv9K($Jb=s+Qdr;d65+O?&j2bd>$9f5 z%Ctsokh48XC*vDsu0AW#g|<#V6)8kGJSFU0V}a)u0P&qnHr0@dv@3#j|9DbcA#@ZI zxR*o~0{MI0iOn#=D-!5nt)Gq0LM<9C2W(1q+uWdstxm^pJA z&=`a8+aKfkL*gGV{n`TU?}F77D{`}~F^UbfG7ZnyFwv6a5+*R*Z)wR#xcdi*-`n;t znEe(~hPalm$0?uuDQiL_RxssFokPG#(IVi9Mp*Kwn@}YiMI#g_LY&qjtqHxv9E9)v zrvLmgCqp>uk`ZFCzT#%;uMleTW-5*6g)K>c5T^4HfmjwLW5y_f-&C(9XyoSd@@7nrlM2;uI!pO^&@|$c$4D=QJYh#?j6{cNZNcfwJw!kkQ1-BZcUi<7 zDrJRgE<%&P09!FE%ElbxA~n3fB#S!&t^x$_AKSJtfjMowGeE9-Olf>eUO$5V2k{DZ zNFQw-hX&Bw22tWmJ-2b7%T4^y;VrJ9P@`y*C3EVW{5I$m}%~zf$26B&z0gm;m zFOPts<&gp;Qp_n>6_kD91+Ds1x_QN~Mk$?qy-nIyEkeuc=Rm{4scqwmi-2Oe|JJ%5 zltH8lQK3q~tjgboeFY9ih2ggcZbi}^+$|k^zuQM54@P)VpYiksb;{$Bz{bs)+ouhW z8U&$x$X@TNI!=_MHEh0lQx|A9$HFjzJgR*n;O7lW2ngx10Kmm*t<~>L7$ARlVGr9_ zcj9c8pbDR6>oZb^>)EJ>{Ro&(k)I_fvDiEL%D#NHzYxl31nqA{Rq;n`3gX^D2dxHr z<+052l2CV^D9U_L9)E)DrEOS*$p2p6m9uprUW2HxLA2o zv-Blcwx4b8$bg{IM8hbD-oLN@T@ok*FqI`tn455Eh3El$?nw8 z0*NDD)b;h$P*`7O0q|O*liyGY+y!(clkk;Kv|IodJH(O`0oT9hYOLx}l$O}8*+SiP zNr)6k;t#cB{9s&t0^XnQC0~xXNGDq+*ZwE0+VqxuJ5gNuf_VdzTSm;n_ynX5kW43| z;t5O$;Rh4nz@ct*$1V{FQ1Pc&F*(Xo&j(QVME37ogQPFuFEPoDzO))TCk%G)g3x2O z;r#kt7r!g92NTNq5+U_clND+fFtJ=jXk>~P8g3&C;J6x=3e{gi*gqPDn>z`Ubh|$c zFd_4-C1i9t_}JxzGOPNXmjO7KwUgL$_+e7?-Uizf1iuZ<)t)cGNxo7C*`x7_lz#sMD_ug=GcI(oi+_JcgB+ z*M4{1gk<tIlNE{09KSKElV88_GrF8R*bdAv-f-&vLVogyqWOS`l zhlfy&PBp`d3PwsipXDIrA15l5nO%reb(e}W_KzbAQbyuO6eDQ={@9SEy%ZB$&(ttE z=6Y9Sfc+x|PS;1|v*-!}?&VQr!x%COub9478_P)wSiP^Lq5b(<;y~0`Q;DX+8q;vg z&v4|TVs+(1r)SE@8P&|?QIoxqUJa@SH%2ax9vF*H)Qw0&wWWNvDGUfSEC|=_ngX1c zVsxd{FH$j{G|~Zc3;k#J%UTRR_%RWClMDp=oN-^P5`ZM|WCfs#<+=IoteT90Q$A+W%a|La9q*ukmMj`LX=SQYkNv zQl!h(p7t9t9xqzrl${iwUQkh6+8nbpGJL*`%ddeQRgY$TP#&1lYQmJBei+kxUDdoH z^yC@i6RR=K;YVM`V~VI~ zGC=xuPIhh4@5z}n)J(1IMj0=Z0+fg2wVp+3WhR(X=(}3cyJR%uQSqkYCegjm_g@Zr zQPvR~*P!zEii*>$a(BtYo$)Ef#+uQ49q;eaFnS+pVmYDkEo`5Q+Sjlg{dOIsq^cLU zvd+ba;9M@m#bB;OhjR?DBo=euMqk0bjq3=l}DX* zJX(4WA}D&lH97iP|DTnwmR0%dPNxG@%<&o905!}A5d)EuBi~%~#HCSbL(KJXx!-!x zVf2*YhLksqL?b<3dNPW5hldxsDTagtcW9ef9q*>F%nGN?850^uh5KUa{f_|u9Saz! z7a*^@P6pPYjy<5fUvTaY+WO|qr2D_=1In)_XL>LT?ff`~SoVSc&QdIEPo4$2e9G$+$ zN6aord|MR4H^#}K~Xv#482=D&~@N8R}IWD2(ub=AsHecOFVuisShNziU zR?j}`0M!GI5(a^`bV+y*h+dOaG8fW)pUbL5R@JM7uCS(g>|(!UAj~Y=dTEI+&4^nEMAqn{Y%0~K`BaAHMndBIH64>@h%Q5Hd zvE!MMR_UFy`P9w&hX;YMWn#X`ZCHqIn>OvIyGq#fdu3$;E9`~>e={apd71IfeEm`l zgWrz|!PH=F#bzrX%Y^}8JGbo~5J?vF09#a8AF4P~4nsio|H>UX`cz1!KrNb^(@#SJ zdU{5yMXu}aprm~z?T|o4dQM6fsxc%aVp6PsQje%j{c_jFyMw8L=FMeKqYdRf}3M4T< zp4+J#GkYnOB+w;p21X40b{=~7{eigo=!#T<$2JYw-0Jy3*j=gpG2BHO>azw#W-w+MbJ2FM{N zD?ojC-@}x2VqlvcVuX)4`>}bt@o4B`GdBBU(_0P)XIG1+b}(?8!HLBWO?6bw0R<50 z$|Z1Cr}mx;q60m^w~3pL>J`eRgMfWV#XAG9*ae0{Hmzqbl>Lkj6KUlxT<$iNCy{IP zqkl%)vFLu`=a(ZuRU-J>#QiYi}LG7kyOKNbh?2;m1sY%?*w81q9(x zHf;aV;HNX%=;zfe`_o78H;8+f|J~Kw{YFPQ)6_R+E6rvrWk-^}FKEBQ#$qyL;jD9U#N}qR}TavTs2N4?77}zw=Ka0;3i6;zz91Cc>1mv|I|S{R@3& z0IZZ&_K?PV+m{L)b51}_1ieq`nB<@t2`CD)^-{PGMVcodiXxzh63qBpH3?opr zu~sf!?KH{V+Eu~BLP@(=T-&J9r}Qj(kbb z%DwTxz##EKzm)yAJ&MU{Wwvp{ILsDET4sBjH7?KV28a8faSTs0o!_^uQ_ikzdqG z?ZKSM;l1Gp^h=_wL_mQ?geMI49gNaGzb`4;&f&gMYQkKR(mTDA93A;8cF zp30A*Ebxq>;LBJo`vv^r`Ry<4pUFa3X+g=t z9aF2?1;*MMBt~91WFOr7(Wjwu{sZ-Me^1p|!!D%R+cnRjS#3)4=E5tdhh+CgoYuY3 zcG`PG?cVRrPXvK z;EfB7ZEM}7yIEfe%IB!-k~C3^4X!?{m{^xCe&p9P(bbJBQ0+av~QbDlfL$JX8Lkq=Qcg3 zj{$o9pPv7lqY^CdRjUU3`Ndobu(XamYky)xxPN;EK|a`QIFPk%5*1dUkL^_u_UCqr`v_KU%bHlZcdZW-w`Mw*(}nq{smi@7 zkC_8c{9dVfS6W~!F8?d2h-}B3`37z@-y{9XcsI)Su?gKPH+nnB1vS0_CtU~1U;P(V zUpaa{%6Hj=%QZ;Z*~!j9DPyP38OG~8O;M-U4-!ii%s}Khk z`z=qARnijBcBbZaTJ^ce8}_BZpg*^EHd}p`<|c0mp}h3t)ejrE9`>}LYSQY7l$lV? zrLmKYW#&QSg$GK{1W5Z?&*uesmm02q)=3$Z2hz^>s0rx0Hs58fBguUV)Fm|H(^j+O z*-MyDjb)cr`525NEHg;OoXfec`Ay$5j=ivMt>pDJ^2Y{O2`Op3ivZYcVh5_Ycw+PRnb&O;lW<@ zSi62;E+ijYEg;8o0gA?-TeLbmqN(`2DQL1Gk?9iF=+px1UL9UAjlv zeO^~)UQ3}wV}`m~5#~yxQMuYtm@jk>stWV$%|EVB&&GI_QZunmVLac9O*nmmMlu*Y z1_TQ*k7fFtD+^(%tkWKf6R5sX@%xXO(qci&4X$LPG841hS>WvQGa9jJ zyAYKzlZj!7fTR0xPh7J-@~|9XeeNvQjYZta?>@Ty=5q@`55iGH>_LC@A)5UPE63Cp zoi^A0S-NKm0Ir@s>4Up!+lG@;lrXY~u`HW82Lg?YJyao^UBNjL&F;TxywIeg8;!Ha zUE|mS6Dv;HIF1K`aMN2C;a?rNQZ-4h^rr)d1M>GZVf_I(&K@wdgs=QoXSOx>vrchV zavbJ)E8NUmP3zaPf!rg}n86;GB!8I&rS^dyL&Y{E=tVG5?kSqReV{3aCQyhN1x*cA zW16c*^NT7EpAEECduwMc#_d>$U~54~2CYkqQ79+EZVka96fjP0GT^vOoGk%?YoLu7 zWk++sTCR~nJ_ZJkigI$9Re?$9f){7m`d8MYJnm7?9Wc0_-ieeDby@eo7#2K$bfD~m zXgKwC}EnpH>P$`B*+IBA43J6AD>DY}@anX)hXMwCOBAYfKhQN&D z`moWi|JtbqxXyeo?e}3EFP5EW)_8<2gBgy(!^IvZ3#XXvkgMRm>ROC1!8!PKUw5b`L!_!usi#-r<-)3EeX4im%qb&gu@ zjivM7vRuFw_JEN6Gdk}WAEh;lxi*qzsqDJ#v2@C;sa{Oc8?dv0uSpuO(vvE|0*Gs= zI4p!sqw}+j3*IqxH?}IC710TNsl*ZA^)kLk?^_m)7l6#1we%)Gc}?#ApNgV$F1V~$z@_K4PNMv65>;X=8lRd0f3}yMjS!?)medK2ll!oB zJ!r#G%&9m=xuHI$ov&6ep;e2gH*rnrfP1v(b79Lip8dO2fVF_FtHB(k}WoQO&xB zvk!rH7frU6dHgy~ZPpEVAYu4RgDl44G*Q-^aKf;r+y*+lcZCy)!}_a$aeQpzNS15` za*wDgz6O<)n(GB*x`bl~4N#YbdipCE-Xg}H$^FxTk+Y?(Bq3RyNSW2jjke;`&ffJF z=3T%h>hqKFBSGl?%WV>Nwea41oI8@H<(-)LFyYT7kS(;0R<>Ei^jQ5!EC$o*{jdv z`ZlM?Hh=r2-k4B&vZAbB;dX^oYuY@ULs&Q7dpp0@E|HaE_H^sU$71hSZNCtBI4iNI z-K6AY<3Ql?lU{=B2{%Z6r9-RM2{(+(dkbX+D&Yy1>#_ui;T4=_0odL=u23N%)szyu zjoDp2?nRQYhbaX`m)o1}wV2M9p3}86{?_}{IQia72i*-;m#$;=vk!6|+op!-_imVlnsQ9! zje576zb%apZ%hhoIGrQlv^387>`I(=(rGS>{@6Gms*TNWKG?1=dN}^h$$P)kq(%GI z$=1-`kEKT5JCF9}{kO+bL^ttBH< zr<1oCzf!rE(`xokknX5?7WwLO_Qj0zdYaX`Xa@_Pi=OhA-IG!+)?>^_-`0igS0qnL zjC|g{A^FPD?eZ!2o7M)$j7eJf5!GFLG?{6dyEN3M(E}=Dp;yjkXr;~UhB{0{tgw;k zYTX9C$ls-3EHo((+mp7HuDvKlgX9K{7jIZ^|GFER9&T8tpB3R2Vfxy@iu{tZ@-l6I zMZcA%x0;#P z-b3z!Kk8+S1&e#4?Prl-c#FFIC5=bc=`I(JPF3qkzvn_Xvs^B6h8|Ybz9K&~u=D8F zkfINihJy*>~ zW`N+;x~a^biJ_(eC!k$Mi=%(W*k5KP{IXlerHLh_m+j5(@+UK)3o#pAZ9E(vung^_ z>hjTWWwVQ6xVg5EBjs@DuzqBLy;*LpqeZnY>PYR{*sO#Lu3aTJ%e2HW@Z19`myk8T zlJ{`>eArCjamGq_U0~SZly`QL5>hd*lI~%*MZF(uBW72eh>ZovLzykj#Cj(~X)DUc z>V}g6HG^St9ygyp)#*JH>Uh)a>G74fdANNi4s4S&z@=6w8&k&~U8CZIMAe2NAPyYX zlHYSSY}?hXYv?EwE-v%gg44Oj`UA-K=H_^SFBQhmC2o%>9@jjdkHb`I#Qbtc-Q4OB zVDTznDAn_p*Hl?W%iK8fhQmVkiqIyTOH)${zdXhnMv8Jm(ByysPAt9W=9tGF`n1gwBOC z^o#LBzS&$ymOgraQ!c^=xW0mk(ayov|A>mnBb zJ05XhlmtIEd!_qskU2G#RVUzJ=*5_xTr01kQ~}473a8Sg@Qc_({#FrOt%F|qAcQ)W ziU}3vI$eI=uSVF>nSG4uZSxJ0q2E4drnVaNB%g=+#Xm(!e5bhP`l}76Gh4_R=j2CY z4-2G9rGOv%xULJice3r*ZO7o-`Gc1E_pO2bw)V-Lx!S}x{SRvATyxh33aYMI34#_$Rq_^9j51M~4@_#Q^6@qZ8us#F0t6kvL*iyw- zR4Nr_rKYUzqb9%uPwcP0)Xxt0<=A;+Bw)BUSuLBD=^Cb-7{Web0~21%3w9k!k!PfP zqdBuV>7DFb_j13a&EAqN+1u1F8*=9e9UE$ieFtIJ2AluXH^G-iur8^lhf*j#ID=y(o^ncY0VeLZE$(Uz z{MrV*DTSB$)&4pFL0ehej&P}SSp(1S;#i0xr*0dQ+WwECbB|~8fB*QsqnX);Vb10_ z=kxir&G|fXrkX>}G@^9;Zp<-6R61!+IV8=YLZ>N|N;P+wcGT{^R|4 z-1q%{-`DlJo=-E4!ZXN%++8W{j6WS3%e-3G3jLIA)0LT);Ku7?YXSQqWa5eYTKw3j zQ%8x!U*?rHj6<##vX+s`2OW=SNS_x5^GTkfIxDi=X!g5br^--kQZg0DZ@E3!EQrl< z+a80y55Aa|c`23UF0I}+#*PcgaHoqiG?WWG+g8 zNCd{xHwFFXE-KQoO`Zx<1OuR=0%2LKA3ic8l5r4T)`4~4#Tbn^?^3%sRMy#yv?(i} z*d9qcPkb2yTX^y#MlD1a=W83hIUphwI`b1J@)5sAVu|E}o*^p-J6-j2@P?(JW2S7T zzh&4lt?L&Pd$k&snw=7a;GDA|_V68L-#|D}2NKe2-jEk6*gE8at4IAPu}_j;krP{H zRXnC_ZLo{-#EdqI9k(kZ834FTjf%h7+KyEza|0J@_{|UjxDm|HO~;P9;vW^_Z$vQo z8y`ioWq_ETwsaZxg8jn0iHJUbt`?(n;edGy6UX}it>?w_^gQ5z+yn?oZa)orYE)Te zv!yFHMwz8D$L$X=sAqki^@6iqH;JxO>S0CQ)aYG{2aYfRVKS2lAs8ib9S*eeZay&& zN^CAQevrXcf!Fsdlu1bZ5=Z=^eL7>|ROp6w`L`8KvUGY=_X62txKSz)H*Zc^7S=b2 zJ%`7$cr`C%sC@f58P2eWy8@jQ`(Hu#Rfp}3&Zxs8eny3$aEqmKP?(;npQ7S)=NSu~ z?vJ#_bK$3~K3=TY{Oqw+Pmyd9F;k&h2+{c3CGzyO(p${lhstDXteZfaiHU(bmEQcudL)QcEAY8s*ieNm#N zY>u)#2w}GML|8mVU}|Qu#7zMPb;b43WVZ{X)^HTm?}+$H)^u*Up%RB82?Z`s7&%pe zrNej(buX%L0G_-D#e-PLkV-ltg+C0cR&oN0kS5}Q1jGcUf|A^I^m4u?PeUdCo z2H?Yo2JTx2RVq8~W78g#T3dyqWhMbV@g8{7>hiLd<*WXrk0ipK9zYqf-G}I}+0yNz) z6Y+Hn@?d@tR&Oe7aJM{N*qa;gr{n>A_A<=$oA&ZhZWkN#6z}T#@&u<=5mn}E79KQ( z3v86Ki%ebp81m%$FZGi{346ugzqr@;+(d3@DOf4&=`H))J(DL>Ka`%Pe6Gf}#hoZj zB4youy|LLn_-nl0{7dk8%RA+}bz^%U+35dxn{s~a*-g(?YtthA!yI&Pd}mj<*OgPl zv8xe|nCz&4`mxQLkAYguM>;sUOQsgeHN+L4Z8FNsQ~7^^`Yx^_m*6u~x=#{$NhddX zl{>d;c9qk4(@Dc*vpL<)8B5!&lchFqj=tGRICtJI zNB?X^>(VrE-rB+Zi}Qk~RRe-Vn`kj&UP$r_)BjLgVrzIp2d40`As)8t{`G=hZ-i_k z4l*Og{jqrA-ENO`r&*F=Q1t2E2goWD<%gI5b;ui?Sk&kU^FDY~A=JzGUC=;FPog)P zR4MOXJgoQY;@;0H;hUymPhOa*HT<=XvAngR9+46ssZf0O_10`VG?v-`y*a1;{{SA1 z?{3wo1gl_VN?ud-s;geV`|_Q)+zq62E6vDg`p)R0i zt>59+N^d5+9yK}l#js~IE`%nWr{-3FyUb@ml#Upovc@c4=G(W? z01Js(GlS+Szu}28#DTT$9qgrag@oU59L1@Dj=m5QsajdT@xJtb_ut?4`Dik!E3!5B zOnkRQyLuX4qTMTyO9$5$P+)quIDeD(ENy;1vmCu5D()*GN-M4GY>XgW>>EQF*5q=Q z%>xGSZVg{ly%k-$RcLyu-{rVrK)I=;`xzxm6g58=nuW|Lqujkzi@8DPUOp*}lsKjKv}YtA*+yWzf)d<$aPSDY-fp*U_3sE5OQnh_tH4lO-T8#(Pb$PKY zko}H=19hJC)$uVOMFj!)QXVj5+ z3@>->Q%;ze>ab}?3?2|8^$8Ndt2h?0{@qoz&^A(jPxiRog?2X`F zD^rrbEW^m~GAJ=Bo*tRil~ZXrIA;eS0Fo-6p+pb%r0xPR*82xc$L+!b05?L3Av@R( z;B^OOzvh@LKP$*!{=sES$g_;-6Z6VN0%VGc6D!#Ejel3RLq@++l-FP((yw*ObdLzv1%0#=4_%JVRC{r!u)jjrRDJ-GJ@8|3qWWbn0BiPu>xLtNgK~7*pT+MZ)aRygAdc}6 z$K@QOrhW(Ieyt2I5wCajE2Iq>0BZ}_@f=@o^#!!YB(UE*i{;vKD5Am)tm)vJwLIz- zE^7ud96$J~nB^i*l7o&vpI`JtIJte@g%GVsZdnH$TiFqFW$cYy7g9+iEa-T=n8Q+a zWEP9$7L{i>i1a#tT3F-YW^5u6X1Vna*+rsXtOT+S?4O`O=p+XmQc5jP)oi>9fMK(i zbOnM|D=!1*_EV+fPXo!1Co?_WtERje zRUjt>QoNF_TW+aqD;4n7aMm&CLmglGYIlDwRPEQpCA)PV(2z~?Va zWW)K6VS|u4Tdw_J4t*Ky;5Fh&vdX-vG7r{K9Z>}Jpw@I32@YsV0!so!#Wz_dQ9O0q*GNSfr8=&@ijGoV~A`h9ez z&$wx?0;7yQLSdng?~G7&`6;aIg{;O*JYXMBF>m*b0rtGz{9kmLGSq-7lhNoFhnu6M4w8+XAOFwrp*8{ekR6!1BML|nu8AG%dU%) zK*h2QoshZZQ><2j2B?_d02(cQ3WEnQ1wIF$7!Z1edMfJs)o4(BnRuj_^xnG}?%Pt;QiD891nmqgVbBVNw*4Rd1v&loPgdp00rohd-b2j-mPzu2T3|N&cRP zqWe!RT;55&@RL4Wr~ruRmS67~O)r&7@j9P0e>PuX7l3HW15HmUPHUwfQ-62hJ&G^( zdLthOUX(q$<}t$+bwafcuSlCfMFJ?+mRDsP%0UG)wkL_VUKZrAT>aWoc$h25}G#?uk?p)}7cXgVwZa9X~~7X_zsjk{wTQhff9$c**6QP|Q0i?a6uF z?=F}8hW+{aD-QG7g_D9;KV~rF5dO%`gn&SMgAMg#H;*EYL9)oV>WbuKQ|ylQ^qbpzLdta$ysZ6EP<=M+_OG%&E!=z4NraMekZ z4;z7nW-{k{et5Q@cd)>tg-r5>3@S^8yCi>kxS@k@@bJ%vbfF@&`h&27Fgcm~zf4bzzO0PQXdeCPTj&~N^n$A=ZEEmqO<}{! zHY2L0Q&3b$!4I)bhagnf&mfY>R86ct_`=-6M`uMAKUejX|BKJR*YgW$xT3^s!|338XlKZbaAZk-4 zC+zq&XkLTA3E8=xrI&n5{3C#iOV}tN=2B`b57~5bAMsn1NX7 zj+5DPIp4E{F;aTELl0yaGAE?^yLVkqmgQtp`z_-k3QlC>`%k^OF30_bGFP*8_C(7dW_xNdn%q{W#dd!-KN`;5>Gbe)k(9k5(Gu(*|@g$2#gNA8cjHGjD8QgH9Gf0hrPYdnFCn|GR8 z>b9<0I!qM$pbxdF8W0zIL24@jaSk|Q!7)~^+^Md6ym%`$Jq@a7bEYheIHYWB4hYew zxT8d6;(!t2n~z9DK%cs43om;{IqN)y=BhAHu#;i9CNePH-zgz=>uZ0GmmX?6V{`DK z6~0OA=5U?G(KU*^lNNP%+Ylg$k|rrUM>~4KnwkK)0ASa|L^BxLegaVoBkZWB=(Q<7 z>>=ucb&vGBO9oDQbhZKA5yAo}ZiRMVf42z34)a}|^ap3}vtJ87ehN%VJgb0o#`Vg< z{U<1cr25^_;VYv2=-^f!Lcj&b&~)?f{1+YAs+ zDVAay41T8O+cQ9~K%sRncL?9CKV(7#5unSzoexn-)7;y)>~Dc=bF~qS^$bv^+bAod zFvZwON}hDDm7#qbT)x?7zd=ea!wn=o;H$ojQ+BlJDhC26fyK~N))n|0$XqMgp$jaZ zoLjIZWZ$zpygehNAwRV~*N+P^N^qT`ERl=;et-R0>nF-SV01+!;l9C~5)e6Kk$;gZ&s@qTr#R(K z)%fG_WavtzSMiAc8PBsLR(-3I5N{?=21a%fU|*S zvI+I_+v1tY*J_Sa%?9JI$A+Xo&-iH$@dijv`@gX6ylAO<)AUT=`Ss`KpHbuPb0Igo z0yRGYTyQ52L#zw86ih((>?XF1KZ4&u{T8}&ColIs)x?Y5C=ictq@Isf)tYB(x|?em^h@sV_*O@o7?b9%k z3D6~#OM29kn??-u|7M#^3_w9N0%0hWE@}soU+&84(W+<@ApwDnh$0K z=^i0kHi#ElG;|Yy=*2U4h*78lo|CR+!u~C52KuBLODPKr97z|yBRmVWvZH|jLvA+w zsAjxyxB_*;xk8z@r0)t@h@!JC!<$5qX6{huJfnx*G7P0g!)YItIA9+OZ3X8HqX_)c zQ_BNN3x8jktMZ)isPigm|PQv9=#TGawA76gIh`a zFR;Rxm#8ememox%X;HLPtKr)3{36z^Jc}h_Yg)fM5Ii3Vv`quH>wIS{FmUEn)&RgW zA+0Lbh`Zyt^0N3G`Ge=}ix?#JlBz0AavURzx`6XDzdSx+FnOJA_xG|HChat~`=$)$|fL`R}w+(1t6~&2R9o z+ehmDj88Tac`8M$Mcgm;D1p^?Y3Tk?HO{IKRKMWVtQD&h9iI!{8>#vMXcEP>L-9Vm zGig{A&7)UBe7I4iMP1KivCR^b=ZWK&mLcN3YeJ8R6vSRE7{cdYQe1O9qg&>vbTnQm z*7y(@5~HFMTt8~*!Jnz|wR(830f%Fd)0|JrH*62iBwhOHTWzh39 zcnr6u_%osrw*;U*tHa4!L z{X~bx`}mi}D0A73xv8zpm?gL#m?P_en=s=TMyqsUan4YLDlTopW-koKBx4pT zy4l3LzaxuXS5?p6=+bl^C>QFmvVMcf(-${=vd>u%Qb z(a4h;wV*5;iZ)HT?=5ybs)}FQpPQm*Y6TN2O%N2KxG!-FFd>0ofEa;KC^!Ezdh#dk z*?gtSfsk?gjhc^++WLyRO#^o67X9QuBfelaLvQ4Td+@GomA`Hs2%C2JNtU+~^9ob$ zqDMx^9uOkDp|D~-a*nJ>l7Kf+oK=j$8C{FM8^kMSrpndP+az1udLA6R;8H-#*;U!H zbatBm*K+@7z1$I_a=7A&M>4P`+qxQIX>_fuXuOv-dIUJ&ka1mx&NOWfz3+Ty@d{I( zsw05bd3y_)RGz8c@Gca=&U}z3&Yd;55IiaUROLm@&=(-1<_qXN4|1B#LhG_G1ocy2 zjcvU#75E(xiGZ!p*Q|-BMhrdA%A=g)4@Dy8t^}L^k^xl;IqWF|ANrEp(KZ9OO+tWS zRfmC+bMYz1f1`XtNFoyfEzLeGw$01R_2WdTb%#S4gZrunucW`(~dqdn-HAW5MT`RdYEgaq57cIIfR!B zQ?K)v{g|qS6bycHcIl2GmJe2aMjT?;%2y<^$otR$dN#)U zy|8b+?JzHD&QQvNdi(?jb?pNrQw0}ZfAy5QZ?zgMuKW|b&UY7HE^%}E>b4sG6DyC4 zIgbA#{quWV;sB&wjoP*5w6z$zT1);|?+?!v(SzZl#Vj5=e~8K_PY=ou${in+XegH{rx0$n6aFME^$v>ua_f7W4T;s9IDashmIGmNrIkV7Q4HBI zbSQ2*bPHk|7OT`BxrB_d;;0!A0SGR)xp&bvURC3NjVj`c=HYbRSgFmZr6P^@joICk0xUqp|FCq82Yc3KY~V zeI2x|u61gA3T!+9u6P(f5pZ&I$7>A;X#|$~7*UE#{^+|1t;(KIWrwkySmL;7Q#yLOHT(e15+m?4mVy${& z6ukiA(2d%SSCIt17eI58qTFp)`;>}74nAbfAYvg=rO+DWdLN>&L-^#h!XE)yIW0+} z*zzAE70sgp3;}>1S%UYo^eeSI(@7G|&@zV5aV+=5DZw>T@veF4wc`5Gk{yI&gK(?V zy3B*Q8D4NeFL{E_S)+tLX1@(OGF2w~T&!Y{4yk(fHUXpbLT+OMYfGwEOl%E z{l8EsunCA#xlpMn5FmU5p4ID?~71^2)f4AxT6HsDm$89VxL!!y*V0^j2IytrE({3YcbH@AYK? z&j^406_&Ypv-~ky9=J@U|F(h7X4Lei^O|0j{mWp~9qd4VZ}b;qMC9q{Mwzav5ZVs!i!e?)Q>O{~kz0E}x;XwDVE=2nC zbf%|~K5xJ=;Y@ISj;U9SZ_|6+nW(JJugO}swMPGb{gScmBz(yl*S4zu1$XdBSSs*Df5l z?iW$9c*zFSq$>PhcFbW@CfXxYy&GkI7N*?rB5~hOg#r47S6J!q(IJ2s0fY^fPfPQw zI;H+g%an4)8V11%*)L>&{K41XEZ02MedgcR8IV<3-&n~vkC3MJeg8$Ka=u3mzmVRe z=?qmBBeo=w#RfJ5yAd75R$QdDekSa_lFFyRcW_M?eoT zZw||QvvF7xXa~I-mq!hR@GSI6G%4FacvfWS#X22rRme6|v9b^72YDXKmRB3;Jv$9} zSlRtb%zXR%T+bh%x=$&OSK&^!=&dz6 zR%g~*XR=*qC0lQ2UGEsCZw`hSazXx=R5sZr$WIrJ=0Rk&^#I7q)5DeRbSv2erA>0( z4$}T}*~@zEBeNA({(33-ENVfcvBo|R4~u~pHI9UUY7S}o7nWSd|{ z=+mjXIYnY#%6kgDt+D+@68-W)X8DV(&qaqK3_9jB?gv9t!gnK^|>@q`22*SnH1>8tvA#hp+=O!o4q$MmW0OPUe4p-E+PwYe=M&wc4 zx#b;3voRp{a6#aX6n`6K{1|C9PwvV767|05pb8Jz)v6uPi4vX7#+d?#;Nt+$g}Cma z=>{K<&4LaWYaH`9K?Hv@Welw52y<(dylj(^L!F9TS<}QQ{E~jGri`U?LS<-OA{Y@8 zeIhwlGwQ8Y{W;GMzubvO>*v7n$;B;ZU>Yeb`@RV6m5u-7WlK{`z0ww8tp1wrLPCV zN+43raZnNqt(?4ORPS+*iQ*0qo<6p_<1zg!BVEEg&an8>R-arDAihl~O;dq56``BF zC2@`DHIS6oaM9Y~3&*1~n^yXGLCWHbĵxT}f<`tmCb#T5`LAX_DjhAko@3Z$&t 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

tAsEhi!lt_gag)FL@0a8Bj=rtq775 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≧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

V(ua#LDomiop1( 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�MKf`bq0E6~ZR9(wn>{>KXXSN8O~*k%dS&Bb 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

    |B~br0D=$sT~e^cWw?|EAKtf&5W;6= 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ɕ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 z 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%0D)nKxI<67@|(3soCNOo=E8 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%0D5fhmeFPMp6dXB4`zX8@&>)qMGR&ZhW~lXiw^i4 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

    $J7G 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

    _4g&@Vt1e8u9L5wxqz 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%0ASLJH*VUBRV_e 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 E0A$d1(EtDd literal 0 HcmV?d00001 diff --git a/vendor/github.com/rivo/tview/util.go b/vendor/github.com/rivo/tview/util.go new file mode 100644 index 00000000..0f8c0752 --- /dev/null +++ b/vendor/github.com/rivo/tview/util.go @@ -0,0 +1,645 @@ +package tview + +import ( + "fmt" + "math" + "regexp" + "strconv" + "strings" + "unicode" + + "github.com/gdamore/tcell" + runewidth "github.com/mattn/go-runewidth" +) + +// Text alignment within a box. +const ( + AlignLeft = iota + AlignCenter + AlignRight +) + +// Semigraphical runes. +const ( + GraphicsHoriBar = '\u2500' + GraphicsVertBar = '\u2502' + GraphicsTopLeftCorner = '\u250c' + GraphicsTopRightCorner = '\u2510' + GraphicsBottomLeftCorner = '\u2514' + GraphicsBottomRightCorner = '\u2518' + GraphicsLeftT = '\u251c' + GraphicsRightT = '\u2524' + GraphicsTopT = '\u252c' + GraphicsBottomT = '\u2534' + GraphicsCross = '\u253c' + GraphicsDbVertBar = '\u2550' + GraphicsDbHorBar = '\u2551' + GraphicsDbTopLeftCorner = '\u2554' + GraphicsDbTopRightCorner = '\u2557' + GraphicsDbBottomRightCorner = '\u255d' + GraphicsDbBottomLeftCorner = '\u255a' + GraphicsEllipsis = '\u2026' +) + +// joints maps combinations of two graphical runes to the rune that results +// when joining the two in the same screen cell. The keys of this map are +// two-rune strings where the value of the first rune is lower than the value +// of the second rune. Identical runes are not contained. +var joints = map[string]rune{ + "\u2500\u2502": GraphicsCross, + "\u2500\u250c": GraphicsTopT, + "\u2500\u2510": GraphicsTopT, + "\u2500\u2514": GraphicsBottomT, + "\u2500\u2518": GraphicsBottomT, + "\u2500\u251c": GraphicsCross, + "\u2500\u2524": GraphicsCross, + "\u2500\u252c": GraphicsTopT, + "\u2500\u2534": GraphicsBottomT, + "\u2500\u253c": GraphicsCross, + "\u2502\u250c": GraphicsLeftT, + "\u2502\u2510": GraphicsRightT, + "\u2502\u2514": GraphicsLeftT, + "\u2502\u2518": GraphicsRightT, + "\u2502\u251c": GraphicsLeftT, + "\u2502\u2524": GraphicsRightT, + "\u2502\u252c": GraphicsCross, + "\u2502\u2534": GraphicsCross, + "\u2502\u253c": GraphicsCross, + "\u250c\u2510": GraphicsTopT, + "\u250c\u2514": GraphicsLeftT, + "\u250c\u2518": GraphicsCross, + "\u250c\u251c": GraphicsLeftT, + "\u250c\u2524": GraphicsCross, + "\u250c\u252c": GraphicsTopT, + "\u250c\u2534": GraphicsCross, + "\u250c\u253c": GraphicsCross, + "\u2510\u2514": GraphicsCross, + "\u2510\u2518": GraphicsRightT, + "\u2510\u251c": GraphicsCross, + "\u2510\u2524": GraphicsRightT, + "\u2510\u252c": GraphicsTopT, + "\u2510\u2534": GraphicsCross, + "\u2510\u253c": GraphicsCross, + "\u2514\u2518": GraphicsBottomT, + "\u2514\u251c": GraphicsLeftT, + "\u2514\u2524": GraphicsCross, + "\u2514\u252c": GraphicsCross, + "\u2514\u2534": GraphicsBottomT, + "\u2514\u253c": GraphicsCross, + "\u2518\u251c": GraphicsCross, + "\u2518\u2524": GraphicsRightT, + "\u2518\u252c": GraphicsCross, + "\u2518\u2534": GraphicsBottomT, + "\u2518\u253c": GraphicsCross, + "\u251c\u2524": GraphicsCross, + "\u251c\u252c": GraphicsCross, + "\u251c\u2534": GraphicsCross, + "\u251c\u253c": GraphicsCross, + "\u2524\u252c": GraphicsCross, + "\u2524\u2534": GraphicsCross, + "\u2524\u253c": GraphicsCross, + "\u252c\u2534": GraphicsCross, + "\u252c\u253c": GraphicsCross, + "\u2534\u253c": GraphicsCross, +} + +// Common regular expressions. +var ( + colorPattern = regexp.MustCompile(`\[([a-zA-Z]+|#[0-9a-zA-Z]{6}|\-)?(:([a-zA-Z]+|#[0-9a-zA-Z]{6}|\-)?(:([lbdru]+|\-)?)?)?\]`) + regionPattern = regexp.MustCompile(`\["([a-zA-Z0-9_,;: \-\.]*)"\]`) + escapePattern = regexp.MustCompile(`\[([a-zA-Z0-9_,;: \-\."#]+)\[(\[*)\]`) + nonEscapePattern = regexp.MustCompile(`(\[[a-zA-Z0-9_,;: \-\."#]+\[*)\]`) + boundaryPattern = regexp.MustCompile("([[:punct:]]\\s*|\\s+)") + spacePattern = regexp.MustCompile(`\s+`) +) + +// Positions of substrings in regular expressions. +const ( + colorForegroundPos = 1 + colorBackgroundPos = 3 + colorFlagPos = 5 +) + +// Predefined InputField acceptance functions. +var ( + // InputFieldInteger accepts integers. + InputFieldInteger func(text string, ch rune) bool + + // InputFieldFloat accepts floating-point numbers. + InputFieldFloat func(text string, ch rune) bool + + // InputFieldMaxLength returns an input field accept handler which accepts + // input strings up to a given length. Use it like this: + // + // inputField.SetAcceptanceFunc(InputFieldMaxLength(10)) // Accept up to 10 characters. + InputFieldMaxLength func(maxLength int) func(text string, ch rune) bool +) + +// Package initialization. +func init() { + // Initialize the predefined input field handlers. + InputFieldInteger = func(text string, ch rune) bool { + if text == "-" { + return true + } + _, err := strconv.Atoi(text) + return err == nil + } + InputFieldFloat = func(text string, ch rune) bool { + if text == "-" || text == "." || text == "-." { + return true + } + _, err := strconv.ParseFloat(text, 64) + return err == nil + } + InputFieldMaxLength = func(maxLength int) func(text string, ch rune) bool { + return func(text string, ch rune) bool { + return len([]rune(text)) <= maxLength + } + } +} + +// styleFromTag takes the given style, defined by a foreground color (fgColor), +// a background color (bgColor), and style attributes, and modifies it based on +// the substrings (tagSubstrings) extracted by the regular expression for color +// tags. The new colors and attributes are returned where empty strings mean +// "don't modify" and a dash ("-") means "reset to default". +func styleFromTag(fgColor, bgColor, attributes string, tagSubstrings []string) (newFgColor, newBgColor, newAttributes string) { + if tagSubstrings[colorForegroundPos] != "" { + color := tagSubstrings[colorForegroundPos] + if color == "-" { + fgColor = "-" + } else if color != "" { + fgColor = color + } + } + + if tagSubstrings[colorBackgroundPos-1] != "" { + color := tagSubstrings[colorBackgroundPos] + if color == "-" { + bgColor = "-" + } else if color != "" { + bgColor = color + } + } + + if tagSubstrings[colorFlagPos-1] != "" { + flags := tagSubstrings[colorFlagPos] + if flags == "-" { + attributes = "-" + } else if flags != "" { + attributes = flags + } + } + + return fgColor, bgColor, attributes +} + +// overlayStyle mixes a background color with a foreground color (fgColor), +// a (possibly new) background color (bgColor), and style attributes, and +// returns the resulting style. For a definition of the colors and attributes, +// see styleFromTag(). Reset instructions cause the corresponding part of the +// default style to be used. +func overlayStyle(background tcell.Color, defaultStyle tcell.Style, fgColor, bgColor, attributes string) tcell.Style { + defFg, defBg, defAttr := defaultStyle.Decompose() + style := defaultStyle.Background(background) + + if fgColor == "-" { + style = style.Foreground(defFg) + } else if fgColor != "" { + style = style.Foreground(tcell.GetColor(fgColor)) + } + + if bgColor == "-" { + style = style.Background(defBg) + } else if bgColor != "" { + style = style.Background(tcell.GetColor(bgColor)) + } + + if attributes == "-" { + style = style.Bold(defAttr&tcell.AttrBold > 0) + style = style.Blink(defAttr&tcell.AttrBlink > 0) + style = style.Reverse(defAttr&tcell.AttrReverse > 0) + style = style.Underline(defAttr&tcell.AttrUnderline > 0) + style = style.Dim(defAttr&tcell.AttrDim > 0) + } else if attributes != "" { + style = style.Normal() + for _, flag := range attributes { + switch flag { + case 'l': + style = style.Blink(true) + case 'b': + style = style.Bold(true) + case 'd': + style = style.Dim(true) + case 'r': + style = style.Reverse(true) + case 'u': + style = style.Underline(true) + } + } + } + + return style +} + +// decomposeString returns information about a string which may contain color +// tags. It returns the indices of the color tags (as returned by +// re.FindAllStringIndex()), the color tags themselves (as returned by +// re.FindAllStringSubmatch()), the indices of an escaped tags, the string +// stripped by any color tags and escaped, and the screen width of the stripped +// string. +func decomposeString(text string) (colorIndices [][]int, colors [][]string, escapeIndices [][]int, stripped string, width int) { + // Get positions of color and escape tags. + colorIndices = colorPattern.FindAllStringIndex(text, -1) + colors = colorPattern.FindAllStringSubmatch(text, -1) + escapeIndices = escapePattern.FindAllStringIndex(text, -1) + + // Because the color pattern detects empty tags, we need to filter them out. + for i := len(colorIndices) - 1; i >= 0; i-- { + if colorIndices[i][1]-colorIndices[i][0] == 2 { + colorIndices = append(colorIndices[:i], colorIndices[i+1:]...) + colors = append(colors[:i], colors[i+1:]...) + } + } + + // Remove the color tags from the original string. + var from int + buf := make([]byte, 0, len(text)) + for _, indices := range colorIndices { + buf = append(buf, []byte(text[from:indices[0]])...) + from = indices[1] + } + buf = append(buf, text[from:]...) + + // Escape string. + stripped = string(escapePattern.ReplaceAll(buf, []byte("[$1$2]"))) + + // Get the width of the stripped string. + width = runewidth.StringWidth(stripped) + + return +} + +// Print prints text onto the screen into the given box at (x,y,maxWidth,1), +// not exceeding that box. "align" is one of AlignLeft, AlignCenter, or +// AlignRight. The screen's background color will not be changed. +// +// You can change the colors and text styles mid-text by inserting a color tag. +// See the package description for details. +// +// Returns the number of actual runes printed (not including color tags) and the +// actual width used for the printed runes. +func Print(screen tcell.Screen, text string, x, y, maxWidth, align int, color tcell.Color) (int, int) { + return printWithStyle(screen, text, x, y, maxWidth, align, tcell.StyleDefault.Foreground(color)) +} + +// printWithStyle works like Print() but it takes a style instead of just a +// foreground color. +func printWithStyle(screen tcell.Screen, text string, x, y, maxWidth, align int, style tcell.Style) (int, int) { + if maxWidth <= 0 || len(text) == 0 { + return 0, 0 + } + + // Decompose the text. + colorIndices, colors, escapeIndices, strippedText, _ := decomposeString(text) + + // We deal with runes, not with bytes. + runes := []rune(strippedText) + + // This helper function takes positions for a substring of "runes" and returns + // a new string corresponding to this substring, making sure printing that + // substring will observe color tags. + substring := func(from, to int) string { + var ( + colorPos, escapePos, runePos, startPos int + foregroundColor, backgroundColor, attributes string + ) + if from >= len(runes) { + return "" + } + for pos := range text { + // Handle color tags. + if colorPos < len(colorIndices) && pos >= colorIndices[colorPos][0] && pos < colorIndices[colorPos][1] { + if pos == colorIndices[colorPos][1]-1 { + if runePos <= from { + foregroundColor, backgroundColor, attributes = styleFromTag(foregroundColor, backgroundColor, attributes, colors[colorPos]) + } + colorPos++ + } + continue + } + + // Handle escape tags. + if escapePos < len(escapeIndices) && pos >= escapeIndices[escapePos][0] && pos < escapeIndices[escapePos][1] { + if pos == escapeIndices[escapePos][1]-1 { + escapePos++ + } else if pos == escapeIndices[escapePos][1]-2 { + continue + } + } + + // Check boundaries. + if runePos == from { + startPos = pos + } else if runePos >= to { + return fmt.Sprintf(`[%s:%s:%s]%s`, foregroundColor, backgroundColor, attributes, text[startPos:pos]) + } + + runePos++ + } + + return fmt.Sprintf(`[%s:%s:%s]%s`, foregroundColor, backgroundColor, attributes, text[startPos:]) + } + + // We want to reduce everything to AlignLeft. + if align == AlignRight { + width := 0 + start := len(runes) + for index := start - 1; index >= 0; index-- { + w := runewidth.RuneWidth(runes[index]) + if width+w > maxWidth { + break + } + width += w + start = index + } + for start < len(runes) && runewidth.RuneWidth(runes[start]) == 0 { + start++ + } + return printWithStyle(screen, substring(start, len(runes)), x+maxWidth-width, y, width, AlignLeft, style) + } else if align == AlignCenter { + width := runewidth.StringWidth(strippedText) + if width == maxWidth { + // Use the exact space. + return printWithStyle(screen, text, x, y, maxWidth, AlignLeft, style) + } else if width < maxWidth { + // We have more space than we need. + half := (maxWidth - width) / 2 + return printWithStyle(screen, text, x+half, y, maxWidth-half, AlignLeft, style) + } else { + // Chop off runes until we have a perfect fit. + var choppedLeft, choppedRight, leftIndex, rightIndex int + rightIndex = len(runes) - 1 + for rightIndex > leftIndex && width-choppedLeft-choppedRight > maxWidth { + if choppedLeft < choppedRight { + leftWidth := runewidth.RuneWidth(runes[leftIndex]) + choppedLeft += leftWidth + leftIndex++ + for leftIndex < len(runes) && leftIndex < rightIndex && runewidth.RuneWidth(runes[leftIndex]) == 0 { + leftIndex++ + } + } else { + rightWidth := runewidth.RuneWidth(runes[rightIndex]) + choppedRight += rightWidth + rightIndex-- + } + } + return printWithStyle(screen, substring(leftIndex, rightIndex), x, y, maxWidth, AlignLeft, style) + } + } + + // Draw text. + drawn := 0 + drawnWidth := 0 + var ( + colorPos, escapePos int + foregroundColor, backgroundColor, attributes string + ) + runeSequence := make([]rune, 0, 10) + runeSeqWidth := 0 + flush := func() { + if len(runeSequence) == 0 { + return // Nothing to flush. + } + + // Print the rune sequence. + finalX := x + drawnWidth + _, _, finalStyle, _ := screen.GetContent(finalX, y) + _, background, _ := finalStyle.Decompose() + finalStyle = overlayStyle(background, style, foregroundColor, backgroundColor, attributes) + var comb []rune + if len(runeSequence) > 1 { + // Allocate space for the combining characters only when necessary. + comb = make([]rune, len(runeSequence)-1) + copy(comb, runeSequence[1:]) + } + for offset := 0; offset < runeSeqWidth; offset++ { + // To avoid undesired effects, we place the same character in all cells. + screen.SetContent(finalX+offset, y, runeSequence[0], comb, finalStyle) + } + + // Advance and reset. + drawn += len(runeSequence) + drawnWidth += runeSeqWidth + runeSequence = runeSequence[:0] + runeSeqWidth = 0 + } + for pos, ch := range text { + // Handle color tags. + if colorPos < len(colorIndices) && pos >= colorIndices[colorPos][0] && pos < colorIndices[colorPos][1] { + flush() + if pos == colorIndices[colorPos][1]-1 { + foregroundColor, backgroundColor, attributes = styleFromTag(foregroundColor, backgroundColor, attributes, colors[colorPos]) + colorPos++ + } + continue + } + + // Handle escape tags. + if escapePos < len(escapeIndices) && pos >= escapeIndices[escapePos][0] && pos < escapeIndices[escapePos][1] { + flush() + if pos == escapeIndices[escapePos][1]-1 { + escapePos++ + } else if pos == escapeIndices[escapePos][1]-2 { + continue + } + } + + // Check if we have enough space for this rune. + chWidth := runewidth.RuneWidth(ch) + if drawnWidth+chWidth > maxWidth { + break // No. We're done then. + } + + // Put this rune in the queue. + if chWidth == 0 { + // If this is not a modifier, we treat it as a space character. + if len(runeSequence) == 0 { + ch = ' ' + chWidth = 1 + } + } else { + // We have a character. Flush all previous runes. + flush() + } + runeSequence = append(runeSequence, ch) + runeSeqWidth += chWidth + + } + if drawnWidth+runeSeqWidth <= maxWidth { + flush() + } + + return drawn, drawnWidth +} + +// PrintSimple prints white text to the screen at the given position. +func PrintSimple(screen tcell.Screen, text string, x, y int) { + Print(screen, text, x, y, math.MaxInt32, AlignLeft, Styles.PrimaryTextColor) +} + +// StringWidth returns the width of the given string needed to print it on +// screen. The text may contain color tags which are not counted. +func StringWidth(text string) int { + _, _, _, _, width := decomposeString(text) + return width +} + +// WordWrap splits a text such that each resulting line does not exceed the +// given screen width. Possible split points are after any punctuation or +// whitespace. Whitespace after split points will be dropped. +// +// This function considers color tags to have no width. +// +// Text is always split at newline characters ('\n'). +func WordWrap(text string, width int) (lines []string) { + colorTagIndices, _, escapeIndices, strippedText, _ := decomposeString(text) + + // Find candidate breakpoints. + breakPoints := boundaryPattern.FindAllStringIndex(strippedText, -1) + + // This helper function adds a new line to the result slice. The provided + // positions are in stripped index space. + addLine := func(from, to int) { + // Shift indices back to original index space. + var colorTagIndex, escapeIndex int + for colorTagIndex < len(colorTagIndices) && to >= colorTagIndices[colorTagIndex][0] || + escapeIndex < len(escapeIndices) && to >= escapeIndices[escapeIndex][0] { + past := 0 + if colorTagIndex < len(colorTagIndices) { + tagWidth := colorTagIndices[colorTagIndex][1] - colorTagIndices[colorTagIndex][0] + if colorTagIndices[colorTagIndex][0] < from { + from += tagWidth + to += tagWidth + colorTagIndex++ + } else if colorTagIndices[colorTagIndex][0] < to { + to += tagWidth + colorTagIndex++ + } else { + past++ + } + } else { + past++ + } + if escapeIndex < len(escapeIndices) { + tagWidth := escapeIndices[escapeIndex][1] - escapeIndices[escapeIndex][0] + if escapeIndices[escapeIndex][0] < from { + from += tagWidth + to += tagWidth + escapeIndex++ + } else if escapeIndices[escapeIndex][0] < to { + to += tagWidth + escapeIndex++ + } else { + past++ + } + } else { + past++ + } + if past == 2 { + break // All other indices are beyond the requested string. + } + } + lines = append(lines, text[from:to]) + } + + // Determine final breakpoints. + var start, lastEnd, newStart, breakPoint int + for { + // What's our candidate string? + var candidate string + if breakPoint < len(breakPoints) { + candidate = text[start:breakPoints[breakPoint][1]] + } else { + candidate = text[start:] + } + candidate = strings.TrimRightFunc(candidate, unicode.IsSpace) + + if runewidth.StringWidth(candidate) >= width { + // We're past the available width. + if lastEnd > start { + // Use the previous candidate. + addLine(start, lastEnd) + start = newStart + } else { + // We have no previous candidate. Make a hard break. + var lineWidth int + for index, ch := range text { + if index < start { + continue + } + chWidth := runewidth.RuneWidth(ch) + if lineWidth > 0 && lineWidth+chWidth >= width { + addLine(start, index) + start = index + break + } + lineWidth += chWidth + } + } + } else { + // We haven't hit the right border yet. + if breakPoint >= len(breakPoints) { + // It's the last line. We're done. + if len(candidate) > 0 { + addLine(start, len(strippedText)) + } + break + } else { + // We have a new candidate. + lastEnd = start + len(candidate) + newStart = breakPoints[breakPoint][1] + breakPoint++ + } + } + } + + return +} + +// PrintJoinedBorder prints a border graphics rune into the screen at the given +// position with the given color, joining it with any existing border graphics +// rune. Background colors are preserved. At this point, only regular single +// line borders are supported. +func PrintJoinedBorder(screen tcell.Screen, x, y int, ch rune, color tcell.Color) { + previous, _, style, _ := screen.GetContent(x, y) + style = style.Foreground(color) + + // What's the resulting rune? + var result rune + if ch == previous { + result = ch + } else { + if ch < previous { + previous, ch = ch, previous + } + result = joints[string(previous)+string(ch)] + } + if result == 0 { + result = ch + } + + // We only print something if we have something. + screen.SetContent(x, y, result, nil, style) +} + +// Escape escapes the given text such that color and/or region tags are not +// recognized and substituted by the print functions of this package. For +// example, to include a tag-like string in a box title or in a TextView: +// +// box.SetTitle(tview.Escape("[squarebrackets]")) +// fmt.Fprint(textView, tview.Escape(`["quoted"]`)) +func Escape(text string) string { + return nonEscapePattern.ReplaceAllString(text, "$1[]") +} diff --git a/vendor/github.com/yfronto/newrelic/.gitignore b/vendor/github.com/yfronto/newrelic/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/vendor/github.com/yfronto/newrelic/.travis.yml b/vendor/github.com/yfronto/newrelic/.travis.yml new file mode 100644 index 00000000..3c2f32b4 --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/.travis.yml @@ -0,0 +1,16 @@ +language: go + +go: + - 1.6 + - 1.7 + - tip + +env: + - "PATH=/home/travis/gopath/bin:$PATH" +script: + - go get -u github.com/golang/lint/golint + - golint ./... + - test `golint ./... | wc -l` = 0 + - gofmt -l . + - test `gofmt -l . | wc -l` = 0 + - go test -v diff --git a/vendor/github.com/yfronto/newrelic/LICENSE b/vendor/github.com/yfronto/newrelic/LICENSE new file mode 100644 index 00000000..0de274ef --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/LICENSE @@ -0,0 +1,30 @@ +Copyright (c) 2016 by authors and contributors. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/yfronto/newrelic/README.md b/vendor/github.com/yfronto/newrelic/README.md new file mode 100644 index 00000000..ab4fcac8 --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/README.md @@ -0,0 +1,75 @@ +[![GoDoc](http://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/yfronto/newrelic) +[![Build +status](https://travis-ci.org/yfronto/newrelic.svg)](https://travis-ci.org/yfronto/newrelic) + +# New Relic API library for Go + +This is a Go library that wraps the [New Relic][1] REST +API. It provides the needed types to interact with the New Relic REST API. + +It's still in progress and I haven't finished the entirety of the API, yet. I +plan to finish all GET (read) operations before any POST (create) operations, +and then PUT (update) operations, and, finally, the DELETE operations. + +The API documentation can be found from [New Relic][1], +and you'll need an API key (for some operations, an Admin API key is +required). + +## USAGE + +This library will provide a client object and any operations can be performed +through it. Simply import this library and create a client to get started: + +```go +package main + +import ( + "github.com/yfronto/newrelic" +) + +var api_key = "..." // Required + +func main() { + // Create the client object + client := newrelic.NewClient(api_key) + + // Get the applciation with ID 12345 + myApp, err := client.GetApplication(12345) + if err != nil { + // Handle error + } + + // Work with the object + fmt.Println(myApp.Name) + + // Some operations accept options + opts := &newrelic.AlertEventOptions{ + // Only events with "MyProduct" as the product name + Filter: newRelic.AlertEventFilter{ + Product: "MyProduct", + }, + } + // Get a list of recent events for my product + events, err := client.GetAlertEvents(opts) + if err != nil { + // Handle error + } + // Display each event with some information + for _, e := range events { + fmt.Printf("%d -- %d (%s): %s\n", e.Timestamp, e.Id, e.Priority, e.Description) + } +} +``` + +## Contributing + +As I work to populate all actions, bugs are bound to come up. Feel free to +send me a pull request or just file an issue. Staying up to date with an API +is hard work and I'm happy to accept contributors. + +**DISCLAIMER:** *I am in no way affiliated with New Relic and this work is +merely a convenience project for myself with no guarantees. It should be +considered "as-is" with no implication of responsibility. See the included +LICENSE for more details.* + +[1]: http://www.newrelic.com \ No newline at end of file diff --git a/vendor/github.com/yfronto/newrelic/alert_conditions.go b/vendor/github.com/yfronto/newrelic/alert_conditions.go new file mode 100644 index 00000000..ee7d1a2d --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/alert_conditions.go @@ -0,0 +1,59 @@ +package newrelic + +// AlertCondition describes what triggers an alert for a specific policy. +type AlertCondition struct { + ID int `json:"id,omitempty"` + Type string `json:"type,omitempty"` + Name string `json:"name,omitempty"` + Enabled bool `json:"name,omitempty"` + Entities []string `json:"entities,omitempty"` + Metric string `json:"metric,omitempty"` + RunbookURL string `json:"runbook_url,omitempty"` + Terms []AlertConditionTerm `json:"terms,omitempty"` + UserDefined AlertUserDefined `json:"user_defined,omitempty"` +} + +// AlertConditionTerm defines thresholds that trigger an AlertCondition. +type AlertConditionTerm struct { + Duration string `json:"duration,omitempty"` + Operator string `json:"operator,omitempty"` + Priority string `json:"priority,omitempty"` + Threshold string `json:"threshold,omitempty"` + TimeFunction string `json:"time_function,omitempty"` +} + +// AlertUserDefined describes user-defined behavior for an AlertCondition. +type AlertUserDefined struct { + Metric string `json:"metric,omitempty"` + ValueFunction string `json:"value_function,omitempty"` +} + +// AlertConditionOptions define filters for GetAlertConditions. +type AlertConditionOptions struct { + policyID int + Page int +} + +func (o *AlertConditionOptions) String() string { + if o == nil { + return "" + } + return encodeGetParams(map[string]interface{}{ + "policy_id": o.policyID, + "page": o.Page, + }) +} + +// GetAlertConditions will return any AlertCondition defined for a given +// policy, optionally filtered by AlertConditionOptions. +func (c *Client) GetAlertConditions(policy int, options *AlertConditionOptions) ([]AlertCondition, error) { + resp := &struct { + Conditions []AlertCondition `json:"conditions,omitempty"` + }{} + options.policyID = policy + err := c.doGet("alerts_conditions.json", options, resp) + if err != nil { + return nil, err + } + return resp.Conditions, nil +} diff --git a/vendor/github.com/yfronto/newrelic/alert_events.go b/vendor/github.com/yfronto/newrelic/alert_events.go new file mode 100644 index 00000000..6291b499 --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/alert_events.go @@ -0,0 +1,60 @@ +package newrelic + +// AlertEvent describes a triggered event. +type AlertEvent struct { + ID int `json:"id,omitempty"` + EventType string `json:"event_type,omitempty"` + Product string `json:"product,omitempty"` + EntityType string `json:"entity_type,omitempty"` + EntityGroupID int `json:"entity_group_id,omitempty"` + EntityID int `json:"entity_id,omitempty"` + Priority string `json:"priority,omitempty"` + Description string `json:"description,omitempty"` + Timestamp int `json:"timestamp,omitempty"` + IncidentID int `json:"incident_id"` +} + +// AlertEventFilter provides filters for AlertEventOptions when calling +// GetAlertEvents. +type AlertEventFilter struct { + // TODO: New relic restricts these options + Product string + EntityType string + EntityGroupID int + EntityID int + EventType string +} + +// AlertEventOptions is an optional means of filtering AlertEvents when +// calling GetAlertEvents. +type AlertEventOptions struct { + Filter AlertEventFilter + Page int +} + +func (o *AlertEventOptions) String() string { + if o == nil { + return "" + } + return encodeGetParams(map[string]interface{}{ + "filter[product]": o.Filter.Product, + "filter[entity_type]": o.Filter.EntityType, + "filter[entity_group_id]": o.Filter.EntityGroupID, + "filter[entity_id]": o.Filter.EntityID, + "filter[event_type]": o.Filter.EventType, + "page": o.Page, + }) +} + +// GetAlertEvents will return a slice of recent AlertEvent items triggered, +// optionally filtering by AlertEventOptions. +func (c *Client) GetAlertEvents(options *AlertEventOptions) ([]AlertEvent, error) { + resp := &struct { + RecentEvents []AlertEvent `json:"recent_events,omitempty"` + }{} + err := c.doGet("alerts_events.json", options, resp) + if err != nil { + return nil, err + } + return resp.RecentEvents, nil +} diff --git a/vendor/github.com/yfronto/newrelic/alert_events_test_fixtures.go b/vendor/github.com/yfronto/newrelic/alert_events_test_fixtures.go new file mode 100644 index 00000000..b27c4ef2 --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/alert_events_test_fixtures.go @@ -0,0 +1,91 @@ +package newrelic + +type getAlertEventsTestsInput struct { + options *AlertEventOptions + data string +} + +type getAlertEventsTestsOutput struct { + data []AlertEvent + err error +} + +const ( + testAlertEventJSON = ` + { + "id": 123, + "event_type": "VIOLATION_OPEN", + "product": "APM", + "entity_type": "Application", + "entity_group_id": 1234, + "entity_id": 12, + "priority": "Warning", + "description": "Test Alert", + "timestamp": 1472355451353, + "incident_id": 23 + } +` +) + +var ( + testAlertEvent = AlertEvent{ + ID: 123, + EventType: "VIOLATION_OPEN", + Product: "APM", + EntityType: "Application", + EntityGroupID: 1234, + EntityID: 12, + Priority: "Warning", + Description: "Test Alert", + Timestamp: 1472355451353, + IncidentID: 23, + } + getAlertEventsTests = []struct { + in getAlertEventsTestsInput + out getAlertEventsTestsOutput + }{ + { + getAlertEventsTestsInput{ + options: nil, + data: `{"recent_events": [` + testAlertEventJSON + `]}`, + }, + getAlertEventsTestsOutput{ + data: []AlertEvent{ + testAlertEvent, + }, + err: nil, + }, + }, + } + alertEventOptionsStringerTests = []struct { + in *AlertEventOptions + out string + }{ + { + &AlertEventOptions{}, + "", + }, + { + nil, + "", + }, + { + &AlertEventOptions{ + Filter: AlertEventFilter{ + Product: "testProduct", + EntityType: "testEntityType", + EntityGroupID: 123, + EntityID: 1234, + EventType: "testEventType", + }, + Page: 1, + }, + "filter%5Bentity_group_id%5D=123" + + "&filter%5Bentity_id%5D=1234" + + "&filter%5Bentity_type%5D=testEntityType" + + "&filter%5Bevent_type%5D=testEventType" + + "&filter%5Bproduct%5D=testProduct" + + "&page=1", + }, + } +) diff --git a/vendor/github.com/yfronto/newrelic/application_deployments.go b/vendor/github.com/yfronto/newrelic/application_deployments.go new file mode 100644 index 00000000..db8438e6 --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/application_deployments.go @@ -0,0 +1,53 @@ +package newrelic + +import ( + "strconv" + "time" +) + +// ApplicationDeploymentLinks represents links that apply to an +// ApplicationDeployment. +type ApplicationDeploymentLinks struct { + Application int `json:"application,omitempty"` +} + +// ApplicationDeploymentOptions provide a means to filter when calling +// GetApplicationDeployments. +type ApplicationDeploymentOptions struct { + Page int +} + +// ApplicationDeployment contains information about a New Relic Application +// Deployment. +type ApplicationDeployment struct { + ID int `json:"id,omitempty"` + Revision string `json:"revision,omitempty"` + Changelog string `json:"changelog,omitempty"` + Description string `json:"description,omitempty"` + User string `json:"user,omitemtpy"` + Timestamp time.Time `json:"timestamp,omitempty"` + Links ApplicationDeploymentLinks `json:"links,omitempty"` +} + +// GetApplicationDeployments returns a slice of New Relic Application +// Deployments. +func (c *Client) GetApplicationDeployments(id int, opt *ApplicationDeploymentOptions) ([]ApplicationDeployment, error) { + resp := &struct { + Deployments []ApplicationDeployment `json:"deployments,omitempty"` + }{} + path := "applications/" + strconv.Itoa(id) + "/deployments.json" + err := c.doGet(path, opt, resp) + if err != nil { + return nil, err + } + return resp.Deployments, nil +} + +func (o *ApplicationDeploymentOptions) String() string { + if o == nil { + return "" + } + return encodeGetParams(map[string]interface{}{ + "page": o.Page, + }) +} diff --git a/vendor/github.com/yfronto/newrelic/application_host_metrics.go b/vendor/github.com/yfronto/newrelic/application_host_metrics.go new file mode 100644 index 00000000..ef3dd64c --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/application_host_metrics.go @@ -0,0 +1,38 @@ +package newrelic + +import ( + "fmt" +) + +// GetApplicationHostMetrics will return a slice of Metric items for a +// particular Application ID's Host ID, optionally filtering by +// MetricsOptions. +func (c *Client) GetApplicationHostMetrics(appID, hostID int, options *MetricsOptions) ([]Metric, error) { + mc := NewMetricClient(c) + + return mc.GetMetrics( + fmt.Sprintf( + "applications/%d/hosts/%d/metrics.json", + appID, + hostID, + ), + options, + ) +} + +// GetApplicationHostMetricData will return all metric data for a particular +// application's host and slice of metric names, optionally filtered by +// MetricDataOptions. +func (c *Client) GetApplicationHostMetricData(appID, hostID int, names []string, options *MetricDataOptions) (*MetricDataResponse, error) { + mc := NewMetricClient(c) + + return mc.GetMetricData( + fmt.Sprintf( + "applications/%d/hosts/%d/metrics/data.json", + appID, + hostID, + ), + names, + options, + ) +} diff --git a/vendor/github.com/yfronto/newrelic/application_hosts.go b/vendor/github.com/yfronto/newrelic/application_hosts.go new file mode 100644 index 00000000..ad8cc5d5 --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/application_hosts.go @@ -0,0 +1,94 @@ +package newrelic + +import ( + "strconv" +) + +// ApplicationHostSummary describes an Application's host. +type ApplicationHostSummary struct { + ApdexScore float64 `json:"apdex_score,omitempty"` + ErrorRate float64 `json:"error_rate,omitempty"` + InstanceCount int `json:"instance_count,omitempty"` + ResponseTime float64 `json:"response_time,omitempty"` + Throughput float64 `json:"throughput,omitempty"` +} + +// ApplicationHostEndUserSummary describes the end user summary component of +// an ApplicationHost. +type ApplicationHostEndUserSummary struct { + ResponseTime float64 `json:"response_time,omitempty"` + Throughput float64 `json:"throughput,omitempty"` + ApdexScore float64 `json:"apdex_score,omitempty"` +} + +// ApplicationHostLinks list IDs associated with an ApplicationHost. +type ApplicationHostLinks struct { + Application int `json:"application,omitempty"` + ApplicationInstances []int `json:"application_instances,omitempty"` + Server int `json:"server,omitempty"` +} + +// ApplicationHost describes a New Relic Application Host. +type ApplicationHost struct { + ApplicationName string `json:"application_name,omitempty"` + ApplicationSummary ApplicationHostSummary `json:"application_summary,omitempty"` + HealthStatus string `json:"health_status,omitempty"` + Host string `json:"host,omitempty"` + ID int `json:"idomitempty"` + Language string `json:"language,omitempty"` + Links ApplicationHostLinks `json:"links,omitempty"` + EndUserSummary ApplicationHostEndUserSummary `json:"end_user_summary,omitempty"` +} + +// ApplicationHostsFilter provides a means to filter requests through +// ApplicationHostsOptions when calling GetApplicationHosts. +type ApplicationHostsFilter struct { + Hostname string + IDs []int +} + +// ApplicationHostsOptions provide a means to filter results when calling +// GetApplicationHosts. +type ApplicationHostsOptions struct { + Filter ApplicationHostsFilter + Page int +} + +// GetApplicationHosts returns a slice of New Relic Application Hosts, +// optionally filtering by ApplicationHostOptions. +func (c *Client) GetApplicationHosts(id int, options *ApplicationHostsOptions) ([]ApplicationHost, error) { + resp := &struct { + ApplicationHosts []ApplicationHost `json:"application_hosts,omitempty"` + }{} + path := "applications/" + strconv.Itoa(id) + "/hosts.json" + err := c.doGet(path, options, resp) + if err != nil { + return nil, err + } + return resp.ApplicationHosts, nil +} + +// GetApplicationHost returns a single Application Host associated with the +// given application host ID and host ID. +func (c *Client) GetApplicationHost(appID, hostID int) (*ApplicationHost, error) { + resp := &struct { + ApplicationHost ApplicationHost `json:"application_host,omitempty"` + }{} + path := "applications/" + strconv.Itoa(appID) + "/hosts/" + strconv.Itoa(hostID) + ".json" + err := c.doGet(path, nil, resp) + if err != nil { + return nil, err + } + return &resp.ApplicationHost, nil +} + +func (o *ApplicationHostsOptions) String() string { + if o == nil { + return "" + } + return encodeGetParams(map[string]interface{}{ + "filter[hostname]": o.Filter.Hostname, + "filter[ids]": o.Filter.IDs, + "page": o.Page, + }) +} diff --git a/vendor/github.com/yfronto/newrelic/application_instance_metrics.go b/vendor/github.com/yfronto/newrelic/application_instance_metrics.go new file mode 100644 index 00000000..9a0c8bf7 --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/application_instance_metrics.go @@ -0,0 +1,38 @@ +package newrelic + +import ( + "fmt" +) + +// GetApplicationInstanceMetrics will return a slice of Metric items for a +// particular Application ID's instance ID, optionally filtering by +// MetricsOptions. +func (c *Client) GetApplicationInstanceMetrics(appID, instanceID int, options *MetricsOptions) ([]Metric, error) { + mc := NewMetricClient(c) + + return mc.GetMetrics( + fmt.Sprintf( + "applications/%d/instances/%d/metrics.json", + appID, + instanceID, + ), + options, + ) +} + +// GetApplicationInstanceMetricData will return all metric data for a +// particular application's instance and slice of metric names, optionally +// filtered by MetricDataOptions. +func (c *Client) GetApplicationInstanceMetricData(appID, instanceID int, names []string, options *MetricDataOptions) (*MetricDataResponse, error) { + mc := NewMetricClient(c) + + return mc.GetMetricData( + fmt.Sprintf( + "applications/%d/instances/%d/metrics/data.json", + appID, + instanceID, + ), + names, + options, + ) +} diff --git a/vendor/github.com/yfronto/newrelic/application_instances.go b/vendor/github.com/yfronto/newrelic/application_instances.go new file mode 100644 index 00000000..0a8b2de1 --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/application_instances.go @@ -0,0 +1,94 @@ +package newrelic + +import ( + "strconv" +) + +// ApplicationInstanceSummary describes an Application's instance. +type ApplicationInstanceSummary struct { + ResponseTime float64 `json:"response_time,omitempty"` + Throughput float64 `json:"throughput,omitempty"` + ErrorRate float64 `json:"error_rate,omitempty"` + ApdexScore float64 `json:"apdex_score,omitempty"` + InstanceCount int `json:"instance_count,omitempty"` +} + +// ApplicationInstanceEndUserSummary describes the end user summary component +// of an ApplicationInstance. +type ApplicationInstanceEndUserSummary struct { + ResponseTime float64 `json:"response_time,omitempty"` + Throughput float64 `json:"throughput,omitempty"` + ApdexScore float64 `json:"apdex_score,omitempty"` +} + +// ApplicationInstanceLinks lists IDs associated with an ApplicationInstances. +type ApplicationInstanceLinks struct { + Application int `json:"application,omitempty"` + ApplicationHost int `json:"application_host,omitempty"` + Server int `json:"server,omitempty"` +} + +// ApplicationInstance describes a New Relic Application instance. +type ApplicationInstance struct { + ID int `json:"id,omitempty"` + ApplicationName string `json:"application_name,omitempty"` + Host string `json:"host,omitempty"` + Port int `json:"port,omitempty"` + Language string `json:"language,omitempty"` + HealthStatus string `json:"health_status,omitempty"` + ApplicationSummary ApplicationInstanceSummary `json:"application_summary,omitempty"` + EndUserSummary ApplicationInstanceEndUserSummary `json:"end_user_summary,omitempty"` + Links ApplicationInstanceLinks `json:"links,omitempty"` +} + +// ApplicationInstancesFilter provides a means to filter requests through +// ApplicationInstancesOptions when calling GetApplicationInstances. +type ApplicationInstancesFilter struct { + Hostname string + IDs []int +} + +// ApplicationInstancesOptions provides a means to filter results when calling +// GetApplicationInstances. +type ApplicationInstancesOptions struct { + Filter ApplicationInstancesFilter + Page int +} + +// GetApplicationInstances returns a slice of New Relic Application Instances, +// optionall filtering by ApplicationInstancesOptions. +func (c *Client) GetApplicationInstances(appID int, options *ApplicationInstancesOptions) ([]ApplicationInstance, error) { + resp := &struct { + ApplicationInstances []ApplicationInstance `json:"application_instances,omitempty"` + }{} + path := "applications/" + strconv.Itoa(appID) + "/instances.json" + err := c.doGet(path, options, resp) + if err != nil { + return nil, err + } + return resp.ApplicationInstances, nil +} + +// GetApplicationInstance returns a single Application Instance associated +// with the given application ID and instance ID +func (c *Client) GetApplicationInstance(appID, instanceID int) (*ApplicationInstance, error) { + resp := &struct { + ApplicationInstance ApplicationInstance `json:"application_instance,omitempty"` + }{} + path := "applications/" + strconv.Itoa(appID) + "/instances/" + strconv.Itoa(instanceID) + ".json" + err := c.doGet(path, nil, resp) + if err != nil { + return nil, err + } + return &resp.ApplicationInstance, nil +} +func (o *ApplicationInstancesOptions) String() string { + if o == nil { + return "" + } + return encodeGetParams(map[string]interface{}{ + "filter[hostname]": o.Filter.Hostname, + "filter[ids]": o.Filter.IDs, + "page": o.Page, + }) +} diff --git a/vendor/github.com/yfronto/newrelic/application_metrics.go b/vendor/github.com/yfronto/newrelic/application_metrics.go new file mode 100644 index 00000000..e0c09b80 --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/application_metrics.go @@ -0,0 +1,36 @@ +package newrelic + +import ( + "fmt" +) + +// GetApplicationMetrics will return a slice of Metric items for a +// particular Application ID, optionally filtering by +// MetricsOptions. +func (c *Client) GetApplicationMetrics(id int, options *MetricsOptions) ([]Metric, error) { + mc := NewMetricClient(c) + + return mc.GetMetrics( + fmt.Sprintf( + "applications/%d/metrics.json", + id, + ), + options, + ) +} + +// GetApplicationMetricData will return all metric data for a particular +// application and slice of metric names, optionally filtered by +// MetricDataOptions. +func (c *Client) GetApplicationMetricData(id int, names []string, options *MetricDataOptions) (*MetricDataResponse, error) { + mc := NewMetricClient(c) + + return mc.GetMetricData( + fmt.Sprintf( + "applications/%d/metrics/data.json", + id, + ), + names, + options, + ) +} diff --git a/vendor/github.com/yfronto/newrelic/application_metrics_test_fixtures.go b/vendor/github.com/yfronto/newrelic/application_metrics_test_fixtures.go new file mode 100644 index 00000000..67e4e53d --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/application_metrics_test_fixtures.go @@ -0,0 +1,175 @@ +package newrelic + +type getApplicationMetricsTestsInput struct { + id int + options *MetricsOptions + data string +} + +type getApplicationMetricsTestsOutput struct { + data []Metric + err error +} + +type getApplicationMetricDataTestsInput struct { + id int + Names []string + options *MetricDataOptions + data string +} + +type getApplicationMetricDataTestsOutput struct { + data *MetricDataResponse + err error +} + +const ( + testApplicationMetricJSON = ` + { + "name": "testMetric", + "values": [ + "testValue1", + "testValue2" + ] + } +` +) + +var ( + testApplicationMetric = Metric{ + Name: "testMetric", + Values: []string{"testValue1", "testValue2"}, + } + getApplicaitonMetricsTests = []struct { + in getApplicationMetricsTestsInput + out getApplicationMetricsTestsOutput + }{ + { + getApplicationMetricsTestsInput{ + id: 123, + options: nil, + data: `{"metrics": [` + + testApplicationMetricJSON + `,` + + testApplicationMetricJSON + + `]}`, + }, + getApplicationMetricsTestsOutput{ + data: []Metric{ + testApplicationMetric, + testApplicationMetric, + }, + err: nil, + }, + }, + } + applicationMetricOptionsStringerTests = []struct { + in *MetricsOptions + out string + }{ + { + &MetricsOptions{}, + "", + }, + { + nil, + "", + }, + { + &MetricsOptions{ + Name: "testName", + Page: 5, + }, + "name=testName" + + "&page=5", + }, + } + applicationMetricDataOptionsStringerTests = []struct { + in *MetricDataOptions + out string + }{ + { + &MetricDataOptions{}, + "", + }, + { + nil, + "", + }, + { + &MetricDataOptions{ + Names: Array{[]string{"test1", "test2"}}, + Values: Array{[]string{"value1", "value2"}}, + From: testTime, + To: testTime, + Period: 123, + Summarize: true, + Raw: true, + }, + "from=" + testTimeStringEscaped + + "&names%5B%5D=test1" + + "&names%5B%5D=test2" + + "&period=123" + + "&raw=true" + + "&summarize=true" + + "&to=" + testTimeStringEscaped + + "&values%5B%5D=value1&values%5B%5D=value2", + }, + } + testApplicationMetricDataJSON = ` + { + "metric_data": { + "from": "` + testTimeRawString + `", + "to": "` + testTimeRawString + `", + "metrics_found": ["name1"], + "metrics_not_found": ["name2"], + "metrics": [ + { + "name": "testName", + "timeslices": [ + { + "from": "` + testTimeRawString + `", + "to": "` + testTimeRawString + `", + "values": {"testVal": 1.234} + } + ] + } + ] + } + } +` + testApplicationMetricData = MetricData{ + Name: "testName", + Timeslices: []MetricTimeslice{ + MetricTimeslice{ + From: testTime, + To: testTime, + Values: map[string]float64{ + "testVal": 1.234, + }, + }, + }, + } + getApplicaitonMetricDataTests = []struct { + in getApplicationMetricDataTestsInput + out getApplicationMetricDataTestsOutput + }{ + { + getApplicationMetricDataTestsInput{ + id: 1234, + Names: []string{"name1", "name2"}, + options: &MetricDataOptions{}, + data: testApplicationMetricDataJSON, + }, + getApplicationMetricDataTestsOutput{ + data: &MetricDataResponse{ + From: testTime, + To: testTime, + MetricsFound: []string{"name1"}, + MetricsNotFound: []string{"name2"}, + Metrics: []MetricData{testApplicationMetricData}, + }, + err: nil, + }, + }, + } +) diff --git a/vendor/github.com/yfronto/newrelic/applications.go b/vendor/github.com/yfronto/newrelic/applications.go new file mode 100644 index 00000000..034f7db1 --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/applications.go @@ -0,0 +1,111 @@ +package newrelic + +import ( + "strconv" + "time" +) + +// ApplicationSummary describes the brief summary component of an Application. +type ApplicationSummary struct { + ResponseTime float64 `json:"response_time,omitempty"` + Throughput float64 `json:"throughput,omitempty"` + ErrorRate float64 `json:"error_rate,omitempty"` + ApdexTarget float64 `json:"apdex_target,omitempty"` + ApdexScore float64 `json:"apdex_score,omitempty"` + HostCount int `json:"host_count,omitempty"` + InstanceCount int `json:"instance_count,omitempty"` + ConcurrentInstanceCount int `json:"concurrent_instance_count,omitempty"` +} + +// EndUserSummary describes the end user summary component of an Application. +type EndUserSummary struct { + ResponseTime float64 `json:"response_time,omitempty"` + Throughput float64 `json:"throughput,omitempty"` + ApdexTarget float64 `json:"apdex_target,omitempty"` + ApdexScore float64 `json:"apdex_score,omitempty"` +} + +// Settings describe settings for an Application. +type Settings struct { + AppApdexThreshold float64 `json:"app_apdex_threshold,omitempty"` + EndUserApdexThreshold float64 `json:"end_user_apdex_threshold,omitempty"` + EnableRealUserMonitoring bool `json:"enable_real_user_monitoring,omitempty"` + UseServerSideConfig bool `json:"use_server_side_config,omitempty"` +} + +// Links list IDs associated with an Application. +type Links struct { + Servers []int `json:"servers,omitempty"` + ApplicationHosts []int `json:"application_hosts,omitempty"` + ApplicationInstances []int `json:"application_instances,omitempty"` + AlertPolicy int `json:"alert_policy,omitempty"` +} + +// Application describes a New Relic Application. +type Application struct { + ID int `json:"id,omitempty"` + Name string `json:"name,omitempty"` + Language string `json:"language,omitempty"` + HealthStatus string `json:"health_status,omitempty"` + Reporting bool `json:"reporting,omitempty"` + LastReportedAt time.Time `json:"last_reported_at,omitempty"` + ApplicationSummary ApplicationSummary `json:"application_summary,omitempty"` + EndUserSummary EndUserSummary `json:"end_user_summary,omitempty"` + Settings Settings `json:"settings,omitempty"` + Links Links `json:"links,omitempty"` +} + +// ApplicationFilter provides a means to filter requests through +// ApplicaitonOptions when calling GetApplications. +type ApplicationFilter struct { + Name string + Host string + IDs []int + Language string +} + +// ApplicationOptions provides a means to filter results when calling +// GetApplicaitons. +type ApplicationOptions struct { + Filter ApplicationFilter + Page int +} + +func (o *ApplicationOptions) String() string { + if o == nil { + return "" + } + return encodeGetParams(map[string]interface{}{ + "filter[name]": o.Filter.Name, + "filter[host]": o.Filter.Host, + "filter[ids]": o.Filter.IDs, + "filter[language]": o.Filter.Language, + "page": o.Page, + }) +} + +// GetApplications returns a slice of New Relic Applications, optionally +// filtering by ApplicationOptions. +func (c *Client) GetApplications(options *ApplicationOptions) ([]Application, error) { + resp := &struct { + Applications []Application `json:"applications,omitempty"` + }{} + err := c.doGet("applications.json", options, resp) + if err != nil { + return nil, err + } + return resp.Applications, nil +} + +// GetApplication returns a single Application associated with a given ID. +func (c *Client) GetApplication(id int) (*Application, error) { + resp := &struct { + Application Application `json:"application,omitempty"` + }{} + path := "applications/" + strconv.Itoa(id) + ".json" + err := c.doGet(path, nil, resp) + if err != nil { + return nil, err + } + return &resp.Application, nil +} diff --git a/vendor/github.com/yfronto/newrelic/applications_test_fixtures.go b/vendor/github.com/yfronto/newrelic/applications_test_fixtures.go new file mode 100644 index 00000000..faf4cf5b --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/applications_test_fixtures.go @@ -0,0 +1,165 @@ +package newrelic + +type getApplicationsTestsInput struct { + options *ApplicationOptions + data string +} + +type getApplicationsTestsOutput struct { + data []Application + err error +} + +type getApplicationTestsInput struct { + id int + data string +} + +type getApplicationTestsOutput struct { + data *Application + err error +} + +var ( + testApplicationJSON = ` + { + "application_summary": { + "apdex_score": 1.0, + "apdex_target": 0.5, + "error_rate": 0.0, + "host_count": 1, + "instance_count": 1, + "response_time": 0.263, + "throughput": 12.3 + }, + "end_user_summary": { + "response_time": 0.263, + "throughput": 12.3, + "apdex_target": 0.5, + "apdex_score": 1 + }, + "health_status": "green", + "id": 12345, + "language": "java", + "last_reported_at": "` + testTimeRawString + `", + "links": { + "alert_policy": 123, + "application_hosts": [ + 1234567 + ], + "application_instances": [ + 1234568 + ], + "servers": [ + 54321 + ] + }, + "name": "test.example.com", + "reporting": true, + "settings": { + "app_apdex_threshold": 0.5, + "enable_real_user_monitoring": true, + "end_user_apdex_threshold": 1.0, + "use_server_side_config": false + } + } +` + testApplication = Application{ + ID: 12345, + Name: "test.example.com", + Language: "java", + HealthStatus: "green", + Reporting: true, + LastReportedAt: testTime, + ApplicationSummary: ApplicationSummary{ + ResponseTime: 0.263, + Throughput: 12.3, + ErrorRate: 0, + ApdexTarget: 0.5, + ApdexScore: 1, + HostCount: 1, + InstanceCount: 1, + ConcurrentInstanceCount: 0, + }, + EndUserSummary: EndUserSummary{ + ResponseTime: 0.263, + Throughput: 12.3, + ApdexTarget: 0.5, + ApdexScore: 1, + }, + Settings: Settings{ + AppApdexThreshold: 0.5, + EndUserApdexThreshold: 1, + EnableRealUserMonitoring: true, + UseServerSideConfig: false, + }, + Links: Links{ + Servers: []int{54321}, + ApplicationHosts: []int{1234567}, + ApplicationInstances: []int{1234568}, + AlertPolicy: 123, + }, + } + testApplications = []Application{ + testApplication, + testApplication, + } + getApplicationTests = []struct { + in getApplicationTestsInput + out getApplicationTestsOutput + }{ + { + getApplicationTestsInput{ + id: 12345, + data: `{ "application":` + testApplicationJSON + `}`, + }, + getApplicationTestsOutput{ + data: &testApplication, + }, + }, + } + getApplicationsTests = []struct { + in getApplicationsTestsInput + out getApplicationsTestsOutput + }{ + { + getApplicationsTestsInput{ + options: nil, + data: `{"applications":[` + testApplicationJSON + "," + testApplicationJSON + "]}", + }, + getApplicationsTestsOutput{ + data: testApplications, + err: nil, + }, + }, + } + applicationOptionsStringerTests = []struct { + in *ApplicationOptions + out string + }{ + { + &ApplicationOptions{}, + "", + }, + { + &ApplicationOptions{ + Filter: ApplicationFilter{ + Name: "testName", + Host: "testHost", + IDs: []int{123, 456}, + Language: "java", + }, + Page: 5, + }, + `filter%5Bhost%5D=testHost` + + `&filter%5Bids%5D=123%2C456` + + `&filter%5Blanguage%5D=java` + + `&filter%5Bname%5D=testName` + + `&page=5`, + }, + { + nil, + "", + }, + } +) diff --git a/vendor/github.com/yfronto/newrelic/array.go b/vendor/github.com/yfronto/newrelic/array.go new file mode 100644 index 00000000..59c06baf --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/array.go @@ -0,0 +1,11 @@ +package newrelic + +// An Array is a type expected by the NewRelic API that differs from a comma- +// separated list. When passing GET params that expect an 'Array' type with +// one to many values, the expected format is "key=val1&key=val2" but an +// argument with zero to many values is of the form "key=val1,val2", and +// neither can be used in the other's place, so we have to differentiate +// somehow. +type Array struct { + arr []string +} diff --git a/vendor/github.com/yfronto/newrelic/browser_applications.go b/vendor/github.com/yfronto/newrelic/browser_applications.go new file mode 100644 index 00000000..d64c203c --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/browser_applications.go @@ -0,0 +1,48 @@ +package newrelic + +// BrowserApplicationsFilter is the filtering component of +// BrowserApplicationsOptions +type BrowserApplicationsFilter struct { + Name string + IDs []int +} + +// BrowserApplicationsOptions provides a filtering mechanism for +// GetBrowserApplications. +type BrowserApplicationsOptions struct { + Filter BrowserApplicationsFilter + Page int +} + +// BrowserApplication describes a New Relic Browser Application. +type BrowserApplication struct { + ID int `json:"id,omitempty"` + Name string `json:"name,omitempty"` + BrowserMonitoringKey string `json:"browser_monitoring_key,omitempty"` + LoaderScript string `json:"loader_script,omitempty"` +} + +// GetBrowserApplications will return a slice of New Relic Browser +// Applications, optionally filtered by BrowserApplicationsOptions. +func (c *Client) GetBrowserApplications(opt *BrowserApplicationsOptions) ([]BrowserApplication, error) { + resp := &struct { + BrowserApplications []BrowserApplication `json:"browser_applications,omitempty"` + }{} + path := "browser_applications.json" + err := c.doGet(path, opt, resp) + if err != nil { + return nil, err + } + return resp.BrowserApplications, nil +} + +func (o *BrowserApplicationsOptions) String() string { + if o == nil { + return "" + } + return encodeGetParams(map[string]interface{}{ + "filter[name]": o.Filter.Name, + "filter[ids]": o.Filter.IDs, + "page": o.Page, + }) +} diff --git a/vendor/github.com/yfronto/newrelic/common_test_fixtures.go b/vendor/github.com/yfronto/newrelic/common_test_fixtures.go new file mode 100644 index 00000000..f5c8a6d6 --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/common_test_fixtures.go @@ -0,0 +1,17 @@ +package newrelic + +import ( + "net/url" + "time" +) + +const ( + testAPIKey = "test_api_key" + testTimeRawString = "2016-01-20T20:29:38Z" +) + +var ( + testTime, _ = time.Parse(time.RFC3339, testTimeRawString) + testTimeString = testTime.String() + testTimeStringEscaped = url.QueryEscape(testTimeString) +) diff --git a/vendor/github.com/yfronto/newrelic/component_metrics.go b/vendor/github.com/yfronto/newrelic/component_metrics.go new file mode 100644 index 00000000..6c5ef599 --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/component_metrics.go @@ -0,0 +1,34 @@ +package newrelic + +import ( + "fmt" +) + +// GetComponentMetrics will return a slice of Metric items for a +// particular Component ID, optionally filtered by MetricsOptions. +func (c *Client) GetComponentMetrics(id int, options *MetricsOptions) ([]Metric, error) { + mc := NewMetricClient(c) + + return mc.GetMetrics( + fmt.Sprintf( + "components/%d/metrics.json", + id, + ), + options, + ) +} + +// GetComponentMetricData will return all metric data for a particular +// component, optionally filtered by MetricDataOptions. +func (c *Client) GetComponentMetricData(id int, names []string, options *MetricDataOptions) (*MetricDataResponse, error) { + mc := NewMetricClient(c) + + return mc.GetMetricData( + fmt.Sprintf( + "components/%d/metrics/data.json", + id, + ), + names, + options, + ) +} diff --git a/vendor/github.com/yfronto/newrelic/http_helper.go b/vendor/github.com/yfronto/newrelic/http_helper.go new file mode 100644 index 00000000..e853a5fc --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/http_helper.go @@ -0,0 +1,100 @@ +package newrelic + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "net/http" + "net/url" + "strconv" + "strings" + "time" +) + +func (c *Client) doGet(path string, params fmt.Stringer, out interface{}) error { + var s string + if params != nil { + s = params.String() + } + r := strings.NewReader(s) + req, err := http.NewRequest("GET", c.url.String()+path, r) + if err != nil { + return err + } + req.Header.Add("X-Api-Key", c.apiKey) + req.Header.Add("Content-Type", "application/x-www-form-urlencoded") + return c.doRequest(req, out) +} + +func (c *Client) doRequest(req *http.Request, out interface{}) error { + resp, err := c.httpClient.Do(req) + if err != nil { + return err + } + defer resp.Body.Close() + b, err := ioutil.ReadAll(resp.Body) + if err != nil { + return err + } + if resp.StatusCode != 200 { + return fmt.Errorf("newrelic http error (%s): %s", resp.Status, b) + } + if len(b) == 0 { + b = []byte{'{', '}'} + } + err = json.Unmarshal(b, &out) + if err != nil { + return err + } + return nil +} + +func encodeGetParams(params map[string]interface{}) string { + s := url.Values{} + for k, v := range params { + switch v.(type) { + case string: + val := v.(string) + if val != "" { + s.Add(k, val) + } + case int: + val := v.(int) + // TODO: Zero values versus not defined + if val != 0 { + s.Add(k, strconv.Itoa(val)) + } + case []string: + val := v.([]string) + if len(val) != 0 { + s.Add(k, strings.Join(val, ",")) + } + case []int: + val := v.([]int) + arr := []string{} + for _, v := range val { + arr = append(arr, strconv.Itoa(v)) + } + if len(arr) != 0 { + s.Add(k, strings.Join(arr, ",")) + } + case time.Time: + val := v.(time.Time) + if !val.IsZero() { + s.Add(k, val.String()) + } + case Array: + val := v.(Array) + for _, v := range val.arr { + s.Add(k, v) + } + case bool: + if v.(bool) { + s.Add(k, "true") + } + default: + s.Add(k, fmt.Sprintf("%v", v)) + } + } + return s.Encode() +} diff --git a/vendor/github.com/yfronto/newrelic/http_helper_test_fixtures.go b/vendor/github.com/yfronto/newrelic/http_helper_test_fixtures.go new file mode 100644 index 00000000..de0f0b3d --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/http_helper_test_fixtures.go @@ -0,0 +1,119 @@ +package newrelic + +import ( + "errors" + "net/http" + "strings" +) + +type testJSONInterface struct { + data string `json:"data"id,omitempty"` +} + +type testParamsInterface struct { + data string +} + +type doGetTestsInput struct { + path string + params *testParamsInterface + out testJSONInterface + status int + data string +} + +type doGetTestsOutput struct { + data testJSONInterface + err error +} + +type doRequestTestsInput struct { + req *http.Request + out testJSONInterface + status int + data string +} + +type doRequestTestOutput struct { + data testJSONInterface + err error +} + +var ( + doGetTests = []struct { + in doGetTestsInput + out doGetTestsOutput + }{ + { + doGetTestsInput{ + path: "somePath", + params: &testParamsInterface{"testData"}, + out: testJSONInterface{"testData"}, + status: 200, + data: `{"data": "testStructData"}`, + }, + doGetTestsOutput{ + data: testJSONInterface{"testData"}, + err: nil, + }, + }, + { + doGetTestsInput{ + status: 404, + data: "Not Found", + }, + doGetTestsOutput{ + err: errors.New("newrelic http error (404 Not Found): Not Found"), + }, + }, + } + testRequest, _ = http.NewRequest("GET", "http://testPath", + strings.NewReader("testBody")) + doRequestTests = []struct { + in doRequestTestsInput + out doRequestTestOutput + }{ + { + doRequestTestsInput{ + req: testRequest, + out: testJSONInterface{"testData"}, + status: 200, + data: `{"data": "testStructData"}`, + }, + doRequestTestOutput{ + data: testJSONInterface{"testData"}, + err: nil, + }, + }, + } + encodeGetParamsTests = []struct { + in map[string]interface{} + out string + }{ + { + map[string]interface{}{ + "testInt": 5, + "testString": "test", + "testStringSlice": []string{"test1", "test2"}, + "testArray": Array{[]string{"test1", "test2"}}, + "testTime": testTime, + }, + "testArray=test1" + + "&testArray=test2" + + "&testInt=5" + + "&testString=test" + + "&testStringSlice=test1%2Ctest2" + + "&testTime=" + testTimeStringEscaped, + }, + { + map[string]interface{}{ + "unexpectedType": map[string]string{"unexpected": "type"}, + }, + "unexpectedType=map%5Bunexpected%3Atype%5D", + }, + } +) + +func (m *testParamsInterface) String() string { + return "data=testData" +} diff --git a/vendor/github.com/yfronto/newrelic/key_transactions.go b/vendor/github.com/yfronto/newrelic/key_transactions.go new file mode 100644 index 00000000..b057909d --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/key_transactions.go @@ -0,0 +1,76 @@ +package newrelic + +import ( + "strconv" + "time" +) + +// KeyTransactionsFilter is the filtering component of KeyTransactionsOptions. +type KeyTransactionsFilter struct { + Name string + IDs []int +} + +// KeyTransactionsOptions provides a filtering mechanism for GetKeyTransactions. +type KeyTransactionsOptions struct { + Filter KeyTransactionsFilter + Page int +} + +// KeyTransactionLinks link KeyTransactions to the objects to which they +// pertain. +type KeyTransactionLinks struct { + Application int `json:"application,omitempty"` +} + +// KeyTransaction represents a New Relic Key Transaction. +type KeyTransaction struct { + ID int `json:"id,omitempty"` + Name string `json:"name,omitempty"` + TransactionName string `json:"transaction_name,omitempty"` + HealthStatus string `json:"health_status,omitempty"` + Reporting bool `json:"reporting,omitempty"` + LastReportedAt time.Time `json:"last_reported_at,omitempty"` + ApplicationSummary ApplicationSummary `json:"application_summary,omitempty"` + EndUserSummary EndUserSummary `json:"end_user_summary,omitempty"` + Links KeyTransactionLinks `json:"links,omitempty"` +} + +// GetKeyTransactions will return a slice of New Relic Key Transactions, +// optionally filtered by KeyTransactionsOptions. +func (c *Client) GetKeyTransactions(opt *KeyTransactionsOptions) ([]KeyTransaction, error) { + resp := &struct { + KeyTransactions []KeyTransaction `json:"key_transactions,omitempty"` + }{} + path := "key_transactions.json" + err := c.doGet(path, opt, resp) + if err != nil { + return nil, err + } + return resp.KeyTransactions, nil +} + +// GetKeyTransaction will return a single New Relic Key Transaction for the +// given id. +func (c *Client) GetKeyTransaction(id int) (*KeyTransaction, error) { + resp := &struct { + KeyTransaction *KeyTransaction `json:"key_transaction,omitempty"` + }{} + path := "key_transactions/" + strconv.Itoa(id) + ".json" + err := c.doGet(path, nil, resp) + if err != nil { + return nil, err + } + return resp.KeyTransaction, nil +} + +func (o *KeyTransactionsOptions) String() string { + if o == nil { + return "" + } + return encodeGetParams(map[string]interface{}{ + "filter[name]": o.Filter.Name, + "filter[ids]": o.Filter.IDs, + "page": o.Page, + }) +} diff --git a/vendor/github.com/yfronto/newrelic/legacy_alert_policies.go b/vendor/github.com/yfronto/newrelic/legacy_alert_policies.go new file mode 100644 index 00000000..423192f0 --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/legacy_alert_policies.go @@ -0,0 +1,78 @@ +package newrelic + +import ( + "strconv" +) + +// LegacyAlertPolicyLinks describes object links for Alert Policies. +type LegacyAlertPolicyLinks struct { + NotificationChannels []int `json:"notification_channels,omitempty"` + Servers []int `json:"servers,omitempty"` +} + +// LegacyAlertPolicyCondition describes conditions that trigger an LegacyAlertPolicy. +type LegacyAlertPolicyCondition struct { + ID int `json:"id,omitempty"` + Enabled bool `json:"enabled,omitempty"` + Severity string `json:"severity,omitempty"` + Threshold float64 `json:"threshold,omitempty"` + TriggerMinutes int `json:"trigger_minutes,omitempty"` + Type string `json:"type,omitempty"` +} + +// LegacyAlertPolicy describes a New Relic alert policy. +type LegacyAlertPolicy struct { + Conditions []LegacyAlertPolicyCondition `json:"conditions,omitempty"` + Enabled bool `json:"enabled,omitempty"` + ID int `json:"id,omitempty"` + Links LegacyAlertPolicyLinks `json:"links,omitempty"` + IncidentPreference string `json:"incident_preference,omitempty"` + Name string `json:"name,omitempty"` +} + +// LegacyAlertPolicyFilter provides filters for LegacyAlertPolicyOptions. +type LegacyAlertPolicyFilter struct { + Name string +} + +// LegacyAlertPolicyOptions is an optional means of filtering when calling +// GetLegacyAlertPolicies. +type LegacyAlertPolicyOptions struct { + Filter LegacyAlertPolicyFilter + Page int +} + +func (o *LegacyAlertPolicyOptions) String() string { + if o == nil { + return "" + } + return encodeGetParams(map[string]interface{}{ + "filter[name]": o.Filter.Name, + "page": o.Page, + }) +} + +// GetLegacyAlertPolicy will return the LegacyAlertPolicy with particular ID. +func (c *Client) GetLegacyAlertPolicy(id int) (*LegacyAlertPolicy, error) { + resp := &struct { + LegacyAlertPolicy *LegacyAlertPolicy `json:"alert_policy,omitempty"` + }{} + err := c.doGet("alert_policies/"+strconv.Itoa(id)+".json", nil, resp) + if err != nil { + return nil, err + } + return resp.LegacyAlertPolicy, nil +} + +// GetLegacyAlertPolicies will return a slice of LegacyAlertPolicy items, +// optionally filtering by LegacyAlertPolicyOptions. +func (c *Client) GetLegacyAlertPolicies(options *LegacyAlertPolicyOptions) ([]LegacyAlertPolicy, error) { + resp := &struct { + LegacyAlertPolicies []LegacyAlertPolicy `json:"alert_policies,omitempty"` + }{} + err := c.doGet("alert_policies.json", options, resp) + if err != nil { + return nil, err + } + return resp.LegacyAlertPolicies, nil +} diff --git a/vendor/github.com/yfronto/newrelic/main.go b/vendor/github.com/yfronto/newrelic/main.go new file mode 100644 index 00000000..874f10c9 --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/main.go @@ -0,0 +1,48 @@ +/* + * NewRelic API for Go + * + * Please see the included LICENSE file for licensing information. + * + * Copyright 2016 by authors and contributors. + */ + +package newrelic + +import ( + "net/http" + "net/url" + "time" +) + +const ( + // defaultAPIURL is the default base URL for New Relic's latest API. + defaultAPIURL = "https://api.newrelic.com/v2/" + // defaultTimeout is the default timeout for the http.Client used. + defaultTimeout = 5 * time.Second +) + +// Client provides a set of methods to interact with the New Relic API. +type Client struct { + apiKey string + httpClient *http.Client + url *url.URL +} + +// NewWithHTTPClient returns a new Client object for interfacing with the New +// Relic API, allowing for override of the http.Client object. +func NewWithHTTPClient(apiKey string, client *http.Client) *Client { + u, err := url.Parse(defaultAPIURL) + if err != nil { + panic(err) + } + return &Client{ + apiKey: apiKey, + httpClient: client, + url: u, + } +} + +// NewClient returns a new Client object for interfacing with the New Relic API. +func NewClient(apiKey string) *Client { + return NewWithHTTPClient(apiKey, &http.Client{Timeout: defaultTimeout}) +} diff --git a/vendor/github.com/yfronto/newrelic/metrics.go b/vendor/github.com/yfronto/newrelic/metrics.go new file mode 100644 index 00000000..fb609a81 --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/metrics.go @@ -0,0 +1,128 @@ +package newrelic + +import ( + "time" +) + +// Metric describes a New Relic metric. +type Metric struct { + Name string `json:"name,omitempty"` + Values []string `json:"values,omitempty"` +} + +// MetricsOptions options allow filtering when getting lists of metric names +// associated with an entity. +type MetricsOptions struct { + Name string + Page int +} + +// MetricTimeslice describes the period to which a Metric pertains. +type MetricTimeslice struct { + From time.Time `json:"from,omitempty"` + To time.Time `json:"to,omitempty"` + Values map[string]float64 `json:"values,omitempty"` +} + +// MetricData describes the data for a particular metric. +type MetricData struct { + Name string `json:"name,omitempty"` + Timeslices []MetricTimeslice `json:"timeslices,omitempty"` +} + +// MetricDataOptions allow filtering when getting data about a particular set +// of New Relic metrics. +type MetricDataOptions struct { + Names Array + Values Array + From time.Time + To time.Time + Period int + Summarize bool + Raw bool +} + +// MetricDataResponse is the response received from New Relic for any request +// for metric data. +type MetricDataResponse struct { + From time.Time `json:"from,omitempty"` + To time.Time `json:"to,omitempty"` + MetricsNotFound []string `json:"metrics_not_found,omitempty"` + MetricsFound []string `json:"metrics_found,omitempty"` + Metrics []MetricData `json:"metrics,omitempty"` +} + +func (o *MetricsOptions) String() string { + if o == nil { + return "" + } + return encodeGetParams(map[string]interface{}{ + "name": o.Name, + "page": o.Page, + }) +} + +func (o *MetricDataOptions) String() string { + if o == nil { + return "" + } + return encodeGetParams(map[string]interface{}{ + "names[]": o.Names, + "values[]": o.Values, + "from": o.From, + "to": o.To, + "period": o.Period, + "summarize": o.Summarize, + "raw": o.Raw, + }) +} + +// MetricClient implements a generic New Relic metrics client. +// This is used as a general client for fetching metric names and data. +type MetricClient struct { + newRelicClient *Client +} + +// NewMetricClient creates and returns a new MetricClient. +func NewMetricClient(newRelicClient *Client) *MetricClient { + return &MetricClient{ + newRelicClient: newRelicClient, + } +} + +// GetMetrics is a generic function for fetching a list of available metrics +// from different parts of New Relic. +// Example: Application metrics, Component metrics, etc. +func (mc *MetricClient) GetMetrics(path string, options *MetricsOptions) ([]Metric, error) { + resp := &struct { + Metrics []Metric `json:"metrics,omitempty"` + }{} + + err := mc.newRelicClient.doGet(path, options, resp) + if err != nil { + return nil, err + } + + return resp.Metrics, nil +} + +// GetMetricData is a generic function for fetching data for a specific metric. +// from different parts of New Relic. +// Example: Application metric data, Component metric data, etc. +func (mc *MetricClient) GetMetricData(path string, names []string, options *MetricDataOptions) (*MetricDataResponse, error) { + resp := &struct { + MetricData MetricDataResponse `json:"metric_data,omitempty"` + }{} + + if options == nil { + options = &MetricDataOptions{} + } + + options.Names = Array{names} + err := mc.newRelicClient.doGet(path, options, resp) + if err != nil { + return nil, err + } + + return &resp.MetricData, nil +} diff --git a/vendor/github.com/yfronto/newrelic/mobile_application_metrics.go b/vendor/github.com/yfronto/newrelic/mobile_application_metrics.go new file mode 100644 index 00000000..c1a905aa --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/mobile_application_metrics.go @@ -0,0 +1,36 @@ +package newrelic + +import ( + "fmt" +) + +// GetMobileApplicationMetrics will return a slice of Metric items for a +// particular MobileAplication ID, optionally filtering by +// MetricsOptions. +func (c *Client) GetMobileApplicationMetrics(id int, options *MetricsOptions) ([]Metric, error) { + mc := NewMetricClient(c) + + return mc.GetMetrics( + fmt.Sprintf( + "mobile_applications/%d/metrics.json", + id, + ), + options, + ) +} + +// GetMobileApplicationMetricData will return all metric data for a particular +// MobileAplication and slice of metric names, optionally filtered by +// MetricDataOptions. +func (c *Client) GetMobileApplicationMetricData(id int, names []string, options *MetricDataOptions) (*MetricDataResponse, error) { + mc := NewMetricClient(c) + + return mc.GetMetricData( + fmt.Sprintf( + "mobile_applications/%d/metrics/data.json", + id, + ), + names, + options, + ) +} diff --git a/vendor/github.com/yfronto/newrelic/mobile_applications.go b/vendor/github.com/yfronto/newrelic/mobile_applications.go new file mode 100644 index 00000000..0df108d7 --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/mobile_applications.go @@ -0,0 +1,61 @@ +package newrelic + +import ( + "strconv" +) + +// MobileApplicationSummary describes an Application's host. +type MobileApplicationSummary struct { + ActiveUsers int `json:"active_users,omitempty"` + LaunchCount int `json:"launch_count,omitempty"` + Throughput float64 `json:"throughput,omitempty"` + ResponseTime float64 `json:"response_time,omitempty"` + CallsPerSession float64 `json:"calls_per_session,omitempty"` + InteractionTime float64 `json:"interaction_time,omitempty"` + FailedCallRate float64 `json:"failed_call_rate,omitempty"` + RemoteErrorRate float64 `json:"remote_error_rate"` +} + +// MobileApplicationCrashSummary describes a MobileApplication's crash data. +type MobileApplicationCrashSummary struct { + SupportsCrashData bool `json:"supports_crash_data,omitempty"` + UnresolvedCrashCount int `json:"unresolved_crash_count,omitempty"` + CrashCount int `json:"crash_count,omitempty"` + CrashRate float64 `json:"crash_rate,omitempty"` +} + +// MobileApplication describes a New Relic Application Host. +type MobileApplication struct { + ID int `json:"id,omitempty"` + Name string `json:"name,omitempty"` + HealthStatus string `json:"health_status,omitempty"` + Reporting bool `json:"reporting,omitempty"` + MobileSummary MobileApplicationSummary `json:"mobile_summary,omitempty"` + CrashSummary MobileApplicationCrashSummary `json:"crash_summary,omitempty"` +} + +// GetMobileApplications returns a slice of New Relic Mobile Applications. +func (c *Client) GetMobileApplications() ([]MobileApplication, error) { + resp := &struct { + Applications []MobileApplication `json:"applications,omitempty"` + }{} + path := "mobile_applications.json" + err := c.doGet(path, nil, resp) + if err != nil { + return nil, err + } + return resp.Applications, nil +} + +// GetMobileApplication returns a single Mobile Application with the id. +func (c *Client) GetMobileApplication(id int) (*MobileApplication, error) { + resp := &struct { + Application MobileApplication `json:"application,omitempty"` + }{} + path := "mobile_applications/" + strconv.Itoa(id) + ".json" + err := c.doGet(path, nil, resp) + if err != nil { + return nil, err + } + return &resp.Application, nil +} diff --git a/vendor/github.com/yfronto/newrelic/notification_channels.go b/vendor/github.com/yfronto/newrelic/notification_channels.go new file mode 100644 index 00000000..8a64c17d --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/notification_channels.go @@ -0,0 +1,78 @@ +package newrelic + +import ( + "strconv" +) + +// NotificationChannelLinks describes object links for notification channels. +type NotificationChannelLinks struct { + NotificationChannels []int `json:"notification_channels,omitempty"` + User int `json:"user,omitempty"` +} + +// NotificationChannel describes a New Relic notification channel. +type NotificationChannel struct { + ID int `json:"id,omitempty"` + Type string `json:"type,omitempty"` + DowntimeOnly bool `json:"downtime_only,omitempty"` + URL string `json:"url,omitempty"` + Name string `json:"name,omitempty"` + Description string `json:"description,omitempty"` + Email string `json:"email,omitempty"` + Subdomain string `json:"subdomain,omitempty"` + Service string `json:"service,omitempty"` + MobileAlerts bool `json:"mobile_alerts,omitempty"` + EmailAlerts bool `json:"email_alerts,omitempty"` + Room string `json:"room,omitempty"` + Links NotificationChannelLinks `json:"links,omitempty"` +} + +// NotificationChannelsFilter provides filters for +// NotificationChannelsOptions. +type NotificationChannelsFilter struct { + Type []string + IDs []int +} + +// NotificationChannelsOptions is an optional means of filtering when calling +// GetNotificationChannels. +type NotificationChannelsOptions struct { + Filter NotificationChannelsFilter + Page int +} + +func (o *NotificationChannelsOptions) String() string { + if o == nil { + return "" + } + return encodeGetParams(map[string]interface{}{ + "filter[type]": o.Filter.Type, + "filter[ids]": o.Filter.IDs, + "page": o.Page, + }) +} + +// GetNotificationChannel will return the NotificationChannel with particular ID. +func (c *Client) GetNotificationChannel(id int) (*NotificationChannel, error) { + resp := &struct { + NotificationChannel *NotificationChannel `json:"notification_channel,omitempty"` + }{} + err := c.doGet("notification_channels/"+strconv.Itoa(id)+".json", nil, resp) + if err != nil { + return nil, err + } + return resp.NotificationChannel, nil +} + +// GetNotificationChannels will return a slice of NotificationChannel items, +// optionally filtering by NotificationChannelsOptions. +func (c *Client) GetNotificationChannels(options *NotificationChannelsOptions) ([]NotificationChannel, error) { + resp := &struct { + NotificationChannels []NotificationChannel `json:"notification_channels,omitempty"` + }{} + err := c.doGet("notification_channels.json", options, resp) + if err != nil { + return nil, err + } + return resp.NotificationChannels, nil +} diff --git a/vendor/github.com/yfronto/newrelic/server_metrics.go b/vendor/github.com/yfronto/newrelic/server_metrics.go new file mode 100644 index 00000000..0387e696 --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/server_metrics.go @@ -0,0 +1,34 @@ +package newrelic + +import ( + "fmt" +) + +// GetServerMetrics will return a slice of Metric items for a particular +// Server ID, optionally filtering by MetricsOptions. +func (c *Client) GetServerMetrics(id int, options *MetricsOptions) ([]Metric, error) { + mc := NewMetricClient(c) + + return mc.GetMetrics( + fmt.Sprintf( + "servers/%d/metrics.json", + id, + ), + options, + ) +} + +// GetServerMetricData will return all metric data for a particular Server and +// slice of metric names, optionally filtered by MetricDataOptions. +func (c *Client) GetServerMetricData(id int, names []string, options *MetricDataOptions) (*MetricDataResponse, error) { + mc := NewMetricClient(c) + + return mc.GetMetricData( + fmt.Sprintf( + "servers/%d/metrics/data.json", + id, + ), + names, + options, + ) +} diff --git a/vendor/github.com/yfronto/newrelic/servers.go b/vendor/github.com/yfronto/newrelic/servers.go new file mode 100644 index 00000000..04cf0ae4 --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/servers.go @@ -0,0 +1,92 @@ +package newrelic + +import ( + "strconv" + "time" +) + +// ServersFilter is the filtering component of ServersOptions. +type ServersFilter struct { + Name string + Host string + IDs []int + Labels []string + Reported bool +} + +// ServersOptions provides a filtering mechanism for GetServers. +type ServersOptions struct { + Filter ServersFilter + Page int +} + +// ServerSummary describes the summary component of a Server. +type ServerSummary struct { + CPU float64 `json:"cpu,omitempty"` + CPUStolen float64 `json:"cpu_stolen,omitempty"` + DiskIO float64 `json:"disk_io,omitempty"` + Memory float64 `json:"memory,omitempty"` + MemoryUsed int64 `json:"memory_used,omitempty"` + MemoryTotal int64 `json:"memory_total,omitempty"` + FullestDisk float64 `json:"fullest_disk,omitempty"` + FullestDiskFree int64 `json:"fullest_disk_free,omitempty"` +} + +// ServerLinks link Servers to the objects to which they pertain. +type ServerLinks struct { + AlertPolicy int `json:"alert_policy,omitempty"` +} + +// Server represents a New Relic Server. +type Server struct { + ID int `json:"id,omitempty"` + AccountID int `json:"account_id,omitempty"` + Name string `json:"name,omitempty"` + Host string `json:"host,omitempty"` + HealthStatus string `json:"health_status,omitempty"` + Reporting bool `json:"reporting,omitempty"` + LastReportedAt time.Time `json:"last_reported_at,omitempty"` + Summary ServerSummary `json:"summary,omitempty"` + Links ServerLinks `json:"links,omitempty"` +} + +// GetServers will return a slice of New Relic Servers, optionally filtered by +// ServerOptions. +func (c *Client) GetServers(opt *ServersOptions) ([]Server, error) { + resp := &struct { + Servers []Server `json:"servers,omitempty"` + }{} + path := "servers.json" + err := c.doGet(path, opt, resp) + if err != nil { + return nil, err + } + return resp.Servers, nil +} + +// GetServer will return a single New Relic Server for the given id. +func (c *Client) GetServer(id int) (*Server, error) { + resp := &struct { + Server *Server `json:"server,omitempty"` + }{} + path := "servers/" + strconv.Itoa(id) + ".json" + err := c.doGet(path, nil, resp) + if err != nil { + return nil, err + } + return resp.Server, nil +} + +func (o *ServersOptions) String() string { + if o == nil { + return "" + } + return encodeGetParams(map[string]interface{}{ + "filter[name]": o.Filter.Name, + "filter[host]": o.Filter.Host, + "filter[ids]": o.Filter.IDs, + "filter[labels]": o.Filter.Labels, + "filter[reported]": o.Filter.Reported, + "page": o.Page, + }) +} diff --git a/vendor/github.com/yfronto/newrelic/usages.go b/vendor/github.com/yfronto/newrelic/usages.go new file mode 100644 index 00000000..97b2f90b --- /dev/null +++ b/vendor/github.com/yfronto/newrelic/usages.go @@ -0,0 +1,49 @@ +package newrelic + +import ( + "time" +) + +// Usage describes usage over a single time period. +type Usage struct { + From time.Time `json"from,omitempty"` + To time.Time `json:"to,omitempty"` + Usage int `json:"usage,omitempty"` +} + +// UsageData represents usage data for a product over a time frame, including +// a slice of Usages. +type UsageData struct { + Product string `json:"product,omitempty"` + From time.Time `json:"from,omitempty"` + To time.Time `json:"to,omitempty"` + Unit string `json:"unit,omitempty"` + Usages []Usage `json:"usages,omitempty"` +} + +type usageParams struct { + Start time.Time + End time.Time + IncludeSubaccount bool +} + +func (o *usageParams) String() string { + return encodeGetParams(map[string]interface{}{ + "start_date": o.Start.Format("2006-01-02"), + "end_date": o.End.Format("2006-01-02"), + "include_subaccounts": o.IncludeSubaccount, + }) +} + +// GetUsages will return usage for a product in a given time frame. +func (c *Client) GetUsages(product string, start, end time.Time, includeSubaccounts bool) (*UsageData, error) { + resp := &struct { + UsageData *UsageData `json:"usage_data,omitempty"` + }{} + options := &usageParams{start, end, includeSubaccounts} + err := c.doGet("usages/"+product+".json", options, resp) + if err != nil { + return nil, err + } + return resp.UsageData, nil +} diff --git a/vendor/golang.org/x/net/AUTHORS b/vendor/golang.org/x/net/AUTHORS new file mode 100644 index 00000000..15167cd7 --- /dev/null +++ b/vendor/golang.org/x/net/AUTHORS @@ -0,0 +1,3 @@ +# This source code refers to The Go Authors for copyright purposes. +# The master list of authors is in the main Go distribution, +# visible at http://tip.golang.org/AUTHORS. diff --git a/vendor/golang.org/x/net/CONTRIBUTORS b/vendor/golang.org/x/net/CONTRIBUTORS new file mode 100644 index 00000000..1c4577e9 --- /dev/null +++ b/vendor/golang.org/x/net/CONTRIBUTORS @@ -0,0 +1,3 @@ +# This source code was written by the Go contributors. +# The master list of contributors is in the main Go distribution, +# visible at http://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/golang.org/x/net/LICENSE b/vendor/golang.org/x/net/LICENSE new file mode 100644 index 00000000..6a66aea5 --- /dev/null +++ b/vendor/golang.org/x/net/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/golang.org/x/net/PATENTS b/vendor/golang.org/x/net/PATENTS new file mode 100644 index 00000000..73309904 --- /dev/null +++ b/vendor/golang.org/x/net/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. diff --git a/vendor/golang.org/x/net/context/context.go b/vendor/golang.org/x/net/context/context.go new file mode 100644 index 00000000..a3c021d3 --- /dev/null +++ b/vendor/golang.org/x/net/context/context.go @@ -0,0 +1,56 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package context defines the Context type, which carries deadlines, +// cancelation signals, and other request-scoped values across API boundaries +// and between processes. +// As of Go 1.7 this package is available in the standard library under the +// name context. https://golang.org/pkg/context. +// +// Incoming requests to a server should create a Context, and outgoing calls to +// servers should accept a Context. The chain of function calls between must +// propagate the Context, optionally replacing it with a modified copy created +// using WithDeadline, WithTimeout, WithCancel, or WithValue. +// +// Programs that use Contexts should follow these rules to keep interfaces +// consistent across packages and enable static analysis tools to check context +// propagation: +// +// Do not store Contexts inside a struct type; instead, pass a Context +// explicitly to each function that needs it. The Context should be the first +// parameter, typically named ctx: +// +// func DoSomething(ctx context.Context, arg Arg) error { +// // ... use ctx ... +// } +// +// Do not pass a nil Context, even if a function permits it. Pass context.TODO +// if you are unsure about which Context to use. +// +// Use context Values only for request-scoped data that transits processes and +// APIs, not for passing optional parameters to functions. +// +// The same Context may be passed to functions running in different goroutines; +// Contexts are safe for simultaneous use by multiple goroutines. +// +// See http://blog.golang.org/context for example code for a server that uses +// Contexts. +package context // import "golang.org/x/net/context" + +// Background returns a non-nil, empty Context. It is never canceled, has no +// values, and has no deadline. It is typically used by the main function, +// initialization, and tests, and as the top-level Context for incoming +// requests. +func Background() Context { + return background +} + +// TODO returns a non-nil, empty Context. Code should use context.TODO when +// it's unclear which Context to use or it is not yet available (because the +// surrounding function has not yet been extended to accept a Context +// parameter). TODO is recognized by static analysis tools that determine +// whether Contexts are propagated correctly in a program. +func TODO() Context { + return todo +} diff --git a/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go b/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go new file mode 100644 index 00000000..606cf1f9 --- /dev/null +++ b/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go @@ -0,0 +1,74 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.7 + +// Package ctxhttp provides helper functions for performing context-aware HTTP requests. +package ctxhttp // import "golang.org/x/net/context/ctxhttp" + +import ( + "io" + "net/http" + "net/url" + "strings" + + "golang.org/x/net/context" +) + +// Do sends an HTTP request with the provided http.Client and returns +// an HTTP response. +// +// If the client is nil, http.DefaultClient is used. +// +// The provided ctx must be non-nil. If it is canceled or times out, +// ctx.Err() will be returned. +func Do(ctx context.Context, client *http.Client, req *http.Request) (*http.Response, error) { + if client == nil { + client = http.DefaultClient + } + resp, err := client.Do(req.WithContext(ctx)) + // If we got an error, and the context has been canceled, + // the context's error is probably more useful. + if err != nil { + select { + case <-ctx.Done(): + err = ctx.Err() + default: + } + } + return resp, err +} + +// Get issues a GET request via the Do function. +func Get(ctx context.Context, client *http.Client, url string) (*http.Response, error) { + req, err := http.NewRequest("GET", url, nil) + if err != nil { + return nil, err + } + return Do(ctx, client, req) +} + +// Head issues a HEAD request via the Do function. +func Head(ctx context.Context, client *http.Client, url string) (*http.Response, error) { + req, err := http.NewRequest("HEAD", url, nil) + if err != nil { + return nil, err + } + return Do(ctx, client, req) +} + +// Post issues a POST request via the Do function. +func Post(ctx context.Context, client *http.Client, url string, bodyType string, body io.Reader) (*http.Response, error) { + req, err := http.NewRequest("POST", url, body) + if err != nil { + return nil, err + } + req.Header.Set("Content-Type", bodyType) + return Do(ctx, client, req) +} + +// PostForm issues a POST request via the Do function. +func PostForm(ctx context.Context, client *http.Client, url string, data url.Values) (*http.Response, error) { + return Post(ctx, client, url, "application/x-www-form-urlencoded", strings.NewReader(data.Encode())) +} diff --git a/vendor/golang.org/x/net/context/ctxhttp/ctxhttp_pre17.go b/vendor/golang.org/x/net/context/ctxhttp/ctxhttp_pre17.go new file mode 100644 index 00000000..926870cc --- /dev/null +++ b/vendor/golang.org/x/net/context/ctxhttp/ctxhttp_pre17.go @@ -0,0 +1,147 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.7 + +package ctxhttp // import "golang.org/x/net/context/ctxhttp" + +import ( + "io" + "net/http" + "net/url" + "strings" + + "golang.org/x/net/context" +) + +func nop() {} + +var ( + testHookContextDoneBeforeHeaders = nop + testHookDoReturned = nop + testHookDidBodyClose = nop +) + +// Do sends an HTTP request with the provided http.Client and returns an HTTP response. +// If the client is nil, http.DefaultClient is used. +// If the context is canceled or times out, ctx.Err() will be returned. +func Do(ctx context.Context, client *http.Client, req *http.Request) (*http.Response, error) { + if client == nil { + client = http.DefaultClient + } + + // TODO(djd): Respect any existing value of req.Cancel. + cancel := make(chan struct{}) + req.Cancel = cancel + + type responseAndError struct { + resp *http.Response + err error + } + result := make(chan responseAndError, 1) + + // Make local copies of test hooks closed over by goroutines below. + // Prevents data races in tests. + testHookDoReturned := testHookDoReturned + testHookDidBodyClose := testHookDidBodyClose + + go func() { + resp, err := client.Do(req) + testHookDoReturned() + result <- responseAndError{resp, err} + }() + + var resp *http.Response + + select { + case <-ctx.Done(): + testHookContextDoneBeforeHeaders() + close(cancel) + // Clean up after the goroutine calling client.Do: + go func() { + if r := <-result; r.resp != nil { + testHookDidBodyClose() + r.resp.Body.Close() + } + }() + return nil, ctx.Err() + case r := <-result: + var err error + resp, err = r.resp, r.err + if err != nil { + return resp, err + } + } + + c := make(chan struct{}) + go func() { + select { + case <-ctx.Done(): + close(cancel) + case <-c: + // The response's Body is closed. + } + }() + resp.Body = ¬ifyingReader{resp.Body, c} + + return resp, nil +} + +// Get issues a GET request via the Do function. +func Get(ctx context.Context, client *http.Client, url string) (*http.Response, error) { + req, err := http.NewRequest("GET", url, nil) + if err != nil { + return nil, err + } + return Do(ctx, client, req) +} + +// Head issues a HEAD request via the Do function. +func Head(ctx context.Context, client *http.Client, url string) (*http.Response, error) { + req, err := http.NewRequest("HEAD", url, nil) + if err != nil { + return nil, err + } + return Do(ctx, client, req) +} + +// Post issues a POST request via the Do function. +func Post(ctx context.Context, client *http.Client, url string, bodyType string, body io.Reader) (*http.Response, error) { + req, err := http.NewRequest("POST", url, body) + if err != nil { + return nil, err + } + req.Header.Set("Content-Type", bodyType) + return Do(ctx, client, req) +} + +// PostForm issues a POST request via the Do function. +func PostForm(ctx context.Context, client *http.Client, url string, data url.Values) (*http.Response, error) { + return Post(ctx, client, url, "application/x-www-form-urlencoded", strings.NewReader(data.Encode())) +} + +// notifyingReader is an io.ReadCloser that closes the notify channel after +// Close is called or a Read fails on the underlying ReadCloser. +type notifyingReader struct { + io.ReadCloser + notify chan<- struct{} +} + +func (r *notifyingReader) Read(p []byte) (int, error) { + n, err := r.ReadCloser.Read(p) + if err != nil && r.notify != nil { + close(r.notify) + r.notify = nil + } + return n, err +} + +func (r *notifyingReader) Close() error { + err := r.ReadCloser.Close() + if r.notify != nil { + close(r.notify) + r.notify = nil + } + return err +} diff --git a/vendor/golang.org/x/net/context/go17.go b/vendor/golang.org/x/net/context/go17.go new file mode 100644 index 00000000..d20f52b7 --- /dev/null +++ b/vendor/golang.org/x/net/context/go17.go @@ -0,0 +1,72 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.7 + +package context + +import ( + "context" // standard library's context, as of Go 1.7 + "time" +) + +var ( + todo = context.TODO() + background = context.Background() +) + +// Canceled is the error returned by Context.Err when the context is canceled. +var Canceled = context.Canceled + +// DeadlineExceeded is the error returned by Context.Err when the context's +// deadline passes. +var DeadlineExceeded = context.DeadlineExceeded + +// WithCancel returns a copy of parent with a new Done channel. The returned +// context's Done channel is closed when the returned cancel function is called +// or when the parent context's Done channel is closed, whichever happens first. +// +// Canceling this context releases resources associated with it, so code should +// call cancel as soon as the operations running in this Context complete. +func WithCancel(parent Context) (ctx Context, cancel CancelFunc) { + ctx, f := context.WithCancel(parent) + return ctx, CancelFunc(f) +} + +// WithDeadline returns a copy of the parent context with the deadline adjusted +// to be no later than d. If the parent's deadline is already earlier than d, +// WithDeadline(parent, d) is semantically equivalent to parent. The returned +// context's Done channel is closed when the deadline expires, when the returned +// cancel function is called, or when the parent context's Done channel is +// closed, whichever happens first. +// +// Canceling this context releases resources associated with it, so code should +// call cancel as soon as the operations running in this Context complete. +func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) { + ctx, f := context.WithDeadline(parent, deadline) + return ctx, CancelFunc(f) +} + +// WithTimeout returns WithDeadline(parent, time.Now().Add(timeout)). +// +// Canceling this context releases resources associated with it, so code should +// call cancel as soon as the operations running in this Context complete: +// +// func slowOperationWithTimeout(ctx context.Context) (Result, error) { +// ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond) +// defer cancel() // releases resources if slowOperation completes before timeout elapses +// return slowOperation(ctx) +// } +func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) { + return WithDeadline(parent, time.Now().Add(timeout)) +} + +// WithValue returns a copy of parent in which the value associated with key is +// val. +// +// Use context Values only for request-scoped data that transits processes and +// APIs, not for passing optional parameters to functions. +func WithValue(parent Context, key interface{}, val interface{}) Context { + return context.WithValue(parent, key, val) +} diff --git a/vendor/golang.org/x/net/context/go19.go b/vendor/golang.org/x/net/context/go19.go new file mode 100644 index 00000000..d88bd1db --- /dev/null +++ b/vendor/golang.org/x/net/context/go19.go @@ -0,0 +1,20 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.9 + +package context + +import "context" // standard library's context, as of Go 1.7 + +// A Context carries a deadline, a cancelation signal, and other values across +// API boundaries. +// +// Context's methods may be called by multiple goroutines simultaneously. +type Context = context.Context + +// A CancelFunc tells an operation to abandon its work. +// A CancelFunc does not wait for the work to stop. +// After the first call, subsequent calls to a CancelFunc do nothing. +type CancelFunc = context.CancelFunc diff --git a/vendor/golang.org/x/net/context/pre_go17.go b/vendor/golang.org/x/net/context/pre_go17.go new file mode 100644 index 00000000..0f35592d --- /dev/null +++ b/vendor/golang.org/x/net/context/pre_go17.go @@ -0,0 +1,300 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.7 + +package context + +import ( + "errors" + "fmt" + "sync" + "time" +) + +// An emptyCtx is never canceled, has no values, and has no deadline. It is not +// struct{}, since vars of this type must have distinct addresses. +type emptyCtx int + +func (*emptyCtx) Deadline() (deadline time.Time, ok bool) { + return +} + +func (*emptyCtx) Done() <-chan struct{} { + return nil +} + +func (*emptyCtx) Err() error { + return nil +} + +func (*emptyCtx) Value(key interface{}) interface{} { + return nil +} + +func (e *emptyCtx) String() string { + switch e { + case background: + return "context.Background" + case todo: + return "context.TODO" + } + return "unknown empty Context" +} + +var ( + background = new(emptyCtx) + todo = new(emptyCtx) +) + +// Canceled is the error returned by Context.Err when the context is canceled. +var Canceled = errors.New("context canceled") + +// DeadlineExceeded is the error returned by Context.Err when the context's +// deadline passes. +var DeadlineExceeded = errors.New("context deadline exceeded") + +// WithCancel returns a copy of parent with a new Done channel. The returned +// context's Done channel is closed when the returned cancel function is called +// or when the parent context's Done channel is closed, whichever happens first. +// +// Canceling this context releases resources associated with it, so code should +// call cancel as soon as the operations running in this Context complete. +func WithCancel(parent Context) (ctx Context, cancel CancelFunc) { + c := newCancelCtx(parent) + propagateCancel(parent, c) + return c, func() { c.cancel(true, Canceled) } +} + +// newCancelCtx returns an initialized cancelCtx. +func newCancelCtx(parent Context) *cancelCtx { + return &cancelCtx{ + Context: parent, + done: make(chan struct{}), + } +} + +// propagateCancel arranges for child to be canceled when parent is. +func propagateCancel(parent Context, child canceler) { + if parent.Done() == nil { + return // parent is never canceled + } + if p, ok := parentCancelCtx(parent); ok { + p.mu.Lock() + if p.err != nil { + // parent has already been canceled + child.cancel(false, p.err) + } else { + if p.children == nil { + p.children = make(map[canceler]bool) + } + p.children[child] = true + } + p.mu.Unlock() + } else { + go func() { + select { + case <-parent.Done(): + child.cancel(false, parent.Err()) + case <-child.Done(): + } + }() + } +} + +// parentCancelCtx follows a chain of parent references until it finds a +// *cancelCtx. This function understands how each of the concrete types in this +// package represents its parent. +func parentCancelCtx(parent Context) (*cancelCtx, bool) { + for { + switch c := parent.(type) { + case *cancelCtx: + return c, true + case *timerCtx: + return c.cancelCtx, true + case *valueCtx: + parent = c.Context + default: + return nil, false + } + } +} + +// removeChild removes a context from its parent. +func removeChild(parent Context, child canceler) { + p, ok := parentCancelCtx(parent) + if !ok { + return + } + p.mu.Lock() + if p.children != nil { + delete(p.children, child) + } + p.mu.Unlock() +} + +// A canceler is a context type that can be canceled directly. The +// implementations are *cancelCtx and *timerCtx. +type canceler interface { + cancel(removeFromParent bool, err error) + Done() <-chan struct{} +} + +// A cancelCtx can be canceled. When canceled, it also cancels any children +// that implement canceler. +type cancelCtx struct { + Context + + done chan struct{} // closed by the first cancel call. + + mu sync.Mutex + children map[canceler]bool // set to nil by the first cancel call + err error // set to non-nil by the first cancel call +} + +func (c *cancelCtx) Done() <-chan struct{} { + return c.done +} + +func (c *cancelCtx) Err() error { + c.mu.Lock() + defer c.mu.Unlock() + return c.err +} + +func (c *cancelCtx) String() string { + return fmt.Sprintf("%v.WithCancel", c.Context) +} + +// cancel closes c.done, cancels each of c's children, and, if +// removeFromParent is true, removes c from its parent's children. +func (c *cancelCtx) cancel(removeFromParent bool, err error) { + if err == nil { + panic("context: internal error: missing cancel error") + } + c.mu.Lock() + if c.err != nil { + c.mu.Unlock() + return // already canceled + } + c.err = err + close(c.done) + for child := range c.children { + // NOTE: acquiring the child's lock while holding parent's lock. + child.cancel(false, err) + } + c.children = nil + c.mu.Unlock() + + if removeFromParent { + removeChild(c.Context, c) + } +} + +// WithDeadline returns a copy of the parent context with the deadline adjusted +// to be no later than d. If the parent's deadline is already earlier than d, +// WithDeadline(parent, d) is semantically equivalent to parent. The returned +// context's Done channel is closed when the deadline expires, when the returned +// cancel function is called, or when the parent context's Done channel is +// closed, whichever happens first. +// +// Canceling this context releases resources associated with it, so code should +// call cancel as soon as the operations running in this Context complete. +func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) { + if cur, ok := parent.Deadline(); ok && cur.Before(deadline) { + // The current deadline is already sooner than the new one. + return WithCancel(parent) + } + c := &timerCtx{ + cancelCtx: newCancelCtx(parent), + deadline: deadline, + } + propagateCancel(parent, c) + d := deadline.Sub(time.Now()) + if d <= 0 { + c.cancel(true, DeadlineExceeded) // deadline has already passed + return c, func() { c.cancel(true, Canceled) } + } + c.mu.Lock() + defer c.mu.Unlock() + if c.err == nil { + c.timer = time.AfterFunc(d, func() { + c.cancel(true, DeadlineExceeded) + }) + } + return c, func() { c.cancel(true, Canceled) } +} + +// A timerCtx carries a timer and a deadline. It embeds a cancelCtx to +// implement Done and Err. It implements cancel by stopping its timer then +// delegating to cancelCtx.cancel. +type timerCtx struct { + *cancelCtx + timer *time.Timer // Under cancelCtx.mu. + + deadline time.Time +} + +func (c *timerCtx) Deadline() (deadline time.Time, ok bool) { + return c.deadline, true +} + +func (c *timerCtx) String() string { + return fmt.Sprintf("%v.WithDeadline(%s [%s])", c.cancelCtx.Context, c.deadline, c.deadline.Sub(time.Now())) +} + +func (c *timerCtx) cancel(removeFromParent bool, err error) { + c.cancelCtx.cancel(false, err) + if removeFromParent { + // Remove this timerCtx from its parent cancelCtx's children. + removeChild(c.cancelCtx.Context, c) + } + c.mu.Lock() + if c.timer != nil { + c.timer.Stop() + c.timer = nil + } + c.mu.Unlock() +} + +// WithTimeout returns WithDeadline(parent, time.Now().Add(timeout)). +// +// Canceling this context releases resources associated with it, so code should +// call cancel as soon as the operations running in this Context complete: +// +// func slowOperationWithTimeout(ctx context.Context) (Result, error) { +// ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond) +// defer cancel() // releases resources if slowOperation completes before timeout elapses +// return slowOperation(ctx) +// } +func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) { + return WithDeadline(parent, time.Now().Add(timeout)) +} + +// WithValue returns a copy of parent in which the value associated with key is +// val. +// +// Use context Values only for request-scoped data that transits processes and +// APIs, not for passing optional parameters to functions. +func WithValue(parent Context, key interface{}, val interface{}) Context { + return &valueCtx{parent, key, val} +} + +// A valueCtx carries a key-value pair. It implements Value for that key and +// delegates all other calls to the embedded Context. +type valueCtx struct { + Context + key, val interface{} +} + +func (c *valueCtx) String() string { + return fmt.Sprintf("%v.WithValue(%#v, %#v)", c.Context, c.key, c.val) +} + +func (c *valueCtx) Value(key interface{}) interface{} { + if c.key == key { + return c.val + } + return c.Context.Value(key) +} diff --git a/vendor/golang.org/x/net/context/pre_go19.go b/vendor/golang.org/x/net/context/pre_go19.go new file mode 100644 index 00000000..b105f80b --- /dev/null +++ b/vendor/golang.org/x/net/context/pre_go19.go @@ -0,0 +1,109 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.9 + +package context + +import "time" + +// A Context carries a deadline, a cancelation signal, and other values across +// API boundaries. +// +// Context's methods may be called by multiple goroutines simultaneously. +type Context interface { + // Deadline returns the time when work done on behalf of this context + // should be canceled. Deadline returns ok==false when no deadline is + // set. Successive calls to Deadline return the same results. + Deadline() (deadline time.Time, ok bool) + + // Done returns a channel that's closed when work done on behalf of this + // context should be canceled. Done may return nil if this context can + // never be canceled. Successive calls to Done return the same value. + // + // WithCancel arranges for Done to be closed when cancel is called; + // WithDeadline arranges for Done to be closed when the deadline + // expires; WithTimeout arranges for Done to be closed when the timeout + // elapses. + // + // Done is provided for use in select statements: + // + // // Stream generates values with DoSomething and sends them to out + // // until DoSomething returns an error or ctx.Done is closed. + // func Stream(ctx context.Context, out chan<- Value) error { + // for { + // v, err := DoSomething(ctx) + // if err != nil { + // return err + // } + // select { + // case <-ctx.Done(): + // return ctx.Err() + // case out <- v: + // } + // } + // } + // + // See http://blog.golang.org/pipelines for more examples of how to use + // a Done channel for cancelation. + Done() <-chan struct{} + + // Err returns a non-nil error value after Done is closed. Err returns + // Canceled if the context was canceled or DeadlineExceeded if the + // context's deadline passed. No other values for Err are defined. + // After Done is closed, successive calls to Err return the same value. + Err() error + + // Value returns the value associated with this context for key, or nil + // if no value is associated with key. Successive calls to Value with + // the same key returns the same result. + // + // Use context values only for request-scoped data that transits + // processes and API boundaries, not for passing optional parameters to + // functions. + // + // A key identifies a specific value in a Context. Functions that wish + // to store values in Context typically allocate a key in a global + // variable then use that key as the argument to context.WithValue and + // Context.Value. A key can be any type that supports equality; + // packages should define keys as an unexported type to avoid + // collisions. + // + // Packages that define a Context key should provide type-safe accessors + // for the values stores using that key: + // + // // Package user defines a User type that's stored in Contexts. + // package user + // + // import "golang.org/x/net/context" + // + // // User is the type of value stored in the Contexts. + // type User struct {...} + // + // // key is an unexported type for keys defined in this package. + // // This prevents collisions with keys defined in other packages. + // type key int + // + // // userKey is the key for user.User values in Contexts. It is + // // unexported; clients use user.NewContext and user.FromContext + // // instead of using this key directly. + // var userKey key = 0 + // + // // NewContext returns a new Context that carries value u. + // func NewContext(ctx context.Context, u *User) context.Context { + // return context.WithValue(ctx, userKey, u) + // } + // + // // FromContext returns the User value stored in ctx, if any. + // func FromContext(ctx context.Context) (*User, bool) { + // u, ok := ctx.Value(userKey).(*User) + // return u, ok + // } + Value(key interface{}) interface{} +} + +// A CancelFunc tells an operation to abandon its work. +// A CancelFunc does not wait for the work to stop. +// After the first call, subsequent calls to a CancelFunc do nothing. +type CancelFunc func() diff --git a/vendor/golang.org/x/oauth2/.travis.yml b/vendor/golang.org/x/oauth2/.travis.yml new file mode 100644 index 00000000..fa139db2 --- /dev/null +++ b/vendor/golang.org/x/oauth2/.travis.yml @@ -0,0 +1,13 @@ +language: go + +go: + - tip + +install: + - export GOPATH="$HOME/gopath" + - mkdir -p "$GOPATH/src/golang.org/x" + - mv "$TRAVIS_BUILD_DIR" "$GOPATH/src/golang.org/x/oauth2" + - go get -v -t -d golang.org/x/oauth2/... + +script: + - go test -v golang.org/x/oauth2/... diff --git a/vendor/golang.org/x/oauth2/AUTHORS b/vendor/golang.org/x/oauth2/AUTHORS new file mode 100644 index 00000000..15167cd7 --- /dev/null +++ b/vendor/golang.org/x/oauth2/AUTHORS @@ -0,0 +1,3 @@ +# This source code refers to The Go Authors for copyright purposes. +# The master list of authors is in the main Go distribution, +# visible at http://tip.golang.org/AUTHORS. diff --git a/vendor/golang.org/x/oauth2/CONTRIBUTING.md b/vendor/golang.org/x/oauth2/CONTRIBUTING.md new file mode 100644 index 00000000..dfbed62c --- /dev/null +++ b/vendor/golang.org/x/oauth2/CONTRIBUTING.md @@ -0,0 +1,26 @@ +# Contributing to Go + +Go is an open source project. + +It is the work of hundreds of contributors. We appreciate your help! + +## Filing issues + +When [filing an issue](https://github.com/golang/oauth2/issues), make sure to answer these five questions: + +1. What version of Go are you using (`go version`)? +2. What operating system and processor architecture are you using? +3. What did you do? +4. What did you expect to see? +5. What did you see instead? + +General questions should go to the [golang-nuts mailing list](https://groups.google.com/group/golang-nuts) instead of the issue tracker. +The gophers there will answer or ask you to file an issue if you've tripped over a bug. + +## Contributing code + +Please read the [Contribution Guidelines](https://golang.org/doc/contribute.html) +before sending patches. + +Unless otherwise noted, the Go source files are distributed under +the BSD-style license found in the LICENSE file. diff --git a/vendor/golang.org/x/oauth2/CONTRIBUTORS b/vendor/golang.org/x/oauth2/CONTRIBUTORS new file mode 100644 index 00000000..1c4577e9 --- /dev/null +++ b/vendor/golang.org/x/oauth2/CONTRIBUTORS @@ -0,0 +1,3 @@ +# This source code was written by the Go contributors. +# The master list of contributors is in the main Go distribution, +# visible at http://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/golang.org/x/oauth2/LICENSE b/vendor/golang.org/x/oauth2/LICENSE new file mode 100644 index 00000000..6a66aea5 --- /dev/null +++ b/vendor/golang.org/x/oauth2/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/golang.org/x/oauth2/README.md b/vendor/golang.org/x/oauth2/README.md new file mode 100644 index 00000000..eb8dcee1 --- /dev/null +++ b/vendor/golang.org/x/oauth2/README.md @@ -0,0 +1,77 @@ +# OAuth2 for Go + +[![Build Status](https://travis-ci.org/golang/oauth2.svg?branch=master)](https://travis-ci.org/golang/oauth2) +[![GoDoc](https://godoc.org/golang.org/x/oauth2?status.svg)](https://godoc.org/golang.org/x/oauth2) + +oauth2 package contains a client implementation for OAuth 2.0 spec. + +## Installation + +~~~~ +go get golang.org/x/oauth2 +~~~~ + +Or you can manually git clone the repository to +`$(go env GOPATH)/src/golang.org/x/oauth2`. + +See godoc for further documentation and examples. + +* [godoc.org/golang.org/x/oauth2](http://godoc.org/golang.org/x/oauth2) +* [godoc.org/golang.org/x/oauth2/google](http://godoc.org/golang.org/x/oauth2/google) + + +## App Engine + +In change 96e89be (March 2015), we removed the `oauth2.Context2` type in favor +of the [`context.Context`](https://golang.org/x/net/context#Context) type from +the `golang.org/x/net/context` package + +This means it's no longer possible to use the "Classic App Engine" +`appengine.Context` type with the `oauth2` package. (You're using +Classic App Engine if you import the package `"appengine"`.) + +To work around this, you may use the new `"google.golang.org/appengine"` +package. This package has almost the same API as the `"appengine"` package, +but it can be fetched with `go get` and used on "Managed VMs" and well as +Classic App Engine. + +See the [new `appengine` package's readme](https://github.com/golang/appengine#updating-a-go-app-engine-app) +for information on updating your app. + +If you don't want to update your entire app to use the new App Engine packages, +you may use both sets of packages in parallel, using only the new packages +with the `oauth2` package. + +```go +import ( + "golang.org/x/net/context" + "golang.org/x/oauth2" + "golang.org/x/oauth2/google" + newappengine "google.golang.org/appengine" + newurlfetch "google.golang.org/appengine/urlfetch" + + "appengine" +) + +func handler(w http.ResponseWriter, r *http.Request) { + var c appengine.Context = appengine.NewContext(r) + c.Infof("Logging a message with the old package") + + var ctx context.Context = newappengine.NewContext(r) + client := &http.Client{ + Transport: &oauth2.Transport{ + Source: google.AppEngineTokenSource(ctx, "scope"), + Base: &newurlfetch.Transport{Context: ctx}, + }, + } + client.Get("...") +} +``` + +## Report Issues / Send Patches + +This repository uses Gerrit for code changes. To learn how to submit changes to +this repository, see https://golang.org/doc/contribute.html. + +The main issue tracker for the oauth2 repository is located at +https://github.com/golang/oauth2/issues. diff --git a/vendor/golang.org/x/oauth2/google/appengine.go b/vendor/golang.org/x/oauth2/google/appengine.go new file mode 100644 index 00000000..50d918b8 --- /dev/null +++ b/vendor/golang.org/x/oauth2/google/appengine.go @@ -0,0 +1,89 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package google + +import ( + "sort" + "strings" + "sync" + "time" + + "golang.org/x/net/context" + "golang.org/x/oauth2" +) + +// appengineFlex is set at init time by appengineflex_hook.go. If true, we are on App Engine Flex. +var appengineFlex bool + +// Set at init time by appengine_hook.go. If nil, we're not on App Engine. +var appengineTokenFunc func(c context.Context, scopes ...string) (token string, expiry time.Time, err error) + +// Set at init time by appengine_hook.go. If nil, we're not on App Engine. +var appengineAppIDFunc func(c context.Context) string + +// AppEngineTokenSource returns a token source that fetches tokens +// issued to the current App Engine application's service account. +// If you are implementing a 3-legged OAuth 2.0 flow on App Engine +// that involves user accounts, see oauth2.Config instead. +// +// The provided context must have come from appengine.NewContext. +func AppEngineTokenSource(ctx context.Context, scope ...string) oauth2.TokenSource { + if appengineTokenFunc == nil { + panic("google: AppEngineTokenSource can only be used on App Engine.") + } + scopes := append([]string{}, scope...) + sort.Strings(scopes) + return &appEngineTokenSource{ + ctx: ctx, + scopes: scopes, + key: strings.Join(scopes, " "), + } +} + +// aeTokens helps the fetched tokens to be reused until their expiration. +var ( + aeTokensMu sync.Mutex + aeTokens = make(map[string]*tokenLock) // key is space-separated scopes +) + +type tokenLock struct { + mu sync.Mutex // guards t; held while fetching or updating t + t *oauth2.Token +} + +type appEngineTokenSource struct { + ctx context.Context + scopes []string + key string // to aeTokens map; space-separated scopes +} + +func (ts *appEngineTokenSource) Token() (*oauth2.Token, error) { + if appengineTokenFunc == nil { + panic("google: AppEngineTokenSource can only be used on App Engine.") + } + + aeTokensMu.Lock() + tok, ok := aeTokens[ts.key] + if !ok { + tok = &tokenLock{} + aeTokens[ts.key] = tok + } + aeTokensMu.Unlock() + + tok.mu.Lock() + defer tok.mu.Unlock() + if tok.t.Valid() { + return tok.t, nil + } + access, exp, err := appengineTokenFunc(ts.ctx, ts.scopes...) + if err != nil { + return nil, err + } + tok.t = &oauth2.Token{ + AccessToken: access, + Expiry: exp, + } + return tok.t, nil +} diff --git a/vendor/golang.org/x/oauth2/google/appengine_hook.go b/vendor/golang.org/x/oauth2/google/appengine_hook.go new file mode 100644 index 00000000..56669eaa --- /dev/null +++ b/vendor/golang.org/x/oauth2/google/appengine_hook.go @@ -0,0 +1,14 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build appengine appenginevm + +package google + +import "google.golang.org/appengine" + +func init() { + appengineTokenFunc = appengine.AccessToken + appengineAppIDFunc = appengine.AppID +} diff --git a/vendor/golang.org/x/oauth2/google/appengineflex_hook.go b/vendor/golang.org/x/oauth2/google/appengineflex_hook.go new file mode 100644 index 00000000..5d0231af --- /dev/null +++ b/vendor/golang.org/x/oauth2/google/appengineflex_hook.go @@ -0,0 +1,11 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build appenginevm + +package google + +func init() { + appengineFlex = true // Flex doesn't support appengine.AccessToken; depend on metadata server. +} diff --git a/vendor/golang.org/x/oauth2/google/default.go b/vendor/golang.org/x/oauth2/google/default.go new file mode 100644 index 00000000..a3160743 --- /dev/null +++ b/vendor/golang.org/x/oauth2/google/default.go @@ -0,0 +1,115 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package google + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "net/http" + "os" + "path/filepath" + "runtime" + + "cloud.google.com/go/compute/metadata" + "golang.org/x/net/context" + "golang.org/x/oauth2" +) + +// DefaultClient returns an HTTP Client that uses the +// DefaultTokenSource to obtain authentication credentials. +func DefaultClient(ctx context.Context, scope ...string) (*http.Client, error) { + ts, err := DefaultTokenSource(ctx, scope...) + if err != nil { + return nil, err + } + return oauth2.NewClient(ctx, ts), nil +} + +// DefaultTokenSource returns the token source for +// "Application Default Credentials". +// It is a shortcut for FindDefaultCredentials(ctx, scope).TokenSource. +func DefaultTokenSource(ctx context.Context, scope ...string) (oauth2.TokenSource, error) { + creds, err := FindDefaultCredentials(ctx, scope...) + if err != nil { + return nil, err + } + return creds.TokenSource, nil +} + +// Common implementation for FindDefaultCredentials. +func findDefaultCredentials(ctx context.Context, scopes []string) (*DefaultCredentials, error) { + // First, try the environment variable. + const envVar = "GOOGLE_APPLICATION_CREDENTIALS" + if filename := os.Getenv(envVar); filename != "" { + creds, err := readCredentialsFile(ctx, filename, scopes) + if err != nil { + return nil, fmt.Errorf("google: error getting credentials using %v environment variable: %v", envVar, err) + } + return creds, nil + } + + // Second, try a well-known file. + filename := wellKnownFile() + if creds, err := readCredentialsFile(ctx, filename, scopes); err == nil { + return creds, nil + } else if !os.IsNotExist(err) { + return nil, fmt.Errorf("google: error getting credentials using well-known file (%v): %v", filename, err) + } + + // Third, if we're on Google App Engine use those credentials. + if appengineTokenFunc != nil && !appengineFlex { + return &DefaultCredentials{ + ProjectID: appengineAppIDFunc(ctx), + TokenSource: AppEngineTokenSource(ctx, scopes...), + }, nil + } + + // Fourth, if we're on Google Compute Engine use the metadata server. + if metadata.OnGCE() { + id, _ := metadata.ProjectID() + return &DefaultCredentials{ + ProjectID: id, + TokenSource: ComputeTokenSource(""), + }, nil + } + + // None are found; return helpful error. + const url = "https://developers.google.com/accounts/docs/application-default-credentials" + return nil, fmt.Errorf("google: could not find default credentials. See %v for more information.", url) +} + +// Common implementation for CredentialsFromJSON. +func credentialsFromJSON(ctx context.Context, jsonData []byte, scopes []string) (*DefaultCredentials, error) { + var f credentialsFile + if err := json.Unmarshal(jsonData, &f); err != nil { + return nil, err + } + ts, err := f.tokenSource(ctx, append([]string(nil), scopes...)) + if err != nil { + return nil, err + } + return &DefaultCredentials{ + ProjectID: f.ProjectID, + TokenSource: ts, + JSON: jsonData, + }, nil +} + +func wellKnownFile() string { + const f = "application_default_credentials.json" + if runtime.GOOS == "windows" { + return filepath.Join(os.Getenv("APPDATA"), "gcloud", f) + } + return filepath.Join(guessUnixHomeDir(), ".config", "gcloud", f) +} + +func readCredentialsFile(ctx context.Context, filename string, scopes []string) (*DefaultCredentials, error) { + b, err := ioutil.ReadFile(filename) + if err != nil { + return nil, err + } + return CredentialsFromJSON(ctx, b, scopes...) +} diff --git a/vendor/golang.org/x/oauth2/google/doc_go19.go b/vendor/golang.org/x/oauth2/google/doc_go19.go new file mode 100644 index 00000000..2a86325f --- /dev/null +++ b/vendor/golang.org/x/oauth2/google/doc_go19.go @@ -0,0 +1,42 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.9 + +// Package google provides support for making OAuth2 authorized and authenticated +// HTTP requests to Google APIs. It supports the Web server flow, client-side +// credentials, service accounts, Google Compute Engine service accounts, and Google +// App Engine service accounts. +// +// A brief overview of the package follows. For more information, please read +// https://developers.google.com/accounts/docs/OAuth2 +// and +// https://developers.google.com/accounts/docs/application-default-credentials. +// +// OAuth2 Configs +// +// Two functions in this package return golang.org/x/oauth2.Config values from Google credential +// data. Google supports two JSON formats for OAuth2 credentials: one is handled by ConfigFromJSON, +// the other by JWTConfigFromJSON. The returned Config can be used to obtain a TokenSource or +// create an http.Client. +// +// +// Credentials +// +// The Credentials type represents Google credentials, including Application Default +// Credentials. +// +// Use FindDefaultCredentials to obtain Application Default Credentials. +// FindDefaultCredentials looks in some well-known places for a credentials file, and +// will call AppEngineTokenSource or ComputeTokenSource as needed. +// +// DefaultClient and DefaultTokenSource are convenience methods. They first call FindDefaultCredentials, +// then use the credentials to construct an http.Client or an oauth2.TokenSource. +// +// Use CredentialsFromJSON to obtain credentials from either of the two JSON formats +// described in OAuth2 Configs, above. The TokenSource in the returned value is the +// same as the one obtained from the oauth2.Config returned from ConfigFromJSON or +// JWTConfigFromJSON, but the Credentials may contain additional information +// that is useful is some circumstances. +package google // import "golang.org/x/oauth2/google" diff --git a/vendor/golang.org/x/oauth2/google/doc_not_go19.go b/vendor/golang.org/x/oauth2/google/doc_not_go19.go new file mode 100644 index 00000000..5c3c6e14 --- /dev/null +++ b/vendor/golang.org/x/oauth2/google/doc_not_go19.go @@ -0,0 +1,43 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.9 + +// Package google provides support for making OAuth2 authorized and authenticated +// HTTP requests to Google APIs. It supports the Web server flow, client-side +// credentials, service accounts, Google Compute Engine service accounts, and Google +// App Engine service accounts. +// +// A brief overview of the package follows. For more information, please read +// https://developers.google.com/accounts/docs/OAuth2 +// and +// https://developers.google.com/accounts/docs/application-default-credentials. +// +// OAuth2 Configs +// +// Two functions in this package return golang.org/x/oauth2.Config values from Google credential +// data. Google supports two JSON formats for OAuth2 credentials: one is handled by ConfigFromJSON, +// the other by JWTConfigFromJSON. The returned Config can be used to obtain a TokenSource or +// create an http.Client. +// +// +// Credentials +// +// The DefaultCredentials type represents Google Application Default Credentials, as +// well as other forms of credential. +// +// Use FindDefaultCredentials to obtain Application Default Credentials. +// FindDefaultCredentials looks in some well-known places for a credentials file, and +// will call AppEngineTokenSource or ComputeTokenSource as needed. +// +// DefaultClient and DefaultTokenSource are convenience methods. They first call FindDefaultCredentials, +// then use the credentials to construct an http.Client or an oauth2.TokenSource. +// +// Use CredentialsFromJSON to obtain credentials from either of the two JSON +// formats described in OAuth2 Configs, above. (The DefaultCredentials returned may +// not be "Application Default Credentials".) The TokenSource in the returned value +// is the same as the one obtained from the oauth2.Config returned from +// ConfigFromJSON or JWTConfigFromJSON, but the DefaultCredentials may contain +// additional information that is useful is some circumstances. +package google // import "golang.org/x/oauth2/google" diff --git a/vendor/golang.org/x/oauth2/google/go19.go b/vendor/golang.org/x/oauth2/google/go19.go new file mode 100644 index 00000000..4d0318b1 --- /dev/null +++ b/vendor/golang.org/x/oauth2/google/go19.go @@ -0,0 +1,57 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.9 + +package google + +import ( + "golang.org/x/net/context" + "golang.org/x/oauth2" +) + +// Credentials holds Google credentials, including "Application Default Credentials". +// For more details, see: +// https://developers.google.com/accounts/docs/application-default-credentials +type Credentials struct { + ProjectID string // may be empty + TokenSource oauth2.TokenSource + + // JSON contains the raw bytes from a JSON credentials file. + // This field may be nil if authentication is provided by the + // environment and not with a credentials file, e.g. when code is + // running on Google Cloud Platform. + JSON []byte +} + +// DefaultCredentials is the old name of Credentials. +// +// Deprecated: use Credentials instead. +type DefaultCredentials = Credentials + +// FindDefaultCredentials searches for "Application Default Credentials". +// +// It looks for credentials in the following places, +// preferring the first location found: +// +// 1. A JSON file whose path is specified by the +// GOOGLE_APPLICATION_CREDENTIALS environment variable. +// 2. A JSON file in a location known to the gcloud command-line tool. +// On Windows, this is %APPDATA%/gcloud/application_default_credentials.json. +// On other systems, $HOME/.config/gcloud/application_default_credentials.json. +// 3. On Google App Engine it uses the appengine.AccessToken function. +// 4. On Google Compute Engine and Google App Engine Managed VMs, it fetches +// credentials from the metadata server. +// (In this final case any provided scopes are ignored.) +func FindDefaultCredentials(ctx context.Context, scopes ...string) (*Credentials, error) { + return findDefaultCredentials(ctx, scopes) +} + +// CredentialsFromJSON obtains Google credentials from a JSON value. The JSON can +// represent either a Google Developers Console client_credentials.json file (as in +// ConfigFromJSON) or a Google Developers service account key file (as in +// JWTConfigFromJSON). +func CredentialsFromJSON(ctx context.Context, jsonData []byte, scopes ...string) (*Credentials, error) { + return credentialsFromJSON(ctx, jsonData, scopes) +} diff --git a/vendor/golang.org/x/oauth2/google/google.go b/vendor/golang.org/x/oauth2/google/google.go new file mode 100644 index 00000000..f7481fbc --- /dev/null +++ b/vendor/golang.org/x/oauth2/google/google.go @@ -0,0 +1,192 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package google + +import ( + "encoding/json" + "errors" + "fmt" + "strings" + "time" + + "cloud.google.com/go/compute/metadata" + "golang.org/x/net/context" + "golang.org/x/oauth2" + "golang.org/x/oauth2/jwt" +) + +// Endpoint is Google's OAuth 2.0 endpoint. +var Endpoint = oauth2.Endpoint{ + AuthURL: "https://accounts.google.com/o/oauth2/auth", + TokenURL: "https://accounts.google.com/o/oauth2/token", +} + +// JWTTokenURL is Google's OAuth 2.0 token URL to use with the JWT flow. +const JWTTokenURL = "https://accounts.google.com/o/oauth2/token" + +// ConfigFromJSON uses a Google Developers Console client_credentials.json +// file to construct a config. +// client_credentials.json can be downloaded from +// https://console.developers.google.com, under "Credentials". Download the Web +// application credentials in the JSON format and provide the contents of the +// file as jsonKey. +func ConfigFromJSON(jsonKey []byte, scope ...string) (*oauth2.Config, error) { + type cred struct { + ClientID string `json:"client_id"` + ClientSecret string `json:"client_secret"` + RedirectURIs []string `json:"redirect_uris"` + AuthURI string `json:"auth_uri"` + TokenURI string `json:"token_uri"` + } + var j struct { + Web *cred `json:"web"` + Installed *cred `json:"installed"` + } + if err := json.Unmarshal(jsonKey, &j); err != nil { + return nil, err + } + var c *cred + switch { + case j.Web != nil: + c = j.Web + case j.Installed != nil: + c = j.Installed + default: + return nil, fmt.Errorf("oauth2/google: no credentials found") + } + if len(c.RedirectURIs) < 1 { + return nil, errors.New("oauth2/google: missing redirect URL in the client_credentials.json") + } + return &oauth2.Config{ + ClientID: c.ClientID, + ClientSecret: c.ClientSecret, + RedirectURL: c.RedirectURIs[0], + Scopes: scope, + Endpoint: oauth2.Endpoint{ + AuthURL: c.AuthURI, + TokenURL: c.TokenURI, + }, + }, nil +} + +// JWTConfigFromJSON uses a Google Developers service account JSON key file to read +// the credentials that authorize and authenticate the requests. +// Create a service account on "Credentials" for your project at +// https://console.developers.google.com to download a JSON key file. +func JWTConfigFromJSON(jsonKey []byte, scope ...string) (*jwt.Config, error) { + var f credentialsFile + if err := json.Unmarshal(jsonKey, &f); err != nil { + return nil, err + } + if f.Type != serviceAccountKey { + return nil, fmt.Errorf("google: read JWT from JSON credentials: 'type' field is %q (expected %q)", f.Type, serviceAccountKey) + } + scope = append([]string(nil), scope...) // copy + return f.jwtConfig(scope), nil +} + +// JSON key file types. +const ( + serviceAccountKey = "service_account" + userCredentialsKey = "authorized_user" +) + +// credentialsFile is the unmarshalled representation of a credentials file. +type credentialsFile struct { + Type string `json:"type"` // serviceAccountKey or userCredentialsKey + + // Service Account fields + ClientEmail string `json:"client_email"` + PrivateKeyID string `json:"private_key_id"` + PrivateKey string `json:"private_key"` + TokenURL string `json:"token_uri"` + ProjectID string `json:"project_id"` + + // User Credential fields + // (These typically come from gcloud auth.) + ClientSecret string `json:"client_secret"` + ClientID string `json:"client_id"` + RefreshToken string `json:"refresh_token"` +} + +func (f *credentialsFile) jwtConfig(scopes []string) *jwt.Config { + cfg := &jwt.Config{ + Email: f.ClientEmail, + PrivateKey: []byte(f.PrivateKey), + PrivateKeyID: f.PrivateKeyID, + Scopes: scopes, + TokenURL: f.TokenURL, + } + if cfg.TokenURL == "" { + cfg.TokenURL = JWTTokenURL + } + return cfg +} + +func (f *credentialsFile) tokenSource(ctx context.Context, scopes []string) (oauth2.TokenSource, error) { + switch f.Type { + case serviceAccountKey: + cfg := f.jwtConfig(scopes) + return cfg.TokenSource(ctx), nil + case userCredentialsKey: + cfg := &oauth2.Config{ + ClientID: f.ClientID, + ClientSecret: f.ClientSecret, + Scopes: scopes, + Endpoint: Endpoint, + } + tok := &oauth2.Token{RefreshToken: f.RefreshToken} + return cfg.TokenSource(ctx, tok), nil + case "": + return nil, errors.New("missing 'type' field in credentials") + default: + return nil, fmt.Errorf("unknown credential type: %q", f.Type) + } +} + +// ComputeTokenSource returns a token source that fetches access tokens +// from Google Compute Engine (GCE)'s metadata server. It's only valid to use +// this token source if your program is running on a GCE instance. +// If no account is specified, "default" is used. +// Further information about retrieving access tokens from the GCE metadata +// server can be found at https://cloud.google.com/compute/docs/authentication. +func ComputeTokenSource(account string) oauth2.TokenSource { + return oauth2.ReuseTokenSource(nil, computeSource{account: account}) +} + +type computeSource struct { + account string +} + +func (cs computeSource) Token() (*oauth2.Token, error) { + if !metadata.OnGCE() { + return nil, errors.New("oauth2/google: can't get a token from the metadata service; not running on GCE") + } + acct := cs.account + if acct == "" { + acct = "default" + } + tokenJSON, err := metadata.Get("instance/service-accounts/" + acct + "/token") + if err != nil { + return nil, err + } + var res struct { + AccessToken string `json:"access_token"` + ExpiresInSec int `json:"expires_in"` + TokenType string `json:"token_type"` + } + err = json.NewDecoder(strings.NewReader(tokenJSON)).Decode(&res) + if err != nil { + return nil, fmt.Errorf("oauth2/google: invalid token JSON from metadata: %v", err) + } + if res.ExpiresInSec == 0 || res.AccessToken == "" { + return nil, fmt.Errorf("oauth2/google: incomplete token received from metadata") + } + return &oauth2.Token{ + AccessToken: res.AccessToken, + TokenType: res.TokenType, + Expiry: time.Now().Add(time.Duration(res.ExpiresInSec) * time.Second), + }, nil +} diff --git a/vendor/golang.org/x/oauth2/google/jwt.go b/vendor/golang.org/x/oauth2/google/jwt.go new file mode 100644 index 00000000..b0fdb3a8 --- /dev/null +++ b/vendor/golang.org/x/oauth2/google/jwt.go @@ -0,0 +1,74 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package google + +import ( + "crypto/rsa" + "fmt" + "time" + + "golang.org/x/oauth2" + "golang.org/x/oauth2/internal" + "golang.org/x/oauth2/jws" +) + +// JWTAccessTokenSourceFromJSON uses a Google Developers service account JSON +// key file to read the credentials that authorize and authenticate the +// requests, and returns a TokenSource that does not use any OAuth2 flow but +// instead creates a JWT and sends that as the access token. +// The audience is typically a URL that specifies the scope of the credentials. +// +// Note that this is not a standard OAuth flow, but rather an +// optimization supported by a few Google services. +// Unless you know otherwise, you should use JWTConfigFromJSON instead. +func JWTAccessTokenSourceFromJSON(jsonKey []byte, audience string) (oauth2.TokenSource, error) { + cfg, err := JWTConfigFromJSON(jsonKey) + if err != nil { + return nil, fmt.Errorf("google: could not parse JSON key: %v", err) + } + pk, err := internal.ParseKey(cfg.PrivateKey) + if err != nil { + return nil, fmt.Errorf("google: could not parse key: %v", err) + } + ts := &jwtAccessTokenSource{ + email: cfg.Email, + audience: audience, + pk: pk, + pkID: cfg.PrivateKeyID, + } + tok, err := ts.Token() + if err != nil { + return nil, err + } + return oauth2.ReuseTokenSource(tok, ts), nil +} + +type jwtAccessTokenSource struct { + email, audience string + pk *rsa.PrivateKey + pkID string +} + +func (ts *jwtAccessTokenSource) Token() (*oauth2.Token, error) { + iat := time.Now() + exp := iat.Add(time.Hour) + cs := &jws.ClaimSet{ + Iss: ts.email, + Sub: ts.email, + Aud: ts.audience, + Iat: iat.Unix(), + Exp: exp.Unix(), + } + hdr := &jws.Header{ + Algorithm: "RS256", + Typ: "JWT", + KeyID: string(ts.pkID), + } + msg, err := jws.Encode(hdr, cs, ts.pk) + if err != nil { + return nil, fmt.Errorf("google: could not encode JWT: %v", err) + } + return &oauth2.Token{AccessToken: msg, TokenType: "Bearer", Expiry: exp}, nil +} diff --git a/vendor/golang.org/x/oauth2/google/not_go19.go b/vendor/golang.org/x/oauth2/google/not_go19.go new file mode 100644 index 00000000..544e4062 --- /dev/null +++ b/vendor/golang.org/x/oauth2/google/not_go19.go @@ -0,0 +1,54 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.9 + +package google + +import ( + "golang.org/x/net/context" + "golang.org/x/oauth2" +) + +// DefaultCredentials holds Google credentials, including "Application Default Credentials". +// For more details, see: +// https://developers.google.com/accounts/docs/application-default-credentials +type DefaultCredentials struct { + ProjectID string // may be empty + TokenSource oauth2.TokenSource + + // JSON contains the raw bytes from a JSON credentials file. + // This field may be nil if authentication is provided by the + // environment and not with a credentials file, e.g. when code is + // running on Google Cloud Platform. + JSON []byte +} + +// FindDefaultCredentials searches for "Application Default Credentials". +// +// It looks for credentials in the following places, +// preferring the first location found: +// +// 1. A JSON file whose path is specified by the +// GOOGLE_APPLICATION_CREDENTIALS environment variable. +// 2. A JSON file in a location known to the gcloud command-line tool. +// On Windows, this is %APPDATA%/gcloud/application_default_credentials.json. +// On other systems, $HOME/.config/gcloud/application_default_credentials.json. +// 3. On Google App Engine it uses the appengine.AccessToken function. +// 4. On Google Compute Engine and Google App Engine Managed VMs, it fetches +// credentials from the metadata server. +// (In this final case any provided scopes are ignored.) +func FindDefaultCredentials(ctx context.Context, scopes ...string) (*DefaultCredentials, error) { + return findDefaultCredentials(ctx, scopes) +} + +// CredentialsFromJSON obtains Google credentials from a JSON value. The JSON can +// represent either a Google Developers Console client_credentials.json file (as in +// ConfigFromJSON) or a Google Developers service account key file (as in +// JWTConfigFromJSON). +// +// Note: despite the name, the returned credentials may not be Application Default Credentials. +func CredentialsFromJSON(ctx context.Context, jsonData []byte, scopes ...string) (*DefaultCredentials, error) { + return credentialsFromJSON(ctx, jsonData, scopes) +} diff --git a/vendor/golang.org/x/oauth2/google/sdk.go b/vendor/golang.org/x/oauth2/google/sdk.go new file mode 100644 index 00000000..b9660cad --- /dev/null +++ b/vendor/golang.org/x/oauth2/google/sdk.go @@ -0,0 +1,201 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package google + +import ( + "bufio" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "os" + "os/user" + "path/filepath" + "runtime" + "strings" + "time" + + "golang.org/x/net/context" + "golang.org/x/oauth2" +) + +type sdkCredentials struct { + Data []struct { + Credential struct { + ClientID string `json:"client_id"` + ClientSecret string `json:"client_secret"` + AccessToken string `json:"access_token"` + RefreshToken string `json:"refresh_token"` + TokenExpiry *time.Time `json:"token_expiry"` + } `json:"credential"` + Key struct { + Account string `json:"account"` + Scope string `json:"scope"` + } `json:"key"` + } +} + +// An SDKConfig provides access to tokens from an account already +// authorized via the Google Cloud SDK. +type SDKConfig struct { + conf oauth2.Config + initialToken *oauth2.Token +} + +// NewSDKConfig creates an SDKConfig for the given Google Cloud SDK +// account. If account is empty, the account currently active in +// Google Cloud SDK properties is used. +// Google Cloud SDK credentials must be created by running `gcloud auth` +// before using this function. +// The Google Cloud SDK is available at https://cloud.google.com/sdk/. +func NewSDKConfig(account string) (*SDKConfig, error) { + configPath, err := sdkConfigPath() + if err != nil { + return nil, fmt.Errorf("oauth2/google: error getting SDK config path: %v", err) + } + credentialsPath := filepath.Join(configPath, "credentials") + f, err := os.Open(credentialsPath) + if err != nil { + return nil, fmt.Errorf("oauth2/google: failed to load SDK credentials: %v", err) + } + defer f.Close() + + var c sdkCredentials + if err := json.NewDecoder(f).Decode(&c); err != nil { + return nil, fmt.Errorf("oauth2/google: failed to decode SDK credentials from %q: %v", credentialsPath, err) + } + if len(c.Data) == 0 { + return nil, fmt.Errorf("oauth2/google: no credentials found in %q, run `gcloud auth login` to create one", credentialsPath) + } + if account == "" { + propertiesPath := filepath.Join(configPath, "properties") + f, err := os.Open(propertiesPath) + if err != nil { + return nil, fmt.Errorf("oauth2/google: failed to load SDK properties: %v", err) + } + defer f.Close() + ini, err := parseINI(f) + if err != nil { + return nil, fmt.Errorf("oauth2/google: failed to parse SDK properties %q: %v", propertiesPath, err) + } + core, ok := ini["core"] + if !ok { + return nil, fmt.Errorf("oauth2/google: failed to find [core] section in %v", ini) + } + active, ok := core["account"] + if !ok { + return nil, fmt.Errorf("oauth2/google: failed to find %q attribute in %v", "account", core) + } + account = active + } + + for _, d := range c.Data { + if account == "" || d.Key.Account == account { + if d.Credential.AccessToken == "" && d.Credential.RefreshToken == "" { + return nil, fmt.Errorf("oauth2/google: no token available for account %q", account) + } + var expiry time.Time + if d.Credential.TokenExpiry != nil { + expiry = *d.Credential.TokenExpiry + } + return &SDKConfig{ + conf: oauth2.Config{ + ClientID: d.Credential.ClientID, + ClientSecret: d.Credential.ClientSecret, + Scopes: strings.Split(d.Key.Scope, " "), + Endpoint: Endpoint, + RedirectURL: "oob", + }, + initialToken: &oauth2.Token{ + AccessToken: d.Credential.AccessToken, + RefreshToken: d.Credential.RefreshToken, + Expiry: expiry, + }, + }, nil + } + } + return nil, fmt.Errorf("oauth2/google: no such credentials for account %q", account) +} + +// Client returns an HTTP client using Google Cloud SDK credentials to +// authorize requests. The token will auto-refresh as necessary. The +// underlying http.RoundTripper will be obtained using the provided +// context. The returned client and its Transport should not be +// modified. +func (c *SDKConfig) Client(ctx context.Context) *http.Client { + return &http.Client{ + Transport: &oauth2.Transport{ + Source: c.TokenSource(ctx), + }, + } +} + +// TokenSource returns an oauth2.TokenSource that retrieve tokens from +// Google Cloud SDK credentials using the provided context. +// It will returns the current access token stored in the credentials, +// and refresh it when it expires, but it won't update the credentials +// with the new access token. +func (c *SDKConfig) TokenSource(ctx context.Context) oauth2.TokenSource { + return c.conf.TokenSource(ctx, c.initialToken) +} + +// Scopes are the OAuth 2.0 scopes the current account is authorized for. +func (c *SDKConfig) Scopes() []string { + return c.conf.Scopes +} + +func parseINI(ini io.Reader) (map[string]map[string]string, error) { + result := map[string]map[string]string{ + "": {}, // root section + } + scanner := bufio.NewScanner(ini) + currentSection := "" + for scanner.Scan() { + line := strings.TrimSpace(scanner.Text()) + if strings.HasPrefix(line, ";") { + // comment. + continue + } + if strings.HasPrefix(line, "[") && strings.HasSuffix(line, "]") { + currentSection = strings.TrimSpace(line[1 : len(line)-1]) + result[currentSection] = map[string]string{} + continue + } + parts := strings.SplitN(line, "=", 2) + if len(parts) == 2 && parts[0] != "" { + result[currentSection][strings.TrimSpace(parts[0])] = strings.TrimSpace(parts[1]) + } + } + if err := scanner.Err(); err != nil { + return nil, fmt.Errorf("error scanning ini: %v", err) + } + return result, nil +} + +// sdkConfigPath tries to guess where the gcloud config is located. +// It can be overridden during tests. +var sdkConfigPath = func() (string, error) { + if runtime.GOOS == "windows" { + return filepath.Join(os.Getenv("APPDATA"), "gcloud"), nil + } + homeDir := guessUnixHomeDir() + if homeDir == "" { + return "", errors.New("unable to get current user home directory: os/user lookup failed; $HOME is empty") + } + return filepath.Join(homeDir, ".config", "gcloud"), nil +} + +func guessUnixHomeDir() string { + // Prefer $HOME over user.Current due to glibc bug: golang.org/issue/13470 + if v := os.Getenv("HOME"); v != "" { + return v + } + // Else, fall back to user.Current: + if u, err := user.Current(); err == nil { + return u.HomeDir + } + return "" +} diff --git a/vendor/golang.org/x/oauth2/internal/client_appengine.go b/vendor/golang.org/x/oauth2/internal/client_appengine.go new file mode 100644 index 00000000..74348718 --- /dev/null +++ b/vendor/golang.org/x/oauth2/internal/client_appengine.go @@ -0,0 +1,13 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build appengine + +package internal + +import "google.golang.org/appengine/urlfetch" + +func init() { + appengineClientHook = urlfetch.Client +} diff --git a/vendor/golang.org/x/oauth2/internal/doc.go b/vendor/golang.org/x/oauth2/internal/doc.go new file mode 100644 index 00000000..03265e88 --- /dev/null +++ b/vendor/golang.org/x/oauth2/internal/doc.go @@ -0,0 +1,6 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package internal contains support packages for oauth2 package. +package internal diff --git a/vendor/golang.org/x/oauth2/internal/oauth2.go b/vendor/golang.org/x/oauth2/internal/oauth2.go new file mode 100644 index 00000000..fc63fcab --- /dev/null +++ b/vendor/golang.org/x/oauth2/internal/oauth2.go @@ -0,0 +1,37 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package internal + +import ( + "crypto/rsa" + "crypto/x509" + "encoding/pem" + "errors" + "fmt" +) + +// ParseKey converts the binary contents of a private key file +// to an *rsa.PrivateKey. It detects whether the private key is in a +// PEM container or not. If so, it extracts the the private key +// from PEM container before conversion. It only supports PEM +// containers with no passphrase. +func ParseKey(key []byte) (*rsa.PrivateKey, error) { + block, _ := pem.Decode(key) + if block != nil { + key = block.Bytes + } + parsedKey, err := x509.ParsePKCS8PrivateKey(key) + if err != nil { + parsedKey, err = x509.ParsePKCS1PrivateKey(key) + if err != nil { + return nil, fmt.Errorf("private key should be a PEM or plain PKSC1 or PKCS8; parse error: %v", err) + } + } + parsed, ok := parsedKey.(*rsa.PrivateKey) + if !ok { + return nil, errors.New("private key is invalid") + } + return parsed, nil +} diff --git a/vendor/golang.org/x/oauth2/internal/token.go b/vendor/golang.org/x/oauth2/internal/token.go new file mode 100644 index 00000000..30fb315d --- /dev/null +++ b/vendor/golang.org/x/oauth2/internal/token.go @@ -0,0 +1,268 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package internal + +import ( + "encoding/json" + "errors" + "fmt" + "io" + "io/ioutil" + "mime" + "net/http" + "net/url" + "strconv" + "strings" + "time" + + "golang.org/x/net/context" + "golang.org/x/net/context/ctxhttp" +) + +// Token represents the credentials used to authorize +// the requests to access protected resources on the OAuth 2.0 +// provider's backend. +// +// This type is a mirror of oauth2.Token and exists to break +// an otherwise-circular dependency. Other internal packages +// should convert this Token into an oauth2.Token before use. +type Token struct { + // AccessToken is the token that authorizes and authenticates + // the requests. + AccessToken string + + // TokenType is the type of token. + // The Type method returns either this or "Bearer", the default. + TokenType string + + // RefreshToken is a token that's used by the application + // (as opposed to the user) to refresh the access token + // if it expires. + RefreshToken string + + // Expiry is the optional expiration time of the access token. + // + // If zero, TokenSource implementations will reuse the same + // token forever and RefreshToken or equivalent + // mechanisms for that TokenSource will not be used. + Expiry time.Time + + // Raw optionally contains extra metadata from the server + // when updating a token. + Raw interface{} +} + +// tokenJSON is the struct representing the HTTP response from OAuth2 +// providers returning a token in JSON form. +type tokenJSON struct { + AccessToken string `json:"access_token"` + TokenType string `json:"token_type"` + RefreshToken string `json:"refresh_token"` + ExpiresIn expirationTime `json:"expires_in"` // at least PayPal returns string, while most return number + Expires expirationTime `json:"expires"` // broken Facebook spelling of expires_in +} + +func (e *tokenJSON) expiry() (t time.Time) { + if v := e.ExpiresIn; v != 0 { + return time.Now().Add(time.Duration(v) * time.Second) + } + if v := e.Expires; v != 0 { + return time.Now().Add(time.Duration(v) * time.Second) + } + return +} + +type expirationTime int32 + +func (e *expirationTime) UnmarshalJSON(b []byte) error { + var n json.Number + err := json.Unmarshal(b, &n) + if err != nil { + return err + } + i, err := n.Int64() + if err != nil { + return err + } + *e = expirationTime(i) + return nil +} + +var brokenAuthHeaderProviders = []string{ + "https://accounts.google.com/", + "https://api.codeswholesale.com/oauth/token", + "https://api.dropbox.com/", + "https://api.dropboxapi.com/", + "https://api.instagram.com/", + "https://api.netatmo.net/", + "https://api.odnoklassniki.ru/", + "https://api.pushbullet.com/", + "https://api.soundcloud.com/", + "https://api.twitch.tv/", + "https://app.box.com/", + "https://connect.stripe.com/", + "https://login.mailchimp.com/", + "https://login.microsoftonline.com/", + "https://login.salesforce.com/", + "https://login.windows.net", + "https://login.live.com/", + "https://oauth.sandbox.trainingpeaks.com/", + "https://oauth.trainingpeaks.com/", + "https://oauth.vk.com/", + "https://openapi.baidu.com/", + "https://slack.com/", + "https://test-sandbox.auth.corp.google.com", + "https://test.salesforce.com/", + "https://user.gini.net/", + "https://www.douban.com/", + "https://www.googleapis.com/", + "https://www.linkedin.com/", + "https://www.strava.com/oauth/", + "https://www.wunderlist.com/oauth/", + "https://api.patreon.com/", + "https://sandbox.codeswholesale.com/oauth/token", + "https://api.sipgate.com/v1/authorization/oauth", + "https://api.medium.com/v1/tokens", + "https://log.finalsurge.com/oauth/token", + "https://multisport.todaysplan.com.au/rest/oauth/access_token", + "https://whats.todaysplan.com.au/rest/oauth/access_token", +} + +// brokenAuthHeaderDomains lists broken providers that issue dynamic endpoints. +var brokenAuthHeaderDomains = []string{ + ".auth0.com", + ".force.com", + ".myshopify.com", + ".okta.com", + ".oktapreview.com", +} + +func RegisterBrokenAuthHeaderProvider(tokenURL string) { + brokenAuthHeaderProviders = append(brokenAuthHeaderProviders, tokenURL) +} + +// providerAuthHeaderWorks reports whether the OAuth2 server identified by the tokenURL +// implements the OAuth2 spec correctly +// See https://code.google.com/p/goauth2/issues/detail?id=31 for background. +// In summary: +// - Reddit only accepts client secret in the Authorization header +// - Dropbox accepts either it in URL param or Auth header, but not both. +// - Google only accepts URL param (not spec compliant?), not Auth header +// - Stripe only accepts client secret in Auth header with Bearer method, not Basic +func providerAuthHeaderWorks(tokenURL string) bool { + for _, s := range brokenAuthHeaderProviders { + if strings.HasPrefix(tokenURL, s) { + // Some sites fail to implement the OAuth2 spec fully. + return false + } + } + + if u, err := url.Parse(tokenURL); err == nil { + for _, s := range brokenAuthHeaderDomains { + if strings.HasSuffix(u.Host, s) { + return false + } + } + } + + // Assume the provider implements the spec properly + // otherwise. We can add more exceptions as they're + // discovered. We will _not_ be adding configurable hooks + // to this package to let users select server bugs. + return true +} + +func RetrieveToken(ctx context.Context, clientID, clientSecret, tokenURL string, v url.Values) (*Token, error) { + bustedAuth := !providerAuthHeaderWorks(tokenURL) + if bustedAuth { + if clientID != "" { + v.Set("client_id", clientID) + } + if clientSecret != "" { + v.Set("client_secret", clientSecret) + } + } + req, err := http.NewRequest("POST", tokenURL, strings.NewReader(v.Encode())) + if err != nil { + return nil, err + } + req.Header.Set("Content-Type", "application/x-www-form-urlencoded") + if !bustedAuth { + req.SetBasicAuth(url.QueryEscape(clientID), url.QueryEscape(clientSecret)) + } + r, err := ctxhttp.Do(ctx, ContextClient(ctx), req) + if err != nil { + return nil, err + } + defer r.Body.Close() + body, err := ioutil.ReadAll(io.LimitReader(r.Body, 1<<20)) + if err != nil { + return nil, fmt.Errorf("oauth2: cannot fetch token: %v", err) + } + if code := r.StatusCode; code < 200 || code > 299 { + return nil, &RetrieveError{ + Response: r, + Body: body, + } + } + + var token *Token + content, _, _ := mime.ParseMediaType(r.Header.Get("Content-Type")) + switch content { + case "application/x-www-form-urlencoded", "text/plain": + vals, err := url.ParseQuery(string(body)) + if err != nil { + return nil, err + } + token = &Token{ + AccessToken: vals.Get("access_token"), + TokenType: vals.Get("token_type"), + RefreshToken: vals.Get("refresh_token"), + Raw: vals, + } + e := vals.Get("expires_in") + if e == "" { + // TODO(jbd): Facebook's OAuth2 implementation is broken and + // returns expires_in field in expires. Remove the fallback to expires, + // when Facebook fixes their implementation. + e = vals.Get("expires") + } + expires, _ := strconv.Atoi(e) + if expires != 0 { + token.Expiry = time.Now().Add(time.Duration(expires) * time.Second) + } + default: + var tj tokenJSON + if err = json.Unmarshal(body, &tj); err != nil { + return nil, err + } + token = &Token{ + AccessToken: tj.AccessToken, + TokenType: tj.TokenType, + RefreshToken: tj.RefreshToken, + Expiry: tj.expiry(), + Raw: make(map[string]interface{}), + } + json.Unmarshal(body, &token.Raw) // no error checks for optional fields + } + // Don't overwrite `RefreshToken` with an empty value + // if this was a token refreshing request. + if token.RefreshToken == "" { + token.RefreshToken = v.Get("refresh_token") + } + if token.AccessToken == "" { + return token, errors.New("oauth2: server response missing access_token") + } + return token, nil +} + +type RetrieveError struct { + Response *http.Response + Body []byte +} + +func (r *RetrieveError) Error() string { + return fmt.Sprintf("oauth2: cannot fetch token: %v\nResponse: %s", r.Response.Status, r.Body) +} diff --git a/vendor/golang.org/x/oauth2/internal/transport.go b/vendor/golang.org/x/oauth2/internal/transport.go new file mode 100644 index 00000000..d16f9ae1 --- /dev/null +++ b/vendor/golang.org/x/oauth2/internal/transport.go @@ -0,0 +1,34 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package internal + +import ( + "net/http" + + "golang.org/x/net/context" +) + +// HTTPClient is the context key to use with golang.org/x/net/context's +// WithValue function to associate an *http.Client value with a context. +var HTTPClient ContextKey + +// ContextKey is just an empty struct. It exists so HTTPClient can be +// an immutable public variable with a unique type. It's immutable +// because nobody else can create a ContextKey, being unexported. +type ContextKey struct{} + +var appengineClientHook func(context.Context) *http.Client + +func ContextClient(ctx context.Context) *http.Client { + if ctx != nil { + if hc, ok := ctx.Value(HTTPClient).(*http.Client); ok { + return hc + } + } + if appengineClientHook != nil { + return appengineClientHook(ctx) + } + return http.DefaultClient +} diff --git a/vendor/golang.org/x/oauth2/jws/jws.go b/vendor/golang.org/x/oauth2/jws/jws.go new file mode 100644 index 00000000..683d2d27 --- /dev/null +++ b/vendor/golang.org/x/oauth2/jws/jws.go @@ -0,0 +1,182 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package jws provides a partial implementation +// of JSON Web Signature encoding and decoding. +// It exists to support the golang.org/x/oauth2 package. +// +// See RFC 7515. +// +// Deprecated: this package is not intended for public use and might be +// removed in the future. It exists for internal use only. +// Please switch to another JWS package or copy this package into your own +// source tree. +package jws // import "golang.org/x/oauth2/jws" + +import ( + "bytes" + "crypto" + "crypto/rand" + "crypto/rsa" + "crypto/sha256" + "encoding/base64" + "encoding/json" + "errors" + "fmt" + "strings" + "time" +) + +// ClaimSet contains information about the JWT signature including the +// permissions being requested (scopes), the target of the token, the issuer, +// the time the token was issued, and the lifetime of the token. +type ClaimSet struct { + Iss string `json:"iss"` // email address of the client_id of the application making the access token request + Scope string `json:"scope,omitempty"` // space-delimited list of the permissions the application requests + Aud string `json:"aud"` // descriptor of the intended target of the assertion (Optional). + Exp int64 `json:"exp"` // the expiration time of the assertion (seconds since Unix epoch) + Iat int64 `json:"iat"` // the time the assertion was issued (seconds since Unix epoch) + Typ string `json:"typ,omitempty"` // token type (Optional). + + // Email for which the application is requesting delegated access (Optional). + Sub string `json:"sub,omitempty"` + + // The old name of Sub. Client keeps setting Prn to be + // complaint with legacy OAuth 2.0 providers. (Optional) + Prn string `json:"prn,omitempty"` + + // See http://tools.ietf.org/html/draft-jones-json-web-token-10#section-4.3 + // This array is marshalled using custom code (see (c *ClaimSet) encode()). + PrivateClaims map[string]interface{} `json:"-"` +} + +func (c *ClaimSet) encode() (string, error) { + // Reverting time back for machines whose time is not perfectly in sync. + // If client machine's time is in the future according + // to Google servers, an access token will not be issued. + now := time.Now().Add(-10 * time.Second) + if c.Iat == 0 { + c.Iat = now.Unix() + } + if c.Exp == 0 { + c.Exp = now.Add(time.Hour).Unix() + } + if c.Exp < c.Iat { + return "", fmt.Errorf("jws: invalid Exp = %v; must be later than Iat = %v", c.Exp, c.Iat) + } + + b, err := json.Marshal(c) + if err != nil { + return "", err + } + + if len(c.PrivateClaims) == 0 { + return base64.RawURLEncoding.EncodeToString(b), nil + } + + // Marshal private claim set and then append it to b. + prv, err := json.Marshal(c.PrivateClaims) + if err != nil { + return "", fmt.Errorf("jws: invalid map of private claims %v", c.PrivateClaims) + } + + // Concatenate public and private claim JSON objects. + if !bytes.HasSuffix(b, []byte{'}'}) { + return "", fmt.Errorf("jws: invalid JSON %s", b) + } + if !bytes.HasPrefix(prv, []byte{'{'}) { + return "", fmt.Errorf("jws: invalid JSON %s", prv) + } + b[len(b)-1] = ',' // Replace closing curly brace with a comma. + b = append(b, prv[1:]...) // Append private claims. + return base64.RawURLEncoding.EncodeToString(b), nil +} + +// Header represents the header for the signed JWS payloads. +type Header struct { + // The algorithm used for signature. + Algorithm string `json:"alg"` + + // Represents the token type. + Typ string `json:"typ"` + + // The optional hint of which key is being used. + KeyID string `json:"kid,omitempty"` +} + +func (h *Header) encode() (string, error) { + b, err := json.Marshal(h) + if err != nil { + return "", err + } + return base64.RawURLEncoding.EncodeToString(b), nil +} + +// Decode decodes a claim set from a JWS payload. +func Decode(payload string) (*ClaimSet, error) { + // decode returned id token to get expiry + s := strings.Split(payload, ".") + if len(s) < 2 { + // TODO(jbd): Provide more context about the error. + return nil, errors.New("jws: invalid token received") + } + decoded, err := base64.RawURLEncoding.DecodeString(s[1]) + if err != nil { + return nil, err + } + c := &ClaimSet{} + err = json.NewDecoder(bytes.NewBuffer(decoded)).Decode(c) + return c, err +} + +// Signer returns a signature for the given data. +type Signer func(data []byte) (sig []byte, err error) + +// EncodeWithSigner encodes a header and claim set with the provided signer. +func EncodeWithSigner(header *Header, c *ClaimSet, sg Signer) (string, error) { + head, err := header.encode() + if err != nil { + return "", err + } + cs, err := c.encode() + if err != nil { + return "", err + } + ss := fmt.Sprintf("%s.%s", head, cs) + sig, err := sg([]byte(ss)) + if err != nil { + return "", err + } + return fmt.Sprintf("%s.%s", ss, base64.RawURLEncoding.EncodeToString(sig)), nil +} + +// Encode encodes a signed JWS with provided header and claim set. +// This invokes EncodeWithSigner using crypto/rsa.SignPKCS1v15 with the given RSA private key. +func Encode(header *Header, c *ClaimSet, key *rsa.PrivateKey) (string, error) { + sg := func(data []byte) (sig []byte, err error) { + h := sha256.New() + h.Write(data) + return rsa.SignPKCS1v15(rand.Reader, key, crypto.SHA256, h.Sum(nil)) + } + return EncodeWithSigner(header, c, sg) +} + +// Verify tests whether the provided JWT token's signature was produced by the private key +// associated with the supplied public key. +func Verify(token string, key *rsa.PublicKey) error { + parts := strings.Split(token, ".") + if len(parts) != 3 { + return errors.New("jws: invalid token received, token must have 3 parts") + } + + signedContent := parts[0] + "." + parts[1] + signatureString, err := base64.RawURLEncoding.DecodeString(parts[2]) + if err != nil { + return err + } + + h := sha256.New() + h.Write([]byte(signedContent)) + return rsa.VerifyPKCS1v15(key, crypto.SHA256, h.Sum(nil), []byte(signatureString)) +} diff --git a/vendor/golang.org/x/oauth2/jwt/jwt.go b/vendor/golang.org/x/oauth2/jwt/jwt.go new file mode 100644 index 00000000..e08f3159 --- /dev/null +++ b/vendor/golang.org/x/oauth2/jwt/jwt.go @@ -0,0 +1,162 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package jwt implements the OAuth 2.0 JSON Web Token flow, commonly +// known as "two-legged OAuth 2.0". +// +// See: https://tools.ietf.org/html/draft-ietf-oauth-jwt-bearer-12 +package jwt + +import ( + "encoding/json" + "fmt" + "io" + "io/ioutil" + "net/http" + "net/url" + "strings" + "time" + + "golang.org/x/net/context" + "golang.org/x/oauth2" + "golang.org/x/oauth2/internal" + "golang.org/x/oauth2/jws" +) + +var ( + defaultGrantType = "urn:ietf:params:oauth:grant-type:jwt-bearer" + defaultHeader = &jws.Header{Algorithm: "RS256", Typ: "JWT"} +) + +// Config is the configuration for using JWT to fetch tokens, +// commonly known as "two-legged OAuth 2.0". +type Config struct { + // Email is the OAuth client identifier used when communicating with + // the configured OAuth provider. + Email string + + // PrivateKey contains the contents of an RSA private key or the + // contents of a PEM file that contains a private key. The provided + // private key is used to sign JWT payloads. + // PEM containers with a passphrase are not supported. + // Use the following command to convert a PKCS 12 file into a PEM. + // + // $ openssl pkcs12 -in key.p12 -out key.pem -nodes + // + PrivateKey []byte + + // PrivateKeyID contains an optional hint indicating which key is being + // used. + PrivateKeyID string + + // Subject is the optional user to impersonate. + Subject string + + // Scopes optionally specifies a list of requested permission scopes. + Scopes []string + + // TokenURL is the endpoint required to complete the 2-legged JWT flow. + TokenURL string + + // Expires optionally specifies how long the token is valid for. + Expires time.Duration +} + +// TokenSource returns a JWT TokenSource using the configuration +// in c and the HTTP client from the provided context. +func (c *Config) TokenSource(ctx context.Context) oauth2.TokenSource { + return oauth2.ReuseTokenSource(nil, jwtSource{ctx, c}) +} + +// Client returns an HTTP client wrapping the context's +// HTTP transport and adding Authorization headers with tokens +// obtained from c. +// +// The returned client and its Transport should not be modified. +func (c *Config) Client(ctx context.Context) *http.Client { + return oauth2.NewClient(ctx, c.TokenSource(ctx)) +} + +// jwtSource is a source that always does a signed JWT request for a token. +// It should typically be wrapped with a reuseTokenSource. +type jwtSource struct { + ctx context.Context + conf *Config +} + +func (js jwtSource) Token() (*oauth2.Token, error) { + pk, err := internal.ParseKey(js.conf.PrivateKey) + if err != nil { + return nil, err + } + hc := oauth2.NewClient(js.ctx, nil) + claimSet := &jws.ClaimSet{ + Iss: js.conf.Email, + Scope: strings.Join(js.conf.Scopes, " "), + Aud: js.conf.TokenURL, + } + if subject := js.conf.Subject; subject != "" { + claimSet.Sub = subject + // prn is the old name of sub. Keep setting it + // to be compatible with legacy OAuth 2.0 providers. + claimSet.Prn = subject + } + if t := js.conf.Expires; t > 0 { + claimSet.Exp = time.Now().Add(t).Unix() + } + h := *defaultHeader + h.KeyID = js.conf.PrivateKeyID + payload, err := jws.Encode(&h, claimSet, pk) + if err != nil { + return nil, err + } + v := url.Values{} + v.Set("grant_type", defaultGrantType) + v.Set("assertion", payload) + resp, err := hc.PostForm(js.conf.TokenURL, v) + if err != nil { + return nil, fmt.Errorf("oauth2: cannot fetch token: %v", err) + } + defer resp.Body.Close() + body, err := ioutil.ReadAll(io.LimitReader(resp.Body, 1<<20)) + if err != nil { + return nil, fmt.Errorf("oauth2: cannot fetch token: %v", err) + } + if c := resp.StatusCode; c < 200 || c > 299 { + return nil, &oauth2.RetrieveError{ + Response: resp, + Body: body, + } + } + // tokenRes is the JSON response body. + var tokenRes struct { + AccessToken string `json:"access_token"` + TokenType string `json:"token_type"` + IDToken string `json:"id_token"` + ExpiresIn int64 `json:"expires_in"` // relative seconds from now + } + if err := json.Unmarshal(body, &tokenRes); err != nil { + return nil, fmt.Errorf("oauth2: cannot fetch token: %v", err) + } + token := &oauth2.Token{ + AccessToken: tokenRes.AccessToken, + TokenType: tokenRes.TokenType, + } + raw := make(map[string]interface{}) + json.Unmarshal(body, &raw) // no error checks for optional fields + token = token.WithExtra(raw) + + if secs := tokenRes.ExpiresIn; secs > 0 { + token.Expiry = time.Now().Add(time.Duration(secs) * time.Second) + } + if v := tokenRes.IDToken; v != "" { + // decode returned id token to get expiry + claimSet, err := jws.Decode(v) + if err != nil { + return nil, fmt.Errorf("oauth2: error decoding JWT token: %v", err) + } + token.Expiry = time.Unix(claimSet.Exp, 0) + } + return token, nil +} diff --git a/vendor/golang.org/x/oauth2/oauth2.go b/vendor/golang.org/x/oauth2/oauth2.go new file mode 100644 index 00000000..10299d2e --- /dev/null +++ b/vendor/golang.org/x/oauth2/oauth2.go @@ -0,0 +1,354 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package oauth2 provides support for making +// OAuth2 authorized and authenticated HTTP requests, +// as specified in RFC 6749. +// It can additionally grant authorization with Bearer JWT. +package oauth2 // import "golang.org/x/oauth2" + +import ( + "bytes" + "errors" + "net/http" + "net/url" + "strings" + "sync" + + "golang.org/x/net/context" + "golang.org/x/oauth2/internal" +) + +// NoContext is the default context you should supply if not using +// your own context.Context (see https://golang.org/x/net/context). +// +// Deprecated: Use context.Background() or context.TODO() instead. +var NoContext = context.TODO() + +// RegisterBrokenAuthHeaderProvider registers an OAuth2 server +// identified by the tokenURL prefix as an OAuth2 implementation +// which doesn't support the HTTP Basic authentication +// scheme to authenticate with the authorization server. +// Once a server is registered, credentials (client_id and client_secret) +// will be passed as query parameters rather than being present +// in the Authorization header. +// See https://code.google.com/p/goauth2/issues/detail?id=31 for background. +func RegisterBrokenAuthHeaderProvider(tokenURL string) { + internal.RegisterBrokenAuthHeaderProvider(tokenURL) +} + +// Config describes a typical 3-legged OAuth2 flow, with both the +// client application information and the server's endpoint URLs. +// For the client credentials 2-legged OAuth2 flow, see the clientcredentials +// package (https://golang.org/x/oauth2/clientcredentials). +type Config struct { + // ClientID is the application's ID. + ClientID string + + // ClientSecret is the application's secret. + ClientSecret string + + // Endpoint contains the resource server's token endpoint + // URLs. These are constants specific to each server and are + // often available via site-specific packages, such as + // google.Endpoint or github.Endpoint. + Endpoint Endpoint + + // RedirectURL is the URL to redirect users going through + // the OAuth flow, after the resource owner's URLs. + RedirectURL string + + // Scope specifies optional requested permissions. + Scopes []string +} + +// A TokenSource is anything that can return a token. +type TokenSource interface { + // Token returns a token or an error. + // Token must be safe for concurrent use by multiple goroutines. + // The returned Token must not be modified. + Token() (*Token, error) +} + +// Endpoint contains the OAuth 2.0 provider's authorization and token +// endpoint URLs. +type Endpoint struct { + AuthURL string + TokenURL string +} + +var ( + // AccessTypeOnline and AccessTypeOffline are options passed + // to the Options.AuthCodeURL method. They modify the + // "access_type" field that gets sent in the URL returned by + // AuthCodeURL. + // + // Online is the default if neither is specified. If your + // application needs to refresh access tokens when the user + // is not present at the browser, then use offline. This will + // result in your application obtaining a refresh token the + // first time your application exchanges an authorization + // code for a user. + AccessTypeOnline AuthCodeOption = SetAuthURLParam("access_type", "online") + AccessTypeOffline AuthCodeOption = SetAuthURLParam("access_type", "offline") + + // ApprovalForce forces the users to view the consent dialog + // and confirm the permissions request at the URL returned + // from AuthCodeURL, even if they've already done so. + ApprovalForce AuthCodeOption = SetAuthURLParam("approval_prompt", "force") +) + +// An AuthCodeOption is passed to Config.AuthCodeURL. +type AuthCodeOption interface { + setValue(url.Values) +} + +type setParam struct{ k, v string } + +func (p setParam) setValue(m url.Values) { m.Set(p.k, p.v) } + +// SetAuthURLParam builds an AuthCodeOption which passes key/value parameters +// to a provider's authorization endpoint. +func SetAuthURLParam(key, value string) AuthCodeOption { + return setParam{key, value} +} + +// AuthCodeURL returns a URL to OAuth 2.0 provider's consent page +// that asks for permissions for the required scopes explicitly. +// +// State is a token to protect the user from CSRF attacks. You must +// always provide a non-empty string and validate that it matches the +// the state query parameter on your redirect callback. +// See http://tools.ietf.org/html/rfc6749#section-10.12 for more info. +// +// Opts may include AccessTypeOnline or AccessTypeOffline, as well +// as ApprovalForce. +func (c *Config) AuthCodeURL(state string, opts ...AuthCodeOption) string { + var buf bytes.Buffer + buf.WriteString(c.Endpoint.AuthURL) + v := url.Values{ + "response_type": {"code"}, + "client_id": {c.ClientID}, + } + if c.RedirectURL != "" { + v.Set("redirect_uri", c.RedirectURL) + } + if len(c.Scopes) > 0 { + v.Set("scope", strings.Join(c.Scopes, " ")) + } + if state != "" { + // TODO(light): Docs say never to omit state; don't allow empty. + v.Set("state", state) + } + for _, opt := range opts { + opt.setValue(v) + } + if strings.Contains(c.Endpoint.AuthURL, "?") { + buf.WriteByte('&') + } else { + buf.WriteByte('?') + } + buf.WriteString(v.Encode()) + return buf.String() +} + +// PasswordCredentialsToken converts a resource owner username and password +// pair into a token. +// +// Per the RFC, this grant type should only be used "when there is a high +// degree of trust between the resource owner and the client (e.g., the client +// is part of the device operating system or a highly privileged application), +// and when other authorization grant types are not available." +// See https://tools.ietf.org/html/rfc6749#section-4.3 for more info. +// +// The HTTP client to use is derived from the context. +// If nil, http.DefaultClient is used. +func (c *Config) PasswordCredentialsToken(ctx context.Context, username, password string) (*Token, error) { + v := url.Values{ + "grant_type": {"password"}, + "username": {username}, + "password": {password}, + } + if len(c.Scopes) > 0 { + v.Set("scope", strings.Join(c.Scopes, " ")) + } + return retrieveToken(ctx, c, v) +} + +// Exchange converts an authorization code into a token. +// +// It is used after a resource provider redirects the user back +// to the Redirect URI (the URL obtained from AuthCodeURL). +// +// The HTTP client to use is derived from the context. +// If a client is not provided via the context, http.DefaultClient is used. +// +// The code will be in the *http.Request.FormValue("code"). Before +// calling Exchange, be sure to validate FormValue("state"). +func (c *Config) Exchange(ctx context.Context, code string) (*Token, error) { + v := url.Values{ + "grant_type": {"authorization_code"}, + "code": {code}, + } + if c.RedirectURL != "" { + v.Set("redirect_uri", c.RedirectURL) + } + return retrieveToken(ctx, c, v) +} + +// Client returns an HTTP client using the provided token. +// The token will auto-refresh as necessary. The underlying +// HTTP transport will be obtained using the provided context. +// The returned client and its Transport should not be modified. +func (c *Config) Client(ctx context.Context, t *Token) *http.Client { + return NewClient(ctx, c.TokenSource(ctx, t)) +} + +// TokenSource returns a TokenSource that returns t until t expires, +// automatically refreshing it as necessary using the provided context. +// +// Most users will use Config.Client instead. +func (c *Config) TokenSource(ctx context.Context, t *Token) TokenSource { + tkr := &tokenRefresher{ + ctx: ctx, + conf: c, + } + if t != nil { + tkr.refreshToken = t.RefreshToken + } + return &reuseTokenSource{ + t: t, + new: tkr, + } +} + +// tokenRefresher is a TokenSource that makes "grant_type"=="refresh_token" +// HTTP requests to renew a token using a RefreshToken. +type tokenRefresher struct { + ctx context.Context // used to get HTTP requests + conf *Config + refreshToken string +} + +// WARNING: Token is not safe for concurrent access, as it +// updates the tokenRefresher's refreshToken field. +// Within this package, it is used by reuseTokenSource which +// synchronizes calls to this method with its own mutex. +func (tf *tokenRefresher) Token() (*Token, error) { + if tf.refreshToken == "" { + return nil, errors.New("oauth2: token expired and refresh token is not set") + } + + tk, err := retrieveToken(tf.ctx, tf.conf, url.Values{ + "grant_type": {"refresh_token"}, + "refresh_token": {tf.refreshToken}, + }) + + if err != nil { + return nil, err + } + if tf.refreshToken != tk.RefreshToken { + tf.refreshToken = tk.RefreshToken + } + return tk, err +} + +// reuseTokenSource is a TokenSource that holds a single token in memory +// and validates its expiry before each call to retrieve it with +// Token. If it's expired, it will be auto-refreshed using the +// new TokenSource. +type reuseTokenSource struct { + new TokenSource // called when t is expired. + + mu sync.Mutex // guards t + t *Token +} + +// Token returns the current token if it's still valid, else will +// refresh the current token (using r.Context for HTTP client +// information) and return the new one. +func (s *reuseTokenSource) Token() (*Token, error) { + s.mu.Lock() + defer s.mu.Unlock() + if s.t.Valid() { + return s.t, nil + } + t, err := s.new.Token() + if err != nil { + return nil, err + } + s.t = t + return t, nil +} + +// StaticTokenSource returns a TokenSource that always returns the same token. +// Because the provided token t is never refreshed, StaticTokenSource is only +// useful for tokens that never expire. +func StaticTokenSource(t *Token) TokenSource { + return staticTokenSource{t} +} + +// staticTokenSource is a TokenSource that always returns the same Token. +type staticTokenSource struct { + t *Token +} + +func (s staticTokenSource) Token() (*Token, error) { + return s.t, nil +} + +// HTTPClient is the context key to use with golang.org/x/net/context's +// WithValue function to associate an *http.Client value with a context. +var HTTPClient internal.ContextKey + +// NewClient creates an *http.Client from a Context and TokenSource. +// The returned client is not valid beyond the lifetime of the context. +// +// Note that if a custom *http.Client is provided via the Context it +// is used only for token acquisition and is not used to configure the +// *http.Client returned from NewClient. +// +// As a special case, if src is nil, a non-OAuth2 client is returned +// using the provided context. This exists to support related OAuth2 +// packages. +func NewClient(ctx context.Context, src TokenSource) *http.Client { + if src == nil { + return internal.ContextClient(ctx) + } + return &http.Client{ + Transport: &Transport{ + Base: internal.ContextClient(ctx).Transport, + Source: ReuseTokenSource(nil, src), + }, + } +} + +// ReuseTokenSource returns a TokenSource which repeatedly returns the +// same token as long as it's valid, starting with t. +// When its cached token is invalid, a new token is obtained from src. +// +// ReuseTokenSource is typically used to reuse tokens from a cache +// (such as a file on disk) between runs of a program, rather than +// obtaining new tokens unnecessarily. +// +// The initial token t may be nil, in which case the TokenSource is +// wrapped in a caching version if it isn't one already. This also +// means it's always safe to wrap ReuseTokenSource around any other +// TokenSource without adverse effects. +func ReuseTokenSource(t *Token, src TokenSource) TokenSource { + // Don't wrap a reuseTokenSource in itself. That would work, + // but cause an unnecessary number of mutex operations. + // Just build the equivalent one. + if rt, ok := src.(*reuseTokenSource); ok { + if t == nil { + // Just use it directly. + return rt + } + src = rt.new + } + return &reuseTokenSource{ + t: t, + new: src, + } +} diff --git a/vendor/golang.org/x/oauth2/token.go b/vendor/golang.org/x/oauth2/token.go new file mode 100644 index 00000000..34db8cdc --- /dev/null +++ b/vendor/golang.org/x/oauth2/token.go @@ -0,0 +1,175 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package oauth2 + +import ( + "fmt" + "net/http" + "net/url" + "strconv" + "strings" + "time" + + "golang.org/x/net/context" + "golang.org/x/oauth2/internal" +) + +// expiryDelta determines how earlier a token should be considered +// expired than its actual expiration time. It is used to avoid late +// expirations due to client-server time mismatches. +const expiryDelta = 10 * time.Second + +// Token represents the credentials used to authorize +// the requests to access protected resources on the OAuth 2.0 +// provider's backend. +// +// Most users of this package should not access fields of Token +// directly. They're exported mostly for use by related packages +// implementing derivative OAuth2 flows. +type Token struct { + // AccessToken is the token that authorizes and authenticates + // the requests. + AccessToken string `json:"access_token"` + + // TokenType is the type of token. + // The Type method returns either this or "Bearer", the default. + TokenType string `json:"token_type,omitempty"` + + // RefreshToken is a token that's used by the application + // (as opposed to the user) to refresh the access token + // if it expires. + RefreshToken string `json:"refresh_token,omitempty"` + + // Expiry is the optional expiration time of the access token. + // + // If zero, TokenSource implementations will reuse the same + // token forever and RefreshToken or equivalent + // mechanisms for that TokenSource will not be used. + Expiry time.Time `json:"expiry,omitempty"` + + // raw optionally contains extra metadata from the server + // when updating a token. + raw interface{} +} + +// Type returns t.TokenType if non-empty, else "Bearer". +func (t *Token) Type() string { + if strings.EqualFold(t.TokenType, "bearer") { + return "Bearer" + } + if strings.EqualFold(t.TokenType, "mac") { + return "MAC" + } + if strings.EqualFold(t.TokenType, "basic") { + return "Basic" + } + if t.TokenType != "" { + return t.TokenType + } + return "Bearer" +} + +// SetAuthHeader sets the Authorization header to r using the access +// token in t. +// +// This method is unnecessary when using Transport or an HTTP Client +// returned by this package. +func (t *Token) SetAuthHeader(r *http.Request) { + r.Header.Set("Authorization", t.Type()+" "+t.AccessToken) +} + +// WithExtra returns a new Token that's a clone of t, but using the +// provided raw extra map. This is only intended for use by packages +// implementing derivative OAuth2 flows. +func (t *Token) WithExtra(extra interface{}) *Token { + t2 := new(Token) + *t2 = *t + t2.raw = extra + return t2 +} + +// Extra returns an extra field. +// Extra fields are key-value pairs returned by the server as a +// part of the token retrieval response. +func (t *Token) Extra(key string) interface{} { + if raw, ok := t.raw.(map[string]interface{}); ok { + return raw[key] + } + + vals, ok := t.raw.(url.Values) + if !ok { + return nil + } + + v := vals.Get(key) + switch s := strings.TrimSpace(v); strings.Count(s, ".") { + case 0: // Contains no "."; try to parse as int + if i, err := strconv.ParseInt(s, 10, 64); err == nil { + return i + } + case 1: // Contains a single "."; try to parse as float + if f, err := strconv.ParseFloat(s, 64); err == nil { + return f + } + } + + return v +} + +// expired reports whether the token is expired. +// t must be non-nil. +func (t *Token) expired() bool { + if t.Expiry.IsZero() { + return false + } + return t.Expiry.Round(0).Add(-expiryDelta).Before(time.Now()) +} + +// Valid reports whether t is non-nil, has an AccessToken, and is not expired. +func (t *Token) Valid() bool { + return t != nil && t.AccessToken != "" && !t.expired() +} + +// tokenFromInternal maps an *internal.Token struct into +// a *Token struct. +func tokenFromInternal(t *internal.Token) *Token { + if t == nil { + return nil + } + return &Token{ + AccessToken: t.AccessToken, + TokenType: t.TokenType, + RefreshToken: t.RefreshToken, + Expiry: t.Expiry, + raw: t.Raw, + } +} + +// retrieveToken takes a *Config and uses that to retrieve an *internal.Token. +// This token is then mapped from *internal.Token into an *oauth2.Token which is returned along +// with an error.. +func retrieveToken(ctx context.Context, c *Config, v url.Values) (*Token, error) { + tk, err := internal.RetrieveToken(ctx, c.ClientID, c.ClientSecret, c.Endpoint.TokenURL, v) + if err != nil { + if rErr, ok := err.(*internal.RetrieveError); ok { + return nil, (*RetrieveError)(rErr) + } + return nil, err + } + return tokenFromInternal(tk), nil +} + +// RetrieveError is the error returned when the token endpoint returns a +// non-2XX HTTP status code. +type RetrieveError struct { + Response *http.Response + // Body is the body that was consumed by reading Response.Body. + // It may be truncated. + Body []byte +} + +func (r *RetrieveError) Error() string { + return fmt.Sprintf("oauth2: cannot fetch token: %v\nResponse: %s", r.Response.Status, r.Body) +} diff --git a/vendor/golang.org/x/oauth2/transport.go b/vendor/golang.org/x/oauth2/transport.go new file mode 100644 index 00000000..aa0d34f1 --- /dev/null +++ b/vendor/golang.org/x/oauth2/transport.go @@ -0,0 +1,144 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package oauth2 + +import ( + "errors" + "io" + "net/http" + "sync" +) + +// Transport is an http.RoundTripper that makes OAuth 2.0 HTTP requests, +// wrapping a base RoundTripper and adding an Authorization header +// with a token from the supplied Sources. +// +// Transport is a low-level mechanism. Most code will use the +// higher-level Config.Client method instead. +type Transport struct { + // Source supplies the token to add to outgoing requests' + // Authorization headers. + Source TokenSource + + // Base is the base RoundTripper used to make HTTP requests. + // If nil, http.DefaultTransport is used. + Base http.RoundTripper + + mu sync.Mutex // guards modReq + modReq map[*http.Request]*http.Request // original -> modified +} + +// RoundTrip authorizes and authenticates the request with an +// access token from Transport's Source. +func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) { + reqBodyClosed := false + if req.Body != nil { + defer func() { + if !reqBodyClosed { + req.Body.Close() + } + }() + } + + if t.Source == nil { + return nil, errors.New("oauth2: Transport's Source is nil") + } + token, err := t.Source.Token() + if err != nil { + return nil, err + } + + req2 := cloneRequest(req) // per RoundTripper contract + token.SetAuthHeader(req2) + t.setModReq(req, req2) + res, err := t.base().RoundTrip(req2) + + // req.Body is assumed to have been closed by the base RoundTripper. + reqBodyClosed = true + + if err != nil { + t.setModReq(req, nil) + return nil, err + } + res.Body = &onEOFReader{ + rc: res.Body, + fn: func() { t.setModReq(req, nil) }, + } + return res, nil +} + +// CancelRequest cancels an in-flight request by closing its connection. +func (t *Transport) CancelRequest(req *http.Request) { + type canceler interface { + CancelRequest(*http.Request) + } + if cr, ok := t.base().(canceler); ok { + t.mu.Lock() + modReq := t.modReq[req] + delete(t.modReq, req) + t.mu.Unlock() + cr.CancelRequest(modReq) + } +} + +func (t *Transport) base() http.RoundTripper { + if t.Base != nil { + return t.Base + } + return http.DefaultTransport +} + +func (t *Transport) setModReq(orig, mod *http.Request) { + t.mu.Lock() + defer t.mu.Unlock() + if t.modReq == nil { + t.modReq = make(map[*http.Request]*http.Request) + } + if mod == nil { + delete(t.modReq, orig) + } else { + t.modReq[orig] = mod + } +} + +// cloneRequest returns a clone of the provided *http.Request. +// The clone is a shallow copy of the struct and its Header map. +func cloneRequest(r *http.Request) *http.Request { + // shallow copy of the struct + r2 := new(http.Request) + *r2 = *r + // deep copy of the Header + r2.Header = make(http.Header, len(r.Header)) + for k, s := range r.Header { + r2.Header[k] = append([]string(nil), s...) + } + return r2 +} + +type onEOFReader struct { + rc io.ReadCloser + fn func() +} + +func (r *onEOFReader) Read(p []byte) (n int, err error) { + n, err = r.rc.Read(p) + if err == io.EOF { + r.runFunc() + } + return +} + +func (r *onEOFReader) Close() error { + err := r.rc.Close() + r.runFunc() + return err +} + +func (r *onEOFReader) runFunc() { + if fn := r.fn; fn != nil { + fn() + r.fn = nil + } +} diff --git a/vendor/golang.org/x/text/AUTHORS b/vendor/golang.org/x/text/AUTHORS new file mode 100644 index 00000000..15167cd7 --- /dev/null +++ b/vendor/golang.org/x/text/AUTHORS @@ -0,0 +1,3 @@ +# This source code refers to The Go Authors for copyright purposes. +# The master list of authors is in the main Go distribution, +# visible at http://tip.golang.org/AUTHORS. diff --git a/vendor/golang.org/x/text/CONTRIBUTORS b/vendor/golang.org/x/text/CONTRIBUTORS new file mode 100644 index 00000000..1c4577e9 --- /dev/null +++ b/vendor/golang.org/x/text/CONTRIBUTORS @@ -0,0 +1,3 @@ +# This source code was written by the Go contributors. +# The master list of contributors is in the main Go distribution, +# visible at http://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/golang.org/x/text/LICENSE b/vendor/golang.org/x/text/LICENSE new file mode 100644 index 00000000..6a66aea5 --- /dev/null +++ b/vendor/golang.org/x/text/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/golang.org/x/text/PATENTS b/vendor/golang.org/x/text/PATENTS new file mode 100644 index 00000000..73309904 --- /dev/null +++ b/vendor/golang.org/x/text/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. diff --git a/vendor/golang.org/x/text/encoding/encoding.go b/vendor/golang.org/x/text/encoding/encoding.go new file mode 100644 index 00000000..221f175c --- /dev/null +++ b/vendor/golang.org/x/text/encoding/encoding.go @@ -0,0 +1,335 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package encoding defines an interface for character encodings, such as Shift +// JIS and Windows 1252, that can convert to and from UTF-8. +// +// Encoding implementations are provided in other packages, such as +// golang.org/x/text/encoding/charmap and +// golang.org/x/text/encoding/japanese. +package encoding // import "golang.org/x/text/encoding" + +import ( + "errors" + "io" + "strconv" + "unicode/utf8" + + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/transform" +) + +// TODO: +// - There seems to be some inconsistency in when decoders return errors +// and when not. Also documentation seems to suggest they shouldn't return +// errors at all (except for UTF-16). +// - Encoders seem to rely on or at least benefit from the input being in NFC +// normal form. Perhaps add an example how users could prepare their output. + +// Encoding is a character set encoding that can be transformed to and from +// UTF-8. +type Encoding interface { + // NewDecoder returns a Decoder. + NewDecoder() *Decoder + + // NewEncoder returns an Encoder. + NewEncoder() *Encoder +} + +// A Decoder converts bytes to UTF-8. It implements transform.Transformer. +// +// Transforming source bytes that are not of that encoding will not result in an +// error per se. Each byte that cannot be transcoded will be represented in the +// output by the UTF-8 encoding of '\uFFFD', the replacement rune. +type Decoder struct { + transform.Transformer + + // This forces external creators of Decoders to use names in struct + // initializers, allowing for future extendibility without having to break + // code. + _ struct{} +} + +// Bytes converts the given encoded bytes to UTF-8. It returns the converted +// bytes or nil, err if any error occurred. +func (d *Decoder) Bytes(b []byte) ([]byte, error) { + b, _, err := transform.Bytes(d, b) + if err != nil { + return nil, err + } + return b, nil +} + +// String converts the given encoded string to UTF-8. It returns the converted +// string or "", err if any error occurred. +func (d *Decoder) String(s string) (string, error) { + s, _, err := transform.String(d, s) + if err != nil { + return "", err + } + return s, nil +} + +// Reader wraps another Reader to decode its bytes. +// +// The Decoder may not be used for any other operation as long as the returned +// Reader is in use. +func (d *Decoder) Reader(r io.Reader) io.Reader { + return transform.NewReader(r, d) +} + +// An Encoder converts bytes from UTF-8. It implements transform.Transformer. +// +// Each rune that cannot be transcoded will result in an error. In this case, +// the transform will consume all source byte up to, not including the offending +// rune. Transforming source bytes that are not valid UTF-8 will be replaced by +// `\uFFFD`. To return early with an error instead, use transform.Chain to +// preprocess the data with a UTF8Validator. +type Encoder struct { + transform.Transformer + + // This forces external creators of Encoders to use names in struct + // initializers, allowing for future extendibility without having to break + // code. + _ struct{} +} + +// Bytes converts bytes from UTF-8. It returns the converted bytes or nil, err if +// any error occurred. +func (e *Encoder) Bytes(b []byte) ([]byte, error) { + b, _, err := transform.Bytes(e, b) + if err != nil { + return nil, err + } + return b, nil +} + +// String converts a string from UTF-8. It returns the converted string or +// "", err if any error occurred. +func (e *Encoder) String(s string) (string, error) { + s, _, err := transform.String(e, s) + if err != nil { + return "", err + } + return s, nil +} + +// Writer wraps another Writer to encode its UTF-8 output. +// +// The Encoder may not be used for any other operation as long as the returned +// Writer is in use. +func (e *Encoder) Writer(w io.Writer) io.Writer { + return transform.NewWriter(w, e) +} + +// ASCIISub is the ASCII substitute character, as recommended by +// http://unicode.org/reports/tr36/#Text_Comparison +const ASCIISub = '\x1a' + +// Nop is the nop encoding. Its transformed bytes are the same as the source +// bytes; it does not replace invalid UTF-8 sequences. +var Nop Encoding = nop{} + +type nop struct{} + +func (nop) NewDecoder() *Decoder { + return &Decoder{Transformer: transform.Nop} +} +func (nop) NewEncoder() *Encoder { + return &Encoder{Transformer: transform.Nop} +} + +// Replacement is the replacement encoding. Decoding from the replacement +// encoding yields a single '\uFFFD' replacement rune. Encoding from UTF-8 to +// the replacement encoding yields the same as the source bytes except that +// invalid UTF-8 is converted to '\uFFFD'. +// +// It is defined at http://encoding.spec.whatwg.org/#replacement +var Replacement Encoding = replacement{} + +type replacement struct{} + +func (replacement) NewDecoder() *Decoder { + return &Decoder{Transformer: replacementDecoder{}} +} + +func (replacement) NewEncoder() *Encoder { + return &Encoder{Transformer: replacementEncoder{}} +} + +func (replacement) ID() (mib identifier.MIB, other string) { + return identifier.Replacement, "" +} + +type replacementDecoder struct{ transform.NopResetter } + +func (replacementDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + if len(dst) < 3 { + return 0, 0, transform.ErrShortDst + } + if atEOF { + const fffd = "\ufffd" + dst[0] = fffd[0] + dst[1] = fffd[1] + dst[2] = fffd[2] + nDst = 3 + } + return nDst, len(src), nil +} + +type replacementEncoder struct{ transform.NopResetter } + +func (replacementEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size := rune(0), 0 + + for ; nSrc < len(src); nSrc += size { + r = rune(src[nSrc]) + + // Decode a 1-byte rune. + if r < utf8.RuneSelf { + size = 1 + + } else { + // Decode a multi-byte rune. + r, size = utf8.DecodeRune(src[nSrc:]) + if size == 1 { + // All valid runes of size 1 (those below utf8.RuneSelf) were + // handled above. We have invalid UTF-8 or we haven't seen the + // full character yet. + if !atEOF && !utf8.FullRune(src[nSrc:]) { + err = transform.ErrShortSrc + break + } + r = '\ufffd' + } + } + + if nDst+utf8.RuneLen(r) > len(dst) { + err = transform.ErrShortDst + break + } + nDst += utf8.EncodeRune(dst[nDst:], r) + } + return nDst, nSrc, err +} + +// HTMLEscapeUnsupported wraps encoders to replace source runes outside the +// repertoire of the destination encoding with HTML escape sequences. +// +// This wrapper exists to comply to URL and HTML forms requiring a +// non-terminating legacy encoder. The produced sequences may lead to data +// loss as they are indistinguishable from legitimate input. To avoid this +// issue, use UTF-8 encodings whenever possible. +func HTMLEscapeUnsupported(e *Encoder) *Encoder { + return &Encoder{Transformer: &errorHandler{e, errorToHTML}} +} + +// ReplaceUnsupported wraps encoders to replace source runes outside the +// repertoire of the destination encoding with an encoding-specific +// replacement. +// +// This wrapper is only provided for backwards compatibility and legacy +// handling. Its use is strongly discouraged. Use UTF-8 whenever possible. +func ReplaceUnsupported(e *Encoder) *Encoder { + return &Encoder{Transformer: &errorHandler{e, errorToReplacement}} +} + +type errorHandler struct { + *Encoder + handler func(dst []byte, r rune, err repertoireError) (n int, ok bool) +} + +// TODO: consider making this error public in some form. +type repertoireError interface { + Replacement() byte +} + +func (h errorHandler) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + nDst, nSrc, err = h.Transformer.Transform(dst, src, atEOF) + for err != nil { + rerr, ok := err.(repertoireError) + if !ok { + return nDst, nSrc, err + } + r, sz := utf8.DecodeRune(src[nSrc:]) + n, ok := h.handler(dst[nDst:], r, rerr) + if !ok { + return nDst, nSrc, transform.ErrShortDst + } + err = nil + nDst += n + if nSrc += sz; nSrc < len(src) { + var dn, sn int + dn, sn, err = h.Transformer.Transform(dst[nDst:], src[nSrc:], atEOF) + nDst += dn + nSrc += sn + } + } + return nDst, nSrc, err +} + +func errorToHTML(dst []byte, r rune, err repertoireError) (n int, ok bool) { + buf := [8]byte{} + b := strconv.AppendUint(buf[:0], uint64(r), 10) + if n = len(b) + len("&#;"); n >= len(dst) { + return 0, false + } + dst[0] = '&' + dst[1] = '#' + dst[copy(dst[2:], b)+2] = ';' + return n, true +} + +func errorToReplacement(dst []byte, r rune, err repertoireError) (n int, ok bool) { + if len(dst) == 0 { + return 0, false + } + dst[0] = err.Replacement() + return 1, true +} + +// ErrInvalidUTF8 means that a transformer encountered invalid UTF-8. +var ErrInvalidUTF8 = errors.New("encoding: invalid UTF-8") + +// UTF8Validator is a transformer that returns ErrInvalidUTF8 on the first +// input byte that is not valid UTF-8. +var UTF8Validator transform.Transformer = utf8Validator{} + +type utf8Validator struct{ transform.NopResetter } + +func (utf8Validator) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + n := len(src) + if n > len(dst) { + n = len(dst) + } + for i := 0; i < n; { + if c := src[i]; c < utf8.RuneSelf { + dst[i] = c + i++ + continue + } + _, size := utf8.DecodeRune(src[i:]) + if size == 1 { + // All valid runes of size 1 (those below utf8.RuneSelf) were + // handled above. We have invalid UTF-8 or we haven't seen the + // full character yet. + err = ErrInvalidUTF8 + if !atEOF && !utf8.FullRune(src[i:]) { + err = transform.ErrShortSrc + } + return i, i, err + } + if i+size > len(dst) { + return i, i, transform.ErrShortDst + } + for ; size > 0; size-- { + dst[i] = src[i] + i++ + } + } + if len(src) > len(dst) { + err = transform.ErrShortDst + } + return n, n, err +} diff --git a/vendor/golang.org/x/text/encoding/internal/identifier/gen.go b/vendor/golang.org/x/text/encoding/internal/identifier/gen.go new file mode 100644 index 00000000..0c8eba7e --- /dev/null +++ b/vendor/golang.org/x/text/encoding/internal/identifier/gen.go @@ -0,0 +1,137 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +import ( + "bytes" + "encoding/xml" + "fmt" + "io" + "log" + "strings" + + "golang.org/x/text/internal/gen" +) + +type registry struct { + XMLName xml.Name `xml:"registry"` + Updated string `xml:"updated"` + Registry []struct { + ID string `xml:"id,attr"` + Record []struct { + Name string `xml:"name"` + Xref []struct { + Type string `xml:"type,attr"` + Data string `xml:"data,attr"` + } `xml:"xref"` + Desc struct { + Data string `xml:",innerxml"` + // Any []struct { + // Data string `xml:",chardata"` + // } `xml:",any"` + // Data string `xml:",chardata"` + } `xml:"description,"` + MIB string `xml:"value"` + Alias []string `xml:"alias"` + MIME string `xml:"preferred_alias"` + } `xml:"record"` + } `xml:"registry"` +} + +func main() { + r := gen.OpenIANAFile("assignments/character-sets/character-sets.xml") + reg := ®istry{} + if err := xml.NewDecoder(r).Decode(®); err != nil && err != io.EOF { + log.Fatalf("Error decoding charset registry: %v", err) + } + if len(reg.Registry) == 0 || reg.Registry[0].ID != "character-sets-1" { + log.Fatalf("Unexpected ID %s", reg.Registry[0].ID) + } + + w := &bytes.Buffer{} + fmt.Fprintf(w, "const (\n") + for _, rec := range reg.Registry[0].Record { + constName := "" + for _, a := range rec.Alias { + if strings.HasPrefix(a, "cs") && strings.IndexByte(a, '-') == -1 { + // Some of the constant definitions have comments in them. Strip those. + constName = strings.Title(strings.SplitN(a[2:], "\n", 2)[0]) + } + } + if constName == "" { + switch rec.MIB { + case "2085": + constName = "HZGB2312" // Not listed as alias for some reason. + default: + log.Fatalf("No cs alias defined for %s.", rec.MIB) + } + } + if rec.MIME != "" { + rec.MIME = fmt.Sprintf(" (MIME: %s)", rec.MIME) + } + fmt.Fprintf(w, "// %s is the MIB identifier with IANA name %s%s.\n//\n", constName, rec.Name, rec.MIME) + if len(rec.Desc.Data) > 0 { + fmt.Fprint(w, "// ") + d := xml.NewDecoder(strings.NewReader(rec.Desc.Data)) + inElem := true + attr := "" + for { + t, err := d.Token() + if err != nil { + if err != io.EOF { + log.Fatal(err) + } + break + } + switch x := t.(type) { + case xml.CharData: + attr = "" // Don't need attribute info. + a := bytes.Split([]byte(x), []byte("\n")) + for i, b := range a { + if b = bytes.TrimSpace(b); len(b) != 0 { + if !inElem && i > 0 { + fmt.Fprint(w, "\n// ") + } + inElem = false + fmt.Fprintf(w, "%s ", string(b)) + } + } + case xml.StartElement: + if x.Name.Local == "xref" { + inElem = true + use := false + for _, a := range x.Attr { + if a.Name.Local == "type" { + use = use || a.Value != "person" + } + if a.Name.Local == "data" && use { + attr = a.Value + " " + } + } + } + case xml.EndElement: + inElem = false + fmt.Fprint(w, attr) + } + } + fmt.Fprint(w, "\n") + } + for _, x := range rec.Xref { + switch x.Type { + case "rfc": + fmt.Fprintf(w, "// Reference: %s\n", strings.ToUpper(x.Data)) + case "uri": + fmt.Fprintf(w, "// Reference: %s\n", x.Data) + } + } + fmt.Fprintf(w, "%s MIB = %s\n", constName, rec.MIB) + fmt.Fprintln(w) + } + fmt.Fprintln(w, ")") + + gen.WriteGoFile("mib.go", "identifier", w.Bytes()) +} diff --git a/vendor/golang.org/x/text/encoding/internal/identifier/identifier.go b/vendor/golang.org/x/text/encoding/internal/identifier/identifier.go new file mode 100644 index 00000000..7351b4ef --- /dev/null +++ b/vendor/golang.org/x/text/encoding/internal/identifier/identifier.go @@ -0,0 +1,81 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run gen.go + +// Package identifier defines the contract between implementations of Encoding +// and Index by defining identifiers that uniquely identify standardized coded +// character sets (CCS) and character encoding schemes (CES), which we will +// together refer to as encodings, for which Encoding implementations provide +// converters to and from UTF-8. This package is typically only of concern to +// implementers of Indexes and Encodings. +// +// One part of the identifier is the MIB code, which is defined by IANA and +// uniquely identifies a CCS or CES. Each code is associated with data that +// references authorities, official documentation as well as aliases and MIME +// names. +// +// Not all CESs are covered by the IANA registry. The "other" string that is +// returned by ID can be used to identify other character sets or versions of +// existing ones. +// +// It is recommended that each package that provides a set of Encodings provide +// the All and Common variables to reference all supported encodings and +// commonly used subset. This allows Index implementations to include all +// available encodings without explicitly referencing or knowing about them. +package identifier + +// Note: this package is internal, but could be made public if there is a need +// for writing third-party Indexes and Encodings. + +// References: +// - http://source.icu-project.org/repos/icu/icu/trunk/source/data/mappings/convrtrs.txt +// - http://www.iana.org/assignments/character-sets/character-sets.xhtml +// - http://www.iana.org/assignments/ianacharset-mib/ianacharset-mib +// - http://www.ietf.org/rfc/rfc2978.txt +// - http://www.unicode.org/reports/tr22/ +// - http://www.w3.org/TR/encoding/ +// - https://encoding.spec.whatwg.org/ +// - https://encoding.spec.whatwg.org/encodings.json +// - https://tools.ietf.org/html/rfc6657#section-5 + +// Interface can be implemented by Encodings to define the CCS or CES for which +// it implements conversions. +type Interface interface { + // ID returns an encoding identifier. Exactly one of the mib and other + // values should be non-zero. + // + // In the usual case it is only necessary to indicate the MIB code. The + // other string can be used to specify encodings for which there is no MIB, + // such as "x-mac-dingbat". + // + // The other string may only contain the characters a-z, A-Z, 0-9, - and _. + ID() (mib MIB, other string) + + // NOTE: the restrictions on the encoding are to allow extending the syntax + // with additional information such as versions, vendors and other variants. +} + +// A MIB identifies an encoding. It is derived from the IANA MIB codes and adds +// some identifiers for some encodings that are not covered by the IANA +// standard. +// +// See http://www.iana.org/assignments/ianacharset-mib. +type MIB uint16 + +// These additional MIB types are not defined in IANA. They are added because +// they are common and defined within the text repo. +const ( + // Unofficial marks the start of encodings not registered by IANA. + Unofficial MIB = 10000 + iota + + // Replacement is the WhatWG replacement encoding. + Replacement + + // XUserDefined is the code for x-user-defined. + XUserDefined + + // MacintoshCyrillic is the code for x-mac-cyrillic. + MacintoshCyrillic +) diff --git a/vendor/golang.org/x/text/encoding/internal/identifier/mib.go b/vendor/golang.org/x/text/encoding/internal/identifier/mib.go new file mode 100644 index 00000000..768842b0 --- /dev/null +++ b/vendor/golang.org/x/text/encoding/internal/identifier/mib.go @@ -0,0 +1,1621 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package identifier + +const ( + // ASCII is the MIB identifier with IANA name US-ASCII (MIME: US-ASCII). + // + // ANSI X3.4-1986 + // Reference: RFC2046 + ASCII MIB = 3 + + // ISOLatin1 is the MIB identifier with IANA name ISO_8859-1:1987 (MIME: ISO-8859-1). + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISOLatin1 MIB = 4 + + // ISOLatin2 is the MIB identifier with IANA name ISO_8859-2:1987 (MIME: ISO-8859-2). + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISOLatin2 MIB = 5 + + // ISOLatin3 is the MIB identifier with IANA name ISO_8859-3:1988 (MIME: ISO-8859-3). + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISOLatin3 MIB = 6 + + // ISOLatin4 is the MIB identifier with IANA name ISO_8859-4:1988 (MIME: ISO-8859-4). + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISOLatin4 MIB = 7 + + // ISOLatinCyrillic is the MIB identifier with IANA name ISO_8859-5:1988 (MIME: ISO-8859-5). + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISOLatinCyrillic MIB = 8 + + // ISOLatinArabic is the MIB identifier with IANA name ISO_8859-6:1987 (MIME: ISO-8859-6). + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISOLatinArabic MIB = 9 + + // ISOLatinGreek is the MIB identifier with IANA name ISO_8859-7:1987 (MIME: ISO-8859-7). + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1947 + // Reference: RFC1345 + ISOLatinGreek MIB = 10 + + // ISOLatinHebrew is the MIB identifier with IANA name ISO_8859-8:1988 (MIME: ISO-8859-8). + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISOLatinHebrew MIB = 11 + + // ISOLatin5 is the MIB identifier with IANA name ISO_8859-9:1989 (MIME: ISO-8859-9). + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISOLatin5 MIB = 12 + + // ISOLatin6 is the MIB identifier with IANA name ISO-8859-10 (MIME: ISO-8859-10). + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISOLatin6 MIB = 13 + + // ISOTextComm is the MIB identifier with IANA name ISO_6937-2-add. + // + // ISO-IR: International Register of Escape Sequences and ISO 6937-2:1983 + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISOTextComm MIB = 14 + + // HalfWidthKatakana is the MIB identifier with IANA name JIS_X0201. + // + // JIS X 0201-1976. One byte only, this is equivalent to + // JIS/Roman (similar to ASCII) plus eight-bit half-width + // Katakana + // Reference: RFC1345 + HalfWidthKatakana MIB = 15 + + // JISEncoding is the MIB identifier with IANA name JIS_Encoding. + // + // JIS X 0202-1991. Uses ISO 2022 escape sequences to + // shift code sets as documented in JIS X 0202-1991. + JISEncoding MIB = 16 + + // ShiftJIS is the MIB identifier with IANA name Shift_JIS (MIME: Shift_JIS). + // + // This charset is an extension of csHalfWidthKatakana by + // adding graphic characters in JIS X 0208. The CCS's are + // JIS X0201:1997 and JIS X0208:1997. The + // complete definition is shown in Appendix 1 of JIS + // X0208:1997. + // This charset can be used for the top-level media type "text". + ShiftJIS MIB = 17 + + // EUCPkdFmtJapanese is the MIB identifier with IANA name Extended_UNIX_Code_Packed_Format_for_Japanese (MIME: EUC-JP). + // + // Standardized by OSF, UNIX International, and UNIX Systems + // Laboratories Pacific. Uses ISO 2022 rules to select + // code set 0: US-ASCII (a single 7-bit byte set) + // code set 1: JIS X0208-1990 (a double 8-bit byte set) + // restricted to A0-FF in both bytes + // code set 2: Half Width Katakana (a single 7-bit byte set) + // requiring SS2 as the character prefix + // code set 3: JIS X0212-1990 (a double 7-bit byte set) + // restricted to A0-FF in both bytes + // requiring SS3 as the character prefix + EUCPkdFmtJapanese MIB = 18 + + // EUCFixWidJapanese is the MIB identifier with IANA name Extended_UNIX_Code_Fixed_Width_for_Japanese. + // + // Used in Japan. Each character is 2 octets. + // code set 0: US-ASCII (a single 7-bit byte set) + // 1st byte = 00 + // 2nd byte = 20-7E + // code set 1: JIS X0208-1990 (a double 7-bit byte set) + // restricted to A0-FF in both bytes + // code set 2: Half Width Katakana (a single 7-bit byte set) + // 1st byte = 00 + // 2nd byte = A0-FF + // code set 3: JIS X0212-1990 (a double 7-bit byte set) + // restricted to A0-FF in + // the first byte + // and 21-7E in the second byte + EUCFixWidJapanese MIB = 19 + + // ISO4UnitedKingdom is the MIB identifier with IANA name BS_4730. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO4UnitedKingdom MIB = 20 + + // ISO11SwedishForNames is the MIB identifier with IANA name SEN_850200_C. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO11SwedishForNames MIB = 21 + + // ISO15Italian is the MIB identifier with IANA name IT. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO15Italian MIB = 22 + + // ISO17Spanish is the MIB identifier with IANA name ES. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO17Spanish MIB = 23 + + // ISO21German is the MIB identifier with IANA name DIN_66003. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO21German MIB = 24 + + // ISO60Norwegian1 is the MIB identifier with IANA name NS_4551-1. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO60Norwegian1 MIB = 25 + + // ISO69French is the MIB identifier with IANA name NF_Z_62-010. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO69French MIB = 26 + + // ISO10646UTF1 is the MIB identifier with IANA name ISO-10646-UTF-1. + // + // Universal Transfer Format (1), this is the multibyte + // encoding, that subsets ASCII-7. It does not have byte + // ordering issues. + ISO10646UTF1 MIB = 27 + + // ISO646basic1983 is the MIB identifier with IANA name ISO_646.basic:1983. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO646basic1983 MIB = 28 + + // INVARIANT is the MIB identifier with IANA name INVARIANT. + // + // Reference: RFC1345 + INVARIANT MIB = 29 + + // ISO2IntlRefVersion is the MIB identifier with IANA name ISO_646.irv:1983. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO2IntlRefVersion MIB = 30 + + // NATSSEFI is the MIB identifier with IANA name NATS-SEFI. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + NATSSEFI MIB = 31 + + // NATSSEFIADD is the MIB identifier with IANA name NATS-SEFI-ADD. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + NATSSEFIADD MIB = 32 + + // NATSDANO is the MIB identifier with IANA name NATS-DANO. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + NATSDANO MIB = 33 + + // NATSDANOADD is the MIB identifier with IANA name NATS-DANO-ADD. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + NATSDANOADD MIB = 34 + + // ISO10Swedish is the MIB identifier with IANA name SEN_850200_B. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO10Swedish MIB = 35 + + // KSC56011987 is the MIB identifier with IANA name KS_C_5601-1987. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + KSC56011987 MIB = 36 + + // ISO2022KR is the MIB identifier with IANA name ISO-2022-KR (MIME: ISO-2022-KR). + // + // rfc1557 (see also KS_C_5601-1987) + // Reference: RFC1557 + ISO2022KR MIB = 37 + + // EUCKR is the MIB identifier with IANA name EUC-KR (MIME: EUC-KR). + // + // rfc1557 (see also KS_C_5861-1992) + // Reference: RFC1557 + EUCKR MIB = 38 + + // ISO2022JP is the MIB identifier with IANA name ISO-2022-JP (MIME: ISO-2022-JP). + // + // rfc1468 (see also rfc2237 ) + // Reference: RFC1468 + ISO2022JP MIB = 39 + + // ISO2022JP2 is the MIB identifier with IANA name ISO-2022-JP-2 (MIME: ISO-2022-JP-2). + // + // rfc1554 + // Reference: RFC1554 + ISO2022JP2 MIB = 40 + + // ISO13JISC6220jp is the MIB identifier with IANA name JIS_C6220-1969-jp. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO13JISC6220jp MIB = 41 + + // ISO14JISC6220ro is the MIB identifier with IANA name JIS_C6220-1969-ro. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO14JISC6220ro MIB = 42 + + // ISO16Portuguese is the MIB identifier with IANA name PT. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO16Portuguese MIB = 43 + + // ISO18Greek7Old is the MIB identifier with IANA name greek7-old. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO18Greek7Old MIB = 44 + + // ISO19LatinGreek is the MIB identifier with IANA name latin-greek. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO19LatinGreek MIB = 45 + + // ISO25French is the MIB identifier with IANA name NF_Z_62-010_(1973). + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO25French MIB = 46 + + // ISO27LatinGreek1 is the MIB identifier with IANA name Latin-greek-1. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO27LatinGreek1 MIB = 47 + + // ISO5427Cyrillic is the MIB identifier with IANA name ISO_5427. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO5427Cyrillic MIB = 48 + + // ISO42JISC62261978 is the MIB identifier with IANA name JIS_C6226-1978. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO42JISC62261978 MIB = 49 + + // ISO47BSViewdata is the MIB identifier with IANA name BS_viewdata. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO47BSViewdata MIB = 50 + + // ISO49INIS is the MIB identifier with IANA name INIS. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO49INIS MIB = 51 + + // ISO50INIS8 is the MIB identifier with IANA name INIS-8. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO50INIS8 MIB = 52 + + // ISO51INISCyrillic is the MIB identifier with IANA name INIS-cyrillic. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO51INISCyrillic MIB = 53 + + // ISO54271981 is the MIB identifier with IANA name ISO_5427:1981. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO54271981 MIB = 54 + + // ISO5428Greek is the MIB identifier with IANA name ISO_5428:1980. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO5428Greek MIB = 55 + + // ISO57GB1988 is the MIB identifier with IANA name GB_1988-80. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO57GB1988 MIB = 56 + + // ISO58GB231280 is the MIB identifier with IANA name GB_2312-80. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO58GB231280 MIB = 57 + + // ISO61Norwegian2 is the MIB identifier with IANA name NS_4551-2. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO61Norwegian2 MIB = 58 + + // ISO70VideotexSupp1 is the MIB identifier with IANA name videotex-suppl. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO70VideotexSupp1 MIB = 59 + + // ISO84Portuguese2 is the MIB identifier with IANA name PT2. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO84Portuguese2 MIB = 60 + + // ISO85Spanish2 is the MIB identifier with IANA name ES2. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO85Spanish2 MIB = 61 + + // ISO86Hungarian is the MIB identifier with IANA name MSZ_7795.3. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO86Hungarian MIB = 62 + + // ISO87JISX0208 is the MIB identifier with IANA name JIS_C6226-1983. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO87JISX0208 MIB = 63 + + // ISO88Greek7 is the MIB identifier with IANA name greek7. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO88Greek7 MIB = 64 + + // ISO89ASMO449 is the MIB identifier with IANA name ASMO_449. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO89ASMO449 MIB = 65 + + // ISO90 is the MIB identifier with IANA name iso-ir-90. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO90 MIB = 66 + + // ISO91JISC62291984a is the MIB identifier with IANA name JIS_C6229-1984-a. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO91JISC62291984a MIB = 67 + + // ISO92JISC62991984b is the MIB identifier with IANA name JIS_C6229-1984-b. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO92JISC62991984b MIB = 68 + + // ISO93JIS62291984badd is the MIB identifier with IANA name JIS_C6229-1984-b-add. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO93JIS62291984badd MIB = 69 + + // ISO94JIS62291984hand is the MIB identifier with IANA name JIS_C6229-1984-hand. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO94JIS62291984hand MIB = 70 + + // ISO95JIS62291984handadd is the MIB identifier with IANA name JIS_C6229-1984-hand-add. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO95JIS62291984handadd MIB = 71 + + // ISO96JISC62291984kana is the MIB identifier with IANA name JIS_C6229-1984-kana. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO96JISC62291984kana MIB = 72 + + // ISO2033 is the MIB identifier with IANA name ISO_2033-1983. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO2033 MIB = 73 + + // ISO99NAPLPS is the MIB identifier with IANA name ANSI_X3.110-1983. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO99NAPLPS MIB = 74 + + // ISO102T617bit is the MIB identifier with IANA name T.61-7bit. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO102T617bit MIB = 75 + + // ISO103T618bit is the MIB identifier with IANA name T.61-8bit. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO103T618bit MIB = 76 + + // ISO111ECMACyrillic is the MIB identifier with IANA name ECMA-cyrillic. + // + // ISO registry + // (formerly ECMA + // registry ) + ISO111ECMACyrillic MIB = 77 + + // ISO121Canadian1 is the MIB identifier with IANA name CSA_Z243.4-1985-1. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO121Canadian1 MIB = 78 + + // ISO122Canadian2 is the MIB identifier with IANA name CSA_Z243.4-1985-2. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO122Canadian2 MIB = 79 + + // ISO123CSAZ24341985gr is the MIB identifier with IANA name CSA_Z243.4-1985-gr. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO123CSAZ24341985gr MIB = 80 + + // ISO88596E is the MIB identifier with IANA name ISO_8859-6-E (MIME: ISO-8859-6-E). + // + // rfc1556 + // Reference: RFC1556 + ISO88596E MIB = 81 + + // ISO88596I is the MIB identifier with IANA name ISO_8859-6-I (MIME: ISO-8859-6-I). + // + // rfc1556 + // Reference: RFC1556 + ISO88596I MIB = 82 + + // ISO128T101G2 is the MIB identifier with IANA name T.101-G2. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO128T101G2 MIB = 83 + + // ISO88598E is the MIB identifier with IANA name ISO_8859-8-E (MIME: ISO-8859-8-E). + // + // rfc1556 + // Reference: RFC1556 + ISO88598E MIB = 84 + + // ISO88598I is the MIB identifier with IANA name ISO_8859-8-I (MIME: ISO-8859-8-I). + // + // rfc1556 + // Reference: RFC1556 + ISO88598I MIB = 85 + + // ISO139CSN369103 is the MIB identifier with IANA name CSN_369103. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO139CSN369103 MIB = 86 + + // ISO141JUSIB1002 is the MIB identifier with IANA name JUS_I.B1.002. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO141JUSIB1002 MIB = 87 + + // ISO143IECP271 is the MIB identifier with IANA name IEC_P27-1. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO143IECP271 MIB = 88 + + // ISO146Serbian is the MIB identifier with IANA name JUS_I.B1.003-serb. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO146Serbian MIB = 89 + + // ISO147Macedonian is the MIB identifier with IANA name JUS_I.B1.003-mac. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO147Macedonian MIB = 90 + + // ISO150GreekCCITT is the MIB identifier with IANA name greek-ccitt. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO150GreekCCITT MIB = 91 + + // ISO151Cuba is the MIB identifier with IANA name NC_NC00-10:81. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO151Cuba MIB = 92 + + // ISO6937Add is the MIB identifier with IANA name ISO_6937-2-25. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO6937Add MIB = 93 + + // ISO153GOST1976874 is the MIB identifier with IANA name GOST_19768-74. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO153GOST1976874 MIB = 94 + + // ISO8859Supp is the MIB identifier with IANA name ISO_8859-supp. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO8859Supp MIB = 95 + + // ISO10367Box is the MIB identifier with IANA name ISO_10367-box. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO10367Box MIB = 96 + + // ISO158Lap is the MIB identifier with IANA name latin-lap. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO158Lap MIB = 97 + + // ISO159JISX02121990 is the MIB identifier with IANA name JIS_X0212-1990. + // + // ISO-IR: International Register of Escape Sequences + // Note: The current registration authority is IPSJ/ITSCJ, Japan. + // Reference: RFC1345 + ISO159JISX02121990 MIB = 98 + + // ISO646Danish is the MIB identifier with IANA name DS_2089. + // + // Danish Standard, DS 2089, February 1974 + // Reference: RFC1345 + ISO646Danish MIB = 99 + + // USDK is the MIB identifier with IANA name us-dk. + // + // Reference: RFC1345 + USDK MIB = 100 + + // DKUS is the MIB identifier with IANA name dk-us. + // + // Reference: RFC1345 + DKUS MIB = 101 + + // KSC5636 is the MIB identifier with IANA name KSC5636. + // + // Reference: RFC1345 + KSC5636 MIB = 102 + + // Unicode11UTF7 is the MIB identifier with IANA name UNICODE-1-1-UTF-7. + // + // rfc1642 + // Reference: RFC1642 + Unicode11UTF7 MIB = 103 + + // ISO2022CN is the MIB identifier with IANA name ISO-2022-CN. + // + // rfc1922 + // Reference: RFC1922 + ISO2022CN MIB = 104 + + // ISO2022CNEXT is the MIB identifier with IANA name ISO-2022-CN-EXT. + // + // rfc1922 + // Reference: RFC1922 + ISO2022CNEXT MIB = 105 + + // UTF8 is the MIB identifier with IANA name UTF-8. + // + // rfc3629 + // Reference: RFC3629 + UTF8 MIB = 106 + + // ISO885913 is the MIB identifier with IANA name ISO-8859-13. + // + // ISO See http://www.iana.org/assignments/charset-reg/ISO-8859-13 http://www.iana.org/assignments/charset-reg/ISO-8859-13 + ISO885913 MIB = 109 + + // ISO885914 is the MIB identifier with IANA name ISO-8859-14. + // + // ISO See http://www.iana.org/assignments/charset-reg/ISO-8859-14 + ISO885914 MIB = 110 + + // ISO885915 is the MIB identifier with IANA name ISO-8859-15. + // + // ISO + // Please see: http://www.iana.org/assignments/charset-reg/ISO-8859-15 + ISO885915 MIB = 111 + + // ISO885916 is the MIB identifier with IANA name ISO-8859-16. + // + // ISO + ISO885916 MIB = 112 + + // GBK is the MIB identifier with IANA name GBK. + // + // Chinese IT Standardization Technical Committee + // Please see: http://www.iana.org/assignments/charset-reg/GBK + GBK MIB = 113 + + // GB18030 is the MIB identifier with IANA name GB18030. + // + // Chinese IT Standardization Technical Committee + // Please see: http://www.iana.org/assignments/charset-reg/GB18030 + GB18030 MIB = 114 + + // OSDEBCDICDF0415 is the MIB identifier with IANA name OSD_EBCDIC_DF04_15. + // + // Fujitsu-Siemens standard mainframe EBCDIC encoding + // Please see: http://www.iana.org/assignments/charset-reg/OSD-EBCDIC-DF04-15 + OSDEBCDICDF0415 MIB = 115 + + // OSDEBCDICDF03IRV is the MIB identifier with IANA name OSD_EBCDIC_DF03_IRV. + // + // Fujitsu-Siemens standard mainframe EBCDIC encoding + // Please see: http://www.iana.org/assignments/charset-reg/OSD-EBCDIC-DF03-IRV + OSDEBCDICDF03IRV MIB = 116 + + // OSDEBCDICDF041 is the MIB identifier with IANA name OSD_EBCDIC_DF04_1. + // + // Fujitsu-Siemens standard mainframe EBCDIC encoding + // Please see: http://www.iana.org/assignments/charset-reg/OSD-EBCDIC-DF04-1 + OSDEBCDICDF041 MIB = 117 + + // ISO115481 is the MIB identifier with IANA name ISO-11548-1. + // + // See http://www.iana.org/assignments/charset-reg/ISO-11548-1 + ISO115481 MIB = 118 + + // KZ1048 is the MIB identifier with IANA name KZ-1048. + // + // See http://www.iana.org/assignments/charset-reg/KZ-1048 + KZ1048 MIB = 119 + + // Unicode is the MIB identifier with IANA name ISO-10646-UCS-2. + // + // the 2-octet Basic Multilingual Plane, aka Unicode + // this needs to specify network byte order: the standard + // does not specify (it is a 16-bit integer space) + Unicode MIB = 1000 + + // UCS4 is the MIB identifier with IANA name ISO-10646-UCS-4. + // + // the full code space. (same comment about byte order, + // these are 31-bit numbers. + UCS4 MIB = 1001 + + // UnicodeASCII is the MIB identifier with IANA name ISO-10646-UCS-Basic. + // + // ASCII subset of Unicode. Basic Latin = collection 1 + // See ISO 10646, Appendix A + UnicodeASCII MIB = 1002 + + // UnicodeLatin1 is the MIB identifier with IANA name ISO-10646-Unicode-Latin1. + // + // ISO Latin-1 subset of Unicode. Basic Latin and Latin-1 + // Supplement = collections 1 and 2. See ISO 10646, + // Appendix A. See rfc1815 . + UnicodeLatin1 MIB = 1003 + + // UnicodeJapanese is the MIB identifier with IANA name ISO-10646-J-1. + // + // ISO 10646 Japanese, see rfc1815 . + UnicodeJapanese MIB = 1004 + + // UnicodeIBM1261 is the MIB identifier with IANA name ISO-Unicode-IBM-1261. + // + // IBM Latin-2, -3, -5, Extended Presentation Set, GCSGID: 1261 + UnicodeIBM1261 MIB = 1005 + + // UnicodeIBM1268 is the MIB identifier with IANA name ISO-Unicode-IBM-1268. + // + // IBM Latin-4 Extended Presentation Set, GCSGID: 1268 + UnicodeIBM1268 MIB = 1006 + + // UnicodeIBM1276 is the MIB identifier with IANA name ISO-Unicode-IBM-1276. + // + // IBM Cyrillic Greek Extended Presentation Set, GCSGID: 1276 + UnicodeIBM1276 MIB = 1007 + + // UnicodeIBM1264 is the MIB identifier with IANA name ISO-Unicode-IBM-1264. + // + // IBM Arabic Presentation Set, GCSGID: 1264 + UnicodeIBM1264 MIB = 1008 + + // UnicodeIBM1265 is the MIB identifier with IANA name ISO-Unicode-IBM-1265. + // + // IBM Hebrew Presentation Set, GCSGID: 1265 + UnicodeIBM1265 MIB = 1009 + + // Unicode11 is the MIB identifier with IANA name UNICODE-1-1. + // + // rfc1641 + // Reference: RFC1641 + Unicode11 MIB = 1010 + + // SCSU is the MIB identifier with IANA name SCSU. + // + // SCSU See http://www.iana.org/assignments/charset-reg/SCSU + SCSU MIB = 1011 + + // UTF7 is the MIB identifier with IANA name UTF-7. + // + // rfc2152 + // Reference: RFC2152 + UTF7 MIB = 1012 + + // UTF16BE is the MIB identifier with IANA name UTF-16BE. + // + // rfc2781 + // Reference: RFC2781 + UTF16BE MIB = 1013 + + // UTF16LE is the MIB identifier with IANA name UTF-16LE. + // + // rfc2781 + // Reference: RFC2781 + UTF16LE MIB = 1014 + + // UTF16 is the MIB identifier with IANA name UTF-16. + // + // rfc2781 + // Reference: RFC2781 + UTF16 MIB = 1015 + + // CESU8 is the MIB identifier with IANA name CESU-8. + // + // http://www.unicode.org/unicode/reports/tr26 + CESU8 MIB = 1016 + + // UTF32 is the MIB identifier with IANA name UTF-32. + // + // http://www.unicode.org/unicode/reports/tr19/ + UTF32 MIB = 1017 + + // UTF32BE is the MIB identifier with IANA name UTF-32BE. + // + // http://www.unicode.org/unicode/reports/tr19/ + UTF32BE MIB = 1018 + + // UTF32LE is the MIB identifier with IANA name UTF-32LE. + // + // http://www.unicode.org/unicode/reports/tr19/ + UTF32LE MIB = 1019 + + // BOCU1 is the MIB identifier with IANA name BOCU-1. + // + // http://www.unicode.org/notes/tn6/ + BOCU1 MIB = 1020 + + // Windows30Latin1 is the MIB identifier with IANA name ISO-8859-1-Windows-3.0-Latin-1. + // + // Extended ISO 8859-1 Latin-1 for Windows 3.0. + // PCL Symbol Set id: 9U + Windows30Latin1 MIB = 2000 + + // Windows31Latin1 is the MIB identifier with IANA name ISO-8859-1-Windows-3.1-Latin-1. + // + // Extended ISO 8859-1 Latin-1 for Windows 3.1. + // PCL Symbol Set id: 19U + Windows31Latin1 MIB = 2001 + + // Windows31Latin2 is the MIB identifier with IANA name ISO-8859-2-Windows-Latin-2. + // + // Extended ISO 8859-2. Latin-2 for Windows 3.1. + // PCL Symbol Set id: 9E + Windows31Latin2 MIB = 2002 + + // Windows31Latin5 is the MIB identifier with IANA name ISO-8859-9-Windows-Latin-5. + // + // Extended ISO 8859-9. Latin-5 for Windows 3.1 + // PCL Symbol Set id: 5T + Windows31Latin5 MIB = 2003 + + // HPRoman8 is the MIB identifier with IANA name hp-roman8. + // + // LaserJet IIP Printer User's Manual, + // HP part no 33471-90901, Hewlet-Packard, June 1989. + // Reference: RFC1345 + HPRoman8 MIB = 2004 + + // AdobeStandardEncoding is the MIB identifier with IANA name Adobe-Standard-Encoding. + // + // PostScript Language Reference Manual + // PCL Symbol Set id: 10J + AdobeStandardEncoding MIB = 2005 + + // VenturaUS is the MIB identifier with IANA name Ventura-US. + // + // Ventura US. ASCII plus characters typically used in + // publishing, like pilcrow, copyright, registered, trade mark, + // section, dagger, and double dagger in the range A0 (hex) + // to FF (hex). + // PCL Symbol Set id: 14J + VenturaUS MIB = 2006 + + // VenturaInternational is the MIB identifier with IANA name Ventura-International. + // + // Ventura International. ASCII plus coded characters similar + // to Roman8. + // PCL Symbol Set id: 13J + VenturaInternational MIB = 2007 + + // DECMCS is the MIB identifier with IANA name DEC-MCS. + // + // VAX/VMS User's Manual, + // Order Number: AI-Y517A-TE, April 1986. + // Reference: RFC1345 + DECMCS MIB = 2008 + + // PC850Multilingual is the MIB identifier with IANA name IBM850. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + PC850Multilingual MIB = 2009 + + // PC8DanishNorwegian is the MIB identifier with IANA name PC8-Danish-Norwegian. + // + // PC Danish Norwegian + // 8-bit PC set for Danish Norwegian + // PCL Symbol Set id: 11U + PC8DanishNorwegian MIB = 2012 + + // PC862LatinHebrew is the MIB identifier with IANA name IBM862. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + PC862LatinHebrew MIB = 2013 + + // PC8Turkish is the MIB identifier with IANA name PC8-Turkish. + // + // PC Latin Turkish. PCL Symbol Set id: 9T + PC8Turkish MIB = 2014 + + // IBMSymbols is the MIB identifier with IANA name IBM-Symbols. + // + // Presentation Set, CPGID: 259 + IBMSymbols MIB = 2015 + + // IBMThai is the MIB identifier with IANA name IBM-Thai. + // + // Presentation Set, CPGID: 838 + IBMThai MIB = 2016 + + // HPLegal is the MIB identifier with IANA name HP-Legal. + // + // PCL 5 Comparison Guide, Hewlett-Packard, + // HP part number 5961-0510, October 1992 + // PCL Symbol Set id: 1U + HPLegal MIB = 2017 + + // HPPiFont is the MIB identifier with IANA name HP-Pi-font. + // + // PCL 5 Comparison Guide, Hewlett-Packard, + // HP part number 5961-0510, October 1992 + // PCL Symbol Set id: 15U + HPPiFont MIB = 2018 + + // HPMath8 is the MIB identifier with IANA name HP-Math8. + // + // PCL 5 Comparison Guide, Hewlett-Packard, + // HP part number 5961-0510, October 1992 + // PCL Symbol Set id: 8M + HPMath8 MIB = 2019 + + // HPPSMath is the MIB identifier with IANA name Adobe-Symbol-Encoding. + // + // PostScript Language Reference Manual + // PCL Symbol Set id: 5M + HPPSMath MIB = 2020 + + // HPDesktop is the MIB identifier with IANA name HP-DeskTop. + // + // PCL 5 Comparison Guide, Hewlett-Packard, + // HP part number 5961-0510, October 1992 + // PCL Symbol Set id: 7J + HPDesktop MIB = 2021 + + // VenturaMath is the MIB identifier with IANA name Ventura-Math. + // + // PCL 5 Comparison Guide, Hewlett-Packard, + // HP part number 5961-0510, October 1992 + // PCL Symbol Set id: 6M + VenturaMath MIB = 2022 + + // MicrosoftPublishing is the MIB identifier with IANA name Microsoft-Publishing. + // + // PCL 5 Comparison Guide, Hewlett-Packard, + // HP part number 5961-0510, October 1992 + // PCL Symbol Set id: 6J + MicrosoftPublishing MIB = 2023 + + // Windows31J is the MIB identifier with IANA name Windows-31J. + // + // Windows Japanese. A further extension of Shift_JIS + // to include NEC special characters (Row 13), NEC + // selection of IBM extensions (Rows 89 to 92), and IBM + // extensions (Rows 115 to 119). The CCS's are + // JIS X0201:1997, JIS X0208:1997, and these extensions. + // This charset can be used for the top-level media type "text", + // but it is of limited or specialized use (see rfc2278 ). + // PCL Symbol Set id: 19K + Windows31J MIB = 2024 + + // GB2312 is the MIB identifier with IANA name GB2312 (MIME: GB2312). + // + // Chinese for People's Republic of China (PRC) mixed one byte, + // two byte set: + // 20-7E = one byte ASCII + // A1-FE = two byte PRC Kanji + // See GB 2312-80 + // PCL Symbol Set Id: 18C + GB2312 MIB = 2025 + + // Big5 is the MIB identifier with IANA name Big5 (MIME: Big5). + // + // Chinese for Taiwan Multi-byte set. + // PCL Symbol Set Id: 18T + Big5 MIB = 2026 + + // Macintosh is the MIB identifier with IANA name macintosh. + // + // The Unicode Standard ver1.0, ISBN 0-201-56788-1, Oct 1991 + // Reference: RFC1345 + Macintosh MIB = 2027 + + // IBM037 is the MIB identifier with IANA name IBM037. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM037 MIB = 2028 + + // IBM038 is the MIB identifier with IANA name IBM038. + // + // IBM 3174 Character Set Ref, GA27-3831-02, March 1990 + // Reference: RFC1345 + IBM038 MIB = 2029 + + // IBM273 is the MIB identifier with IANA name IBM273. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM273 MIB = 2030 + + // IBM274 is the MIB identifier with IANA name IBM274. + // + // IBM 3174 Character Set Ref, GA27-3831-02, March 1990 + // Reference: RFC1345 + IBM274 MIB = 2031 + + // IBM275 is the MIB identifier with IANA name IBM275. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM275 MIB = 2032 + + // IBM277 is the MIB identifier with IANA name IBM277. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM277 MIB = 2033 + + // IBM278 is the MIB identifier with IANA name IBM278. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM278 MIB = 2034 + + // IBM280 is the MIB identifier with IANA name IBM280. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM280 MIB = 2035 + + // IBM281 is the MIB identifier with IANA name IBM281. + // + // IBM 3174 Character Set Ref, GA27-3831-02, March 1990 + // Reference: RFC1345 + IBM281 MIB = 2036 + + // IBM284 is the MIB identifier with IANA name IBM284. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM284 MIB = 2037 + + // IBM285 is the MIB identifier with IANA name IBM285. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM285 MIB = 2038 + + // IBM290 is the MIB identifier with IANA name IBM290. + // + // IBM 3174 Character Set Ref, GA27-3831-02, March 1990 + // Reference: RFC1345 + IBM290 MIB = 2039 + + // IBM297 is the MIB identifier with IANA name IBM297. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM297 MIB = 2040 + + // IBM420 is the MIB identifier with IANA name IBM420. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990, + // IBM NLS RM p 11-11 + // Reference: RFC1345 + IBM420 MIB = 2041 + + // IBM423 is the MIB identifier with IANA name IBM423. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM423 MIB = 2042 + + // IBM424 is the MIB identifier with IANA name IBM424. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM424 MIB = 2043 + + // PC8CodePage437 is the MIB identifier with IANA name IBM437. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + PC8CodePage437 MIB = 2011 + + // IBM500 is the MIB identifier with IANA name IBM500. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM500 MIB = 2044 + + // IBM851 is the MIB identifier with IANA name IBM851. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM851 MIB = 2045 + + // PCp852 is the MIB identifier with IANA name IBM852. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + PCp852 MIB = 2010 + + // IBM855 is the MIB identifier with IANA name IBM855. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM855 MIB = 2046 + + // IBM857 is the MIB identifier with IANA name IBM857. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM857 MIB = 2047 + + // IBM860 is the MIB identifier with IANA name IBM860. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM860 MIB = 2048 + + // IBM861 is the MIB identifier with IANA name IBM861. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM861 MIB = 2049 + + // IBM863 is the MIB identifier with IANA name IBM863. + // + // IBM Keyboard layouts and code pages, PN 07G4586 June 1991 + // Reference: RFC1345 + IBM863 MIB = 2050 + + // IBM864 is the MIB identifier with IANA name IBM864. + // + // IBM Keyboard layouts and code pages, PN 07G4586 June 1991 + // Reference: RFC1345 + IBM864 MIB = 2051 + + // IBM865 is the MIB identifier with IANA name IBM865. + // + // IBM DOS 3.3 Ref (Abridged), 94X9575 (Feb 1987) + // Reference: RFC1345 + IBM865 MIB = 2052 + + // IBM868 is the MIB identifier with IANA name IBM868. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM868 MIB = 2053 + + // IBM869 is the MIB identifier with IANA name IBM869. + // + // IBM Keyboard layouts and code pages, PN 07G4586 June 1991 + // Reference: RFC1345 + IBM869 MIB = 2054 + + // IBM870 is the MIB identifier with IANA name IBM870. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM870 MIB = 2055 + + // IBM871 is the MIB identifier with IANA name IBM871. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM871 MIB = 2056 + + // IBM880 is the MIB identifier with IANA name IBM880. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM880 MIB = 2057 + + // IBM891 is the MIB identifier with IANA name IBM891. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM891 MIB = 2058 + + // IBM903 is the MIB identifier with IANA name IBM903. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM903 MIB = 2059 + + // IBBM904 is the MIB identifier with IANA name IBM904. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBBM904 MIB = 2060 + + // IBM905 is the MIB identifier with IANA name IBM905. + // + // IBM 3174 Character Set Ref, GA27-3831-02, March 1990 + // Reference: RFC1345 + IBM905 MIB = 2061 + + // IBM918 is the MIB identifier with IANA name IBM918. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM918 MIB = 2062 + + // IBM1026 is the MIB identifier with IANA name IBM1026. + // + // IBM NLS RM Vol2 SE09-8002-01, March 1990 + // Reference: RFC1345 + IBM1026 MIB = 2063 + + // IBMEBCDICATDE is the MIB identifier with IANA name EBCDIC-AT-DE. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + IBMEBCDICATDE MIB = 2064 + + // EBCDICATDEA is the MIB identifier with IANA name EBCDIC-AT-DE-A. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + EBCDICATDEA MIB = 2065 + + // EBCDICCAFR is the MIB identifier with IANA name EBCDIC-CA-FR. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + EBCDICCAFR MIB = 2066 + + // EBCDICDKNO is the MIB identifier with IANA name EBCDIC-DK-NO. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + EBCDICDKNO MIB = 2067 + + // EBCDICDKNOA is the MIB identifier with IANA name EBCDIC-DK-NO-A. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + EBCDICDKNOA MIB = 2068 + + // EBCDICFISE is the MIB identifier with IANA name EBCDIC-FI-SE. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + EBCDICFISE MIB = 2069 + + // EBCDICFISEA is the MIB identifier with IANA name EBCDIC-FI-SE-A. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + EBCDICFISEA MIB = 2070 + + // EBCDICFR is the MIB identifier with IANA name EBCDIC-FR. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + EBCDICFR MIB = 2071 + + // EBCDICIT is the MIB identifier with IANA name EBCDIC-IT. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + EBCDICIT MIB = 2072 + + // EBCDICPT is the MIB identifier with IANA name EBCDIC-PT. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + EBCDICPT MIB = 2073 + + // EBCDICES is the MIB identifier with IANA name EBCDIC-ES. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + EBCDICES MIB = 2074 + + // EBCDICESA is the MIB identifier with IANA name EBCDIC-ES-A. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + EBCDICESA MIB = 2075 + + // EBCDICESS is the MIB identifier with IANA name EBCDIC-ES-S. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + EBCDICESS MIB = 2076 + + // EBCDICUK is the MIB identifier with IANA name EBCDIC-UK. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + EBCDICUK MIB = 2077 + + // EBCDICUS is the MIB identifier with IANA name EBCDIC-US. + // + // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987 + // Reference: RFC1345 + EBCDICUS MIB = 2078 + + // Unknown8BiT is the MIB identifier with IANA name UNKNOWN-8BIT. + // + // Reference: RFC1428 + Unknown8BiT MIB = 2079 + + // Mnemonic is the MIB identifier with IANA name MNEMONIC. + // + // rfc1345 , also known as "mnemonic+ascii+38" + // Reference: RFC1345 + Mnemonic MIB = 2080 + + // Mnem is the MIB identifier with IANA name MNEM. + // + // rfc1345 , also known as "mnemonic+ascii+8200" + // Reference: RFC1345 + Mnem MIB = 2081 + + // VISCII is the MIB identifier with IANA name VISCII. + // + // rfc1456 + // Reference: RFC1456 + VISCII MIB = 2082 + + // VIQR is the MIB identifier with IANA name VIQR. + // + // rfc1456 + // Reference: RFC1456 + VIQR MIB = 2083 + + // KOI8R is the MIB identifier with IANA name KOI8-R (MIME: KOI8-R). + // + // rfc1489 , based on GOST-19768-74, ISO-6937/8, + // INIS-Cyrillic, ISO-5427. + // Reference: RFC1489 + KOI8R MIB = 2084 + + // HZGB2312 is the MIB identifier with IANA name HZ-GB-2312. + // + // rfc1842 , rfc1843 rfc1843 rfc1842 + HZGB2312 MIB = 2085 + + // IBM866 is the MIB identifier with IANA name IBM866. + // + // IBM NLDG Volume 2 (SE09-8002-03) August 1994 + IBM866 MIB = 2086 + + // PC775Baltic is the MIB identifier with IANA name IBM775. + // + // HP PCL 5 Comparison Guide (P/N 5021-0329) pp B-13, 1996 + PC775Baltic MIB = 2087 + + // KOI8U is the MIB identifier with IANA name KOI8-U. + // + // rfc2319 + // Reference: RFC2319 + KOI8U MIB = 2088 + + // IBM00858 is the MIB identifier with IANA name IBM00858. + // + // IBM See http://www.iana.org/assignments/charset-reg/IBM00858 + IBM00858 MIB = 2089 + + // IBM00924 is the MIB identifier with IANA name IBM00924. + // + // IBM See http://www.iana.org/assignments/charset-reg/IBM00924 + IBM00924 MIB = 2090 + + // IBM01140 is the MIB identifier with IANA name IBM01140. + // + // IBM See http://www.iana.org/assignments/charset-reg/IBM01140 + IBM01140 MIB = 2091 + + // IBM01141 is the MIB identifier with IANA name IBM01141. + // + // IBM See http://www.iana.org/assignments/charset-reg/IBM01141 + IBM01141 MIB = 2092 + + // IBM01142 is the MIB identifier with IANA name IBM01142. + // + // IBM See http://www.iana.org/assignments/charset-reg/IBM01142 + IBM01142 MIB = 2093 + + // IBM01143 is the MIB identifier with IANA name IBM01143. + // + // IBM See http://www.iana.org/assignments/charset-reg/IBM01143 + IBM01143 MIB = 2094 + + // IBM01144 is the MIB identifier with IANA name IBM01144. + // + // IBM See http://www.iana.org/assignments/charset-reg/IBM01144 + IBM01144 MIB = 2095 + + // IBM01145 is the MIB identifier with IANA name IBM01145. + // + // IBM See http://www.iana.org/assignments/charset-reg/IBM01145 + IBM01145 MIB = 2096 + + // IBM01146 is the MIB identifier with IANA name IBM01146. + // + // IBM See http://www.iana.org/assignments/charset-reg/IBM01146 + IBM01146 MIB = 2097 + + // IBM01147 is the MIB identifier with IANA name IBM01147. + // + // IBM See http://www.iana.org/assignments/charset-reg/IBM01147 + IBM01147 MIB = 2098 + + // IBM01148 is the MIB identifier with IANA name IBM01148. + // + // IBM See http://www.iana.org/assignments/charset-reg/IBM01148 + IBM01148 MIB = 2099 + + // IBM01149 is the MIB identifier with IANA name IBM01149. + // + // IBM See http://www.iana.org/assignments/charset-reg/IBM01149 + IBM01149 MIB = 2100 + + // Big5HKSCS is the MIB identifier with IANA name Big5-HKSCS. + // + // See http://www.iana.org/assignments/charset-reg/Big5-HKSCS + Big5HKSCS MIB = 2101 + + // IBM1047 is the MIB identifier with IANA name IBM1047. + // + // IBM1047 (EBCDIC Latin 1/Open Systems) http://www-1.ibm.com/servers/eserver/iseries/software/globalization/pdf/cp01047z.pdf + IBM1047 MIB = 2102 + + // PTCP154 is the MIB identifier with IANA name PTCP154. + // + // See http://www.iana.org/assignments/charset-reg/PTCP154 + PTCP154 MIB = 2103 + + // Amiga1251 is the MIB identifier with IANA name Amiga-1251. + // + // See http://www.amiga.ultranet.ru/Amiga-1251.html + Amiga1251 MIB = 2104 + + // KOI7switched is the MIB identifier with IANA name KOI7-switched. + // + // See http://www.iana.org/assignments/charset-reg/KOI7-switched + KOI7switched MIB = 2105 + + // BRF is the MIB identifier with IANA name BRF. + // + // See http://www.iana.org/assignments/charset-reg/BRF + BRF MIB = 2106 + + // TSCII is the MIB identifier with IANA name TSCII. + // + // See http://www.iana.org/assignments/charset-reg/TSCII + TSCII MIB = 2107 + + // CP51932 is the MIB identifier with IANA name CP51932. + // + // See http://www.iana.org/assignments/charset-reg/CP51932 + CP51932 MIB = 2108 + + // Windows874 is the MIB identifier with IANA name windows-874. + // + // See http://www.iana.org/assignments/charset-reg/windows-874 + Windows874 MIB = 2109 + + // Windows1250 is the MIB identifier with IANA name windows-1250. + // + // Microsoft http://www.iana.org/assignments/charset-reg/windows-1250 + Windows1250 MIB = 2250 + + // Windows1251 is the MIB identifier with IANA name windows-1251. + // + // Microsoft http://www.iana.org/assignments/charset-reg/windows-1251 + Windows1251 MIB = 2251 + + // Windows1252 is the MIB identifier with IANA name windows-1252. + // + // Microsoft http://www.iana.org/assignments/charset-reg/windows-1252 + Windows1252 MIB = 2252 + + // Windows1253 is the MIB identifier with IANA name windows-1253. + // + // Microsoft http://www.iana.org/assignments/charset-reg/windows-1253 + Windows1253 MIB = 2253 + + // Windows1254 is the MIB identifier with IANA name windows-1254. + // + // Microsoft http://www.iana.org/assignments/charset-reg/windows-1254 + Windows1254 MIB = 2254 + + // Windows1255 is the MIB identifier with IANA name windows-1255. + // + // Microsoft http://www.iana.org/assignments/charset-reg/windows-1255 + Windows1255 MIB = 2255 + + // Windows1256 is the MIB identifier with IANA name windows-1256. + // + // Microsoft http://www.iana.org/assignments/charset-reg/windows-1256 + Windows1256 MIB = 2256 + + // Windows1257 is the MIB identifier with IANA name windows-1257. + // + // Microsoft http://www.iana.org/assignments/charset-reg/windows-1257 + Windows1257 MIB = 2257 + + // Windows1258 is the MIB identifier with IANA name windows-1258. + // + // Microsoft http://www.iana.org/assignments/charset-reg/windows-1258 + Windows1258 MIB = 2258 + + // TIS620 is the MIB identifier with IANA name TIS-620. + // + // Thai Industrial Standards Institute (TISI) + TIS620 MIB = 2259 + + // CP50220 is the MIB identifier with IANA name CP50220. + // + // See http://www.iana.org/assignments/charset-reg/CP50220 + CP50220 MIB = 2260 +) diff --git a/vendor/golang.org/x/text/internal/gen/code.go b/vendor/golang.org/x/text/internal/gen/code.go new file mode 100644 index 00000000..0389509f --- /dev/null +++ b/vendor/golang.org/x/text/internal/gen/code.go @@ -0,0 +1,369 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gen + +import ( + "bytes" + "encoding/gob" + "fmt" + "hash" + "hash/fnv" + "io" + "log" + "os" + "reflect" + "strings" + "unicode" + "unicode/utf8" +) + +// This file contains utilities for generating code. + +// TODO: other write methods like: +// - slices, maps, types, etc. + +// CodeWriter is a utility for writing structured code. It computes the content +// hash and size of written content. It ensures there are newlines between +// written code blocks. +type CodeWriter struct { + buf bytes.Buffer + Size int + Hash hash.Hash32 // content hash + gob *gob.Encoder + // For comments we skip the usual one-line separator if they are followed by + // a code block. + skipSep bool +} + +func (w *CodeWriter) Write(p []byte) (n int, err error) { + return w.buf.Write(p) +} + +// NewCodeWriter returns a new CodeWriter. +func NewCodeWriter() *CodeWriter { + h := fnv.New32() + return &CodeWriter{Hash: h, gob: gob.NewEncoder(h)} +} + +// WriteGoFile appends the buffer with the total size of all created structures +// and writes it as a Go file to the the given file with the given package name. +func (w *CodeWriter) WriteGoFile(filename, pkg string) { + f, err := os.Create(filename) + if err != nil { + log.Fatalf("Could not create file %s: %v", filename, err) + } + defer f.Close() + if _, err = w.WriteGo(f, pkg, ""); err != nil { + log.Fatalf("Error writing file %s: %v", filename, err) + } +} + +// WriteVersionedGoFile appends the buffer with the total size of all created +// structures and writes it as a Go file to the the given file with the given +// package name and build tags for the current Unicode version, +func (w *CodeWriter) WriteVersionedGoFile(filename, pkg string) { + tags := buildTags() + if tags != "" { + filename = insertVersion(filename, UnicodeVersion()) + } + f, err := os.Create(filename) + if err != nil { + log.Fatalf("Could not create file %s: %v", filename, err) + } + defer f.Close() + if _, err = w.WriteGo(f, pkg, tags); err != nil { + log.Fatalf("Error writing file %s: %v", filename, err) + } +} + +// WriteGo appends the buffer with the total size of all created structures and +// writes it as a Go file to the the given writer with the given package name. +func (w *CodeWriter) WriteGo(out io.Writer, pkg, tags string) (n int, err error) { + sz := w.Size + w.WriteComment("Total table size %d bytes (%dKiB); checksum: %X\n", sz, sz/1024, w.Hash.Sum32()) + defer w.buf.Reset() + return WriteGo(out, pkg, tags, w.buf.Bytes()) +} + +func (w *CodeWriter) printf(f string, x ...interface{}) { + fmt.Fprintf(w, f, x...) +} + +func (w *CodeWriter) insertSep() { + if w.skipSep { + w.skipSep = false + return + } + // Use at least two newlines to ensure a blank space between the previous + // block. WriteGoFile will remove extraneous newlines. + w.printf("\n\n") +} + +// WriteComment writes a comment block. All line starts are prefixed with "//". +// Initial empty lines are gobbled. The indentation for the first line is +// stripped from consecutive lines. +func (w *CodeWriter) WriteComment(comment string, args ...interface{}) { + s := fmt.Sprintf(comment, args...) + s = strings.Trim(s, "\n") + + // Use at least two newlines to ensure a blank space between the previous + // block. WriteGoFile will remove extraneous newlines. + w.printf("\n\n// ") + w.skipSep = true + + // strip first indent level. + sep := "\n" + for ; len(s) > 0 && (s[0] == '\t' || s[0] == ' '); s = s[1:] { + sep += s[:1] + } + + strings.NewReplacer(sep, "\n// ", "\n", "\n// ").WriteString(w, s) + + w.printf("\n") +} + +func (w *CodeWriter) writeSizeInfo(size int) { + w.printf("// Size: %d bytes\n", size) +} + +// WriteConst writes a constant of the given name and value. +func (w *CodeWriter) WriteConst(name string, x interface{}) { + w.insertSep() + v := reflect.ValueOf(x) + + switch v.Type().Kind() { + case reflect.String: + w.printf("const %s %s = ", name, typeName(x)) + w.WriteString(v.String()) + w.printf("\n") + default: + w.printf("const %s = %#v\n", name, x) + } +} + +// WriteVar writes a variable of the given name and value. +func (w *CodeWriter) WriteVar(name string, x interface{}) { + w.insertSep() + v := reflect.ValueOf(x) + oldSize := w.Size + sz := int(v.Type().Size()) + w.Size += sz + + switch v.Type().Kind() { + case reflect.String: + w.printf("var %s %s = ", name, typeName(x)) + w.WriteString(v.String()) + case reflect.Struct: + w.gob.Encode(x) + fallthrough + case reflect.Slice, reflect.Array: + w.printf("var %s = ", name) + w.writeValue(v) + w.writeSizeInfo(w.Size - oldSize) + default: + w.printf("var %s %s = ", name, typeName(x)) + w.gob.Encode(x) + w.writeValue(v) + w.writeSizeInfo(w.Size - oldSize) + } + w.printf("\n") +} + +func (w *CodeWriter) writeValue(v reflect.Value) { + x := v.Interface() + switch v.Kind() { + case reflect.String: + w.WriteString(v.String()) + case reflect.Array: + // Don't double count: callers of WriteArray count on the size being + // added, so we need to discount it here. + w.Size -= int(v.Type().Size()) + w.writeSlice(x, true) + case reflect.Slice: + w.writeSlice(x, false) + case reflect.Struct: + w.printf("%s{\n", typeName(v.Interface())) + t := v.Type() + for i := 0; i < v.NumField(); i++ { + w.printf("%s: ", t.Field(i).Name) + w.writeValue(v.Field(i)) + w.printf(",\n") + } + w.printf("}") + default: + w.printf("%#v", x) + } +} + +// WriteString writes a string literal. +func (w *CodeWriter) WriteString(s string) { + s = strings.Replace(s, `\`, `\\`, -1) + io.WriteString(w.Hash, s) // content hash + w.Size += len(s) + + const maxInline = 40 + if len(s) <= maxInline { + w.printf("%q", s) + return + } + + // We will render the string as a multi-line string. + const maxWidth = 80 - 4 - len(`"`) - len(`" +`) + + // When starting on its own line, go fmt indents line 2+ an extra level. + n, max := maxWidth, maxWidth-4 + + // As per https://golang.org/issue/18078, the compiler has trouble + // compiling the concatenation of many strings, s0 + s1 + s2 + ... + sN, + // for large N. We insert redundant, explicit parentheses to work around + // that, lowering the N at any given step: (s0 + s1 + ... + s63) + (s64 + + // ... + s127) + etc + (etc + ... + sN). + explicitParens, extraComment := len(s) > 128*1024, "" + if explicitParens { + w.printf(`(`) + extraComment = "; the redundant, explicit parens are for https://golang.org/issue/18078" + } + + // Print "" +\n, if a string does not start on its own line. + b := w.buf.Bytes() + if p := len(bytes.TrimRight(b, " \t")); p > 0 && b[p-1] != '\n' { + w.printf("\"\" + // Size: %d bytes%s\n", len(s), extraComment) + n, max = maxWidth, maxWidth + } + + w.printf(`"`) + + for sz, p, nLines := 0, 0, 0; p < len(s); { + var r rune + r, sz = utf8.DecodeRuneInString(s[p:]) + out := s[p : p+sz] + chars := 1 + if !unicode.IsPrint(r) || r == utf8.RuneError || r == '"' { + switch sz { + case 1: + out = fmt.Sprintf("\\x%02x", s[p]) + case 2, 3: + out = fmt.Sprintf("\\u%04x", r) + case 4: + out = fmt.Sprintf("\\U%08x", r) + } + chars = len(out) + } + if n -= chars; n < 0 { + nLines++ + if explicitParens && nLines&63 == 63 { + w.printf("\") + (\"") + } + w.printf("\" +\n\"") + n = max - len(out) + } + w.printf("%s", out) + p += sz + } + w.printf(`"`) + if explicitParens { + w.printf(`)`) + } +} + +// WriteSlice writes a slice value. +func (w *CodeWriter) WriteSlice(x interface{}) { + w.writeSlice(x, false) +} + +// WriteArray writes an array value. +func (w *CodeWriter) WriteArray(x interface{}) { + w.writeSlice(x, true) +} + +func (w *CodeWriter) writeSlice(x interface{}, isArray bool) { + v := reflect.ValueOf(x) + w.gob.Encode(v.Len()) + w.Size += v.Len() * int(v.Type().Elem().Size()) + name := typeName(x) + if isArray { + name = fmt.Sprintf("[%d]%s", v.Len(), name[strings.Index(name, "]")+1:]) + } + if isArray { + w.printf("%s{\n", name) + } else { + w.printf("%s{ // %d elements\n", name, v.Len()) + } + + switch kind := v.Type().Elem().Kind(); kind { + case reflect.String: + for _, s := range x.([]string) { + w.WriteString(s) + w.printf(",\n") + } + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, + reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + // nLine and nBlock are the number of elements per line and block. + nLine, nBlock, format := 8, 64, "%d," + switch kind { + case reflect.Uint8: + format = "%#02x," + case reflect.Uint16: + format = "%#04x," + case reflect.Uint32: + nLine, nBlock, format = 4, 32, "%#08x," + case reflect.Uint, reflect.Uint64: + nLine, nBlock, format = 4, 32, "%#016x," + case reflect.Int8: + nLine = 16 + } + n := nLine + for i := 0; i < v.Len(); i++ { + if i%nBlock == 0 && v.Len() > nBlock { + w.printf("// Entry %X - %X\n", i, i+nBlock-1) + } + x := v.Index(i).Interface() + w.gob.Encode(x) + w.printf(format, x) + if n--; n == 0 { + n = nLine + w.printf("\n") + } + } + w.printf("\n") + case reflect.Struct: + zero := reflect.Zero(v.Type().Elem()).Interface() + for i := 0; i < v.Len(); i++ { + x := v.Index(i).Interface() + w.gob.EncodeValue(v) + if !reflect.DeepEqual(zero, x) { + line := fmt.Sprintf("%#v,\n", x) + line = line[strings.IndexByte(line, '{'):] + w.printf("%d: ", i) + w.printf(line) + } + } + case reflect.Array: + for i := 0; i < v.Len(); i++ { + w.printf("%d: %#v,\n", i, v.Index(i).Interface()) + } + default: + panic("gen: slice elem type not supported") + } + w.printf("}") +} + +// WriteType writes a definition of the type of the given value and returns the +// type name. +func (w *CodeWriter) WriteType(x interface{}) string { + t := reflect.TypeOf(x) + w.printf("type %s struct {\n", t.Name()) + for i := 0; i < t.NumField(); i++ { + w.printf("\t%s %s\n", t.Field(i).Name, t.Field(i).Type) + } + w.printf("}\n") + return t.Name() +} + +// typeName returns the name of the go type of x. +func typeName(x interface{}) string { + t := reflect.ValueOf(x).Type() + return strings.Replace(fmt.Sprint(t), "main.", "", 1) +} diff --git a/vendor/golang.org/x/text/internal/gen/gen.go b/vendor/golang.org/x/text/internal/gen/gen.go new file mode 100644 index 00000000..4c3f7606 --- /dev/null +++ b/vendor/golang.org/x/text/internal/gen/gen.go @@ -0,0 +1,333 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package gen contains common code for the various code generation tools in the +// text repository. Its usage ensures consistency between tools. +// +// This package defines command line flags that are common to most generation +// tools. The flags allow for specifying specific Unicode and CLDR versions +// in the public Unicode data repository (http://www.unicode.org/Public). +// +// A local Unicode data mirror can be set through the flag -local or the +// environment variable UNICODE_DIR. The former takes precedence. The local +// directory should follow the same structure as the public repository. +// +// IANA data can also optionally be mirrored by putting it in the iana directory +// rooted at the top of the local mirror. Beware, though, that IANA data is not +// versioned. So it is up to the developer to use the right version. +package gen // import "golang.org/x/text/internal/gen" + +import ( + "bytes" + "flag" + "fmt" + "go/build" + "go/format" + "io" + "io/ioutil" + "log" + "net/http" + "os" + "path" + "path/filepath" + "strings" + "sync" + "unicode" + + "golang.org/x/text/unicode/cldr" +) + +var ( + url = flag.String("url", + "http://www.unicode.org/Public", + "URL of Unicode database directory") + iana = flag.String("iana", + "http://www.iana.org", + "URL of the IANA repository") + unicodeVersion = flag.String("unicode", + getEnv("UNICODE_VERSION", unicode.Version), + "unicode version to use") + cldrVersion = flag.String("cldr", + getEnv("CLDR_VERSION", cldr.Version), + "cldr version to use") +) + +func getEnv(name, def string) string { + if v := os.Getenv(name); v != "" { + return v + } + return def +} + +// Init performs common initialization for a gen command. It parses the flags +// and sets up the standard logging parameters. +func Init() { + log.SetPrefix("") + log.SetFlags(log.Lshortfile) + flag.Parse() +} + +const header = `// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +` + +// UnicodeVersion reports the requested Unicode version. +func UnicodeVersion() string { + return *unicodeVersion +} + +// CLDRVersion reports the requested CLDR version. +func CLDRVersion() string { + return *cldrVersion +} + +var tags = []struct{ version, buildTags string }{ + {"10.0.0", "go1.10"}, + {"", "!go1.10"}, +} + +// buildTags reports the build tags used for the current Unicode version. +func buildTags() string { + v := UnicodeVersion() + for _, x := range tags { + // We should do a numeric comparison, but including the collate package + // would create an import cycle. We approximate it by assuming that + // longer version strings are later. + if len(x.version) <= len(v) { + return x.buildTags + } + if len(x.version) == len(v) && x.version <= v { + return x.buildTags + } + } + return tags[0].buildTags +} + +// IsLocal reports whether data files are available locally. +func IsLocal() bool { + dir, err := localReadmeFile() + if err != nil { + return false + } + if _, err = os.Stat(dir); err != nil { + return false + } + return true +} + +// OpenUCDFile opens the requested UCD file. The file is specified relative to +// the public Unicode root directory. It will call log.Fatal if there are any +// errors. +func OpenUCDFile(file string) io.ReadCloser { + return openUnicode(path.Join(*unicodeVersion, "ucd", file)) +} + +// OpenCLDRCoreZip opens the CLDR core zip file. It will call log.Fatal if there +// are any errors. +func OpenCLDRCoreZip() io.ReadCloser { + return OpenUnicodeFile("cldr", *cldrVersion, "core.zip") +} + +// OpenUnicodeFile opens the requested file of the requested category from the +// root of the Unicode data archive. The file is specified relative to the +// public Unicode root directory. If version is "", it will use the default +// Unicode version. It will call log.Fatal if there are any errors. +func OpenUnicodeFile(category, version, file string) io.ReadCloser { + if version == "" { + version = UnicodeVersion() + } + return openUnicode(path.Join(category, version, file)) +} + +// OpenIANAFile opens the requested IANA file. The file is specified relative +// to the IANA root, which is typically either http://www.iana.org or the +// iana directory in the local mirror. It will call log.Fatal if there are any +// errors. +func OpenIANAFile(path string) io.ReadCloser { + return Open(*iana, "iana", path) +} + +var ( + dirMutex sync.Mutex + localDir string +) + +const permissions = 0755 + +func localReadmeFile() (string, error) { + p, err := build.Import("golang.org/x/text", "", build.FindOnly) + if err != nil { + return "", fmt.Errorf("Could not locate package: %v", err) + } + return filepath.Join(p.Dir, "DATA", "README"), nil +} + +func getLocalDir() string { + dirMutex.Lock() + defer dirMutex.Unlock() + + readme, err := localReadmeFile() + if err != nil { + log.Fatal(err) + } + dir := filepath.Dir(readme) + if _, err := os.Stat(readme); err != nil { + if err := os.MkdirAll(dir, permissions); err != nil { + log.Fatalf("Could not create directory: %v", err) + } + ioutil.WriteFile(readme, []byte(readmeTxt), permissions) + } + return dir +} + +const readmeTxt = `Generated by golang.org/x/text/internal/gen. DO NOT EDIT. + +This directory contains downloaded files used to generate the various tables +in the golang.org/x/text subrepo. + +Note that the language subtag repo (iana/assignments/language-subtag-registry) +and all other times in the iana subdirectory are not versioned and will need +to be periodically manually updated. The easiest way to do this is to remove +the entire iana directory. This is mostly of concern when updating the language +package. +` + +// Open opens subdir/path if a local directory is specified and the file exists, +// where subdir is a directory relative to the local root, or fetches it from +// urlRoot/path otherwise. It will call log.Fatal if there are any errors. +func Open(urlRoot, subdir, path string) io.ReadCloser { + file := filepath.Join(getLocalDir(), subdir, filepath.FromSlash(path)) + return open(file, urlRoot, path) +} + +func openUnicode(path string) io.ReadCloser { + file := filepath.Join(getLocalDir(), filepath.FromSlash(path)) + return open(file, *url, path) +} + +// TODO: automatically periodically update non-versioned files. + +func open(file, urlRoot, path string) io.ReadCloser { + if f, err := os.Open(file); err == nil { + return f + } + r := get(urlRoot, path) + defer r.Close() + b, err := ioutil.ReadAll(r) + if err != nil { + log.Fatalf("Could not download file: %v", err) + } + os.MkdirAll(filepath.Dir(file), permissions) + if err := ioutil.WriteFile(file, b, permissions); err != nil { + log.Fatalf("Could not create file: %v", err) + } + return ioutil.NopCloser(bytes.NewReader(b)) +} + +func get(root, path string) io.ReadCloser { + url := root + "/" + path + fmt.Printf("Fetching %s...", url) + defer fmt.Println(" done.") + resp, err := http.Get(url) + if err != nil { + log.Fatalf("HTTP GET: %v", err) + } + if resp.StatusCode != 200 { + log.Fatalf("Bad GET status for %q: %q", url, resp.Status) + } + return resp.Body +} + +// TODO: use Write*Version in all applicable packages. + +// WriteUnicodeVersion writes a constant for the Unicode version from which the +// tables are generated. +func WriteUnicodeVersion(w io.Writer) { + fmt.Fprintf(w, "// UnicodeVersion is the Unicode version from which the tables in this package are derived.\n") + fmt.Fprintf(w, "const UnicodeVersion = %q\n\n", UnicodeVersion()) +} + +// WriteCLDRVersion writes a constant for the CLDR version from which the +// tables are generated. +func WriteCLDRVersion(w io.Writer) { + fmt.Fprintf(w, "// CLDRVersion is the CLDR version from which the tables in this package are derived.\n") + fmt.Fprintf(w, "const CLDRVersion = %q\n\n", CLDRVersion()) +} + +// WriteGoFile prepends a standard file comment and package statement to the +// given bytes, applies gofmt, and writes them to a file with the given name. +// It will call log.Fatal if there are any errors. +func WriteGoFile(filename, pkg string, b []byte) { + w, err := os.Create(filename) + if err != nil { + log.Fatalf("Could not create file %s: %v", filename, err) + } + defer w.Close() + if _, err = WriteGo(w, pkg, "", b); err != nil { + log.Fatalf("Error writing file %s: %v", filename, err) + } +} + +func insertVersion(filename, version string) string { + suffix := ".go" + if strings.HasSuffix(filename, "_test.go") { + suffix = "_test.go" + } + return fmt.Sprint(filename[:len(filename)-len(suffix)], version, suffix) +} + +// WriteVersionedGoFile prepends a standard file comment, adds build tags to +// version the file for the current Unicode version, and package statement to +// the given bytes, applies gofmt, and writes them to a file with the given +// name. It will call log.Fatal if there are any errors. +func WriteVersionedGoFile(filename, pkg string, b []byte) { + tags := buildTags() + if tags != "" { + filename = insertVersion(filename, UnicodeVersion()) + } + w, err := os.Create(filename) + if err != nil { + log.Fatalf("Could not create file %s: %v", filename, err) + } + defer w.Close() + if _, err = WriteGo(w, pkg, tags, b); err != nil { + log.Fatalf("Error writing file %s: %v", filename, err) + } +} + +// WriteGo prepends a standard file comment and package statement to the given +// bytes, applies gofmt, and writes them to w. +func WriteGo(w io.Writer, pkg, tags string, b []byte) (n int, err error) { + src := []byte(header) + if tags != "" { + src = append(src, fmt.Sprintf("// +build %s\n\n", tags)...) + } + src = append(src, fmt.Sprintf("package %s\n\n", pkg)...) + src = append(src, b...) + formatted, err := format.Source(src) + if err != nil { + // Print the generated code even in case of an error so that the + // returned error can be meaningfully interpreted. + n, _ = w.Write(src) + return n, err + } + return w.Write(formatted) +} + +// Repackage rewrites a Go file from belonging to package main to belonging to +// the given package. +func Repackage(inFile, outFile, pkg string) { + src, err := ioutil.ReadFile(inFile) + if err != nil { + log.Fatalf("reading %s: %v", inFile, err) + } + const toDelete = "package main\n\n" + i := bytes.Index(src, []byte(toDelete)) + if i < 0 { + log.Fatalf("Could not find %q in %s.", toDelete, inFile) + } + w := &bytes.Buffer{} + w.Write(src[i+len(toDelete):]) + WriteGoFile(outFile, pkg, w.Bytes()) +} diff --git a/vendor/golang.org/x/text/transform/transform.go b/vendor/golang.org/x/text/transform/transform.go new file mode 100644 index 00000000..fe47b9b3 --- /dev/null +++ b/vendor/golang.org/x/text/transform/transform.go @@ -0,0 +1,705 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package transform provides reader and writer wrappers that transform the +// bytes passing through as well as various transformations. Example +// transformations provided by other packages include normalization and +// conversion between character sets. +package transform // import "golang.org/x/text/transform" + +import ( + "bytes" + "errors" + "io" + "unicode/utf8" +) + +var ( + // ErrShortDst means that the destination buffer was too short to + // receive all of the transformed bytes. + ErrShortDst = errors.New("transform: short destination buffer") + + // ErrShortSrc means that the source buffer has insufficient data to + // complete the transformation. + ErrShortSrc = errors.New("transform: short source buffer") + + // ErrEndOfSpan means that the input and output (the transformed input) + // are not identical. + ErrEndOfSpan = errors.New("transform: input and output are not identical") + + // errInconsistentByteCount means that Transform returned success (nil + // error) but also returned nSrc inconsistent with the src argument. + errInconsistentByteCount = errors.New("transform: inconsistent byte count returned") + + // errShortInternal means that an internal buffer is not large enough + // to make progress and the Transform operation must be aborted. + errShortInternal = errors.New("transform: short internal buffer") +) + +// Transformer transforms bytes. +type Transformer interface { + // Transform writes to dst the transformed bytes read from src, and + // returns the number of dst bytes written and src bytes read. The + // atEOF argument tells whether src represents the last bytes of the + // input. + // + // Callers should always process the nDst bytes produced and account + // for the nSrc bytes consumed before considering the error err. + // + // A nil error means that all of the transformed bytes (whether freshly + // transformed from src or left over from previous Transform calls) + // were written to dst. A nil error can be returned regardless of + // whether atEOF is true. If err is nil then nSrc must equal len(src); + // the converse is not necessarily true. + // + // ErrShortDst means that dst was too short to receive all of the + // transformed bytes. ErrShortSrc means that src had insufficient data + // to complete the transformation. If both conditions apply, then + // either error may be returned. Other than the error conditions listed + // here, implementations are free to report other errors that arise. + Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) + + // Reset resets the state and allows a Transformer to be reused. + Reset() +} + +// SpanningTransformer extends the Transformer interface with a Span method +// that determines how much of the input already conforms to the Transformer. +type SpanningTransformer interface { + Transformer + + // Span returns a position in src such that transforming src[:n] results in + // identical output src[:n] for these bytes. It does not necessarily return + // the largest such n. The atEOF argument tells whether src represents the + // last bytes of the input. + // + // Callers should always account for the n bytes consumed before + // considering the error err. + // + // A nil error means that all input bytes are known to be identical to the + // output produced by the Transformer. A nil error can be be returned + // regardless of whether atEOF is true. If err is nil, then then n must + // equal len(src); the converse is not necessarily true. + // + // ErrEndOfSpan means that the Transformer output may differ from the + // input after n bytes. Note that n may be len(src), meaning that the output + // would contain additional bytes after otherwise identical output. + // ErrShortSrc means that src had insufficient data to determine whether the + // remaining bytes would change. Other than the error conditions listed + // here, implementations are free to report other errors that arise. + // + // Calling Span can modify the Transformer state as a side effect. In + // effect, it does the transformation just as calling Transform would, only + // without copying to a destination buffer and only up to a point it can + // determine the input and output bytes are the same. This is obviously more + // limited than calling Transform, but can be more efficient in terms of + // copying and allocating buffers. Calls to Span and Transform may be + // interleaved. + Span(src []byte, atEOF bool) (n int, err error) +} + +// NopResetter can be embedded by implementations of Transformer to add a nop +// Reset method. +type NopResetter struct{} + +// Reset implements the Reset method of the Transformer interface. +func (NopResetter) Reset() {} + +// Reader wraps another io.Reader by transforming the bytes read. +type Reader struct { + r io.Reader + t Transformer + err error + + // dst[dst0:dst1] contains bytes that have been transformed by t but + // not yet copied out via Read. + dst []byte + dst0, dst1 int + + // src[src0:src1] contains bytes that have been read from r but not + // yet transformed through t. + src []byte + src0, src1 int + + // transformComplete is whether the transformation is complete, + // regardless of whether or not it was successful. + transformComplete bool +} + +const defaultBufSize = 4096 + +// NewReader returns a new Reader that wraps r by transforming the bytes read +// via t. It calls Reset on t. +func NewReader(r io.Reader, t Transformer) *Reader { + t.Reset() + return &Reader{ + r: r, + t: t, + dst: make([]byte, defaultBufSize), + src: make([]byte, defaultBufSize), + } +} + +// Read implements the io.Reader interface. +func (r *Reader) Read(p []byte) (int, error) { + n, err := 0, error(nil) + for { + // Copy out any transformed bytes and return the final error if we are done. + if r.dst0 != r.dst1 { + n = copy(p, r.dst[r.dst0:r.dst1]) + r.dst0 += n + if r.dst0 == r.dst1 && r.transformComplete { + return n, r.err + } + return n, nil + } else if r.transformComplete { + return 0, r.err + } + + // Try to transform some source bytes, or to flush the transformer if we + // are out of source bytes. We do this even if r.r.Read returned an error. + // As the io.Reader documentation says, "process the n > 0 bytes returned + // before considering the error". + if r.src0 != r.src1 || r.err != nil { + r.dst0 = 0 + r.dst1, n, err = r.t.Transform(r.dst, r.src[r.src0:r.src1], r.err == io.EOF) + r.src0 += n + + switch { + case err == nil: + if r.src0 != r.src1 { + r.err = errInconsistentByteCount + } + // The Transform call was successful; we are complete if we + // cannot read more bytes into src. + r.transformComplete = r.err != nil + continue + case err == ErrShortDst && (r.dst1 != 0 || n != 0): + // Make room in dst by copying out, and try again. + continue + case err == ErrShortSrc && r.src1-r.src0 != len(r.src) && r.err == nil: + // Read more bytes into src via the code below, and try again. + default: + r.transformComplete = true + // The reader error (r.err) takes precedence over the + // transformer error (err) unless r.err is nil or io.EOF. + if r.err == nil || r.err == io.EOF { + r.err = err + } + continue + } + } + + // Move any untransformed source bytes to the start of the buffer + // and read more bytes. + if r.src0 != 0 { + r.src0, r.src1 = 0, copy(r.src, r.src[r.src0:r.src1]) + } + n, r.err = r.r.Read(r.src[r.src1:]) + r.src1 += n + } +} + +// TODO: implement ReadByte (and ReadRune??). + +// Writer wraps another io.Writer by transforming the bytes read. +// The user needs to call Close to flush unwritten bytes that may +// be buffered. +type Writer struct { + w io.Writer + t Transformer + dst []byte + + // src[:n] contains bytes that have not yet passed through t. + src []byte + n int +} + +// NewWriter returns a new Writer that wraps w by transforming the bytes written +// via t. It calls Reset on t. +func NewWriter(w io.Writer, t Transformer) *Writer { + t.Reset() + return &Writer{ + w: w, + t: t, + dst: make([]byte, defaultBufSize), + src: make([]byte, defaultBufSize), + } +} + +// Write implements the io.Writer interface. If there are not enough +// bytes available to complete a Transform, the bytes will be buffered +// for the next write. Call Close to convert the remaining bytes. +func (w *Writer) Write(data []byte) (n int, err error) { + src := data + if w.n > 0 { + // Append bytes from data to the last remainder. + // TODO: limit the amount copied on first try. + n = copy(w.src[w.n:], data) + w.n += n + src = w.src[:w.n] + } + for { + nDst, nSrc, err := w.t.Transform(w.dst, src, false) + if _, werr := w.w.Write(w.dst[:nDst]); werr != nil { + return n, werr + } + src = src[nSrc:] + if w.n == 0 { + n += nSrc + } else if len(src) <= n { + // Enough bytes from w.src have been consumed. We make src point + // to data instead to reduce the copying. + w.n = 0 + n -= len(src) + src = data[n:] + if n < len(data) && (err == nil || err == ErrShortSrc) { + continue + } + } + switch err { + case ErrShortDst: + // This error is okay as long as we are making progress. + if nDst > 0 || nSrc > 0 { + continue + } + case ErrShortSrc: + if len(src) < len(w.src) { + m := copy(w.src, src) + // If w.n > 0, bytes from data were already copied to w.src and n + // was already set to the number of bytes consumed. + if w.n == 0 { + n += m + } + w.n = m + err = nil + } else if nDst > 0 || nSrc > 0 { + // Not enough buffer to store the remainder. Keep processing as + // long as there is progress. Without this case, transforms that + // require a lookahead larger than the buffer may result in an + // error. This is not something one may expect to be common in + // practice, but it may occur when buffers are set to small + // sizes during testing. + continue + } + case nil: + if w.n > 0 { + err = errInconsistentByteCount + } + } + return n, err + } +} + +// Close implements the io.Closer interface. +func (w *Writer) Close() error { + src := w.src[:w.n] + for { + nDst, nSrc, err := w.t.Transform(w.dst, src, true) + if _, werr := w.w.Write(w.dst[:nDst]); werr != nil { + return werr + } + if err != ErrShortDst { + return err + } + src = src[nSrc:] + } +} + +type nop struct{ NopResetter } + +func (nop) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + n := copy(dst, src) + if n < len(src) { + err = ErrShortDst + } + return n, n, err +} + +func (nop) Span(src []byte, atEOF bool) (n int, err error) { + return len(src), nil +} + +type discard struct{ NopResetter } + +func (discard) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + return 0, len(src), nil +} + +var ( + // Discard is a Transformer for which all Transform calls succeed + // by consuming all bytes and writing nothing. + Discard Transformer = discard{} + + // Nop is a SpanningTransformer that copies src to dst. + Nop SpanningTransformer = nop{} +) + +// chain is a sequence of links. A chain with N Transformers has N+1 links and +// N+1 buffers. Of those N+1 buffers, the first and last are the src and dst +// buffers given to chain.Transform and the middle N-1 buffers are intermediate +// buffers owned by the chain. The i'th link transforms bytes from the i'th +// buffer chain.link[i].b at read offset chain.link[i].p to the i+1'th buffer +// chain.link[i+1].b at write offset chain.link[i+1].n, for i in [0, N). +type chain struct { + link []link + err error + // errStart is the index at which the error occurred plus 1. Processing + // errStart at this level at the next call to Transform. As long as + // errStart > 0, chain will not consume any more source bytes. + errStart int +} + +func (c *chain) fatalError(errIndex int, err error) { + if i := errIndex + 1; i > c.errStart { + c.errStart = i + c.err = err + } +} + +type link struct { + t Transformer + // b[p:n] holds the bytes to be transformed by t. + b []byte + p int + n int +} + +func (l *link) src() []byte { + return l.b[l.p:l.n] +} + +func (l *link) dst() []byte { + return l.b[l.n:] +} + +// Chain returns a Transformer that applies t in sequence. +func Chain(t ...Transformer) Transformer { + if len(t) == 0 { + return nop{} + } + c := &chain{link: make([]link, len(t)+1)} + for i, tt := range t { + c.link[i].t = tt + } + // Allocate intermediate buffers. + b := make([][defaultBufSize]byte, len(t)-1) + for i := range b { + c.link[i+1].b = b[i][:] + } + return c +} + +// Reset resets the state of Chain. It calls Reset on all the Transformers. +func (c *chain) Reset() { + for i, l := range c.link { + if l.t != nil { + l.t.Reset() + } + c.link[i].p, c.link[i].n = 0, 0 + } +} + +// TODO: make chain use Span (is going to be fun to implement!) + +// Transform applies the transformers of c in sequence. +func (c *chain) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + // Set up src and dst in the chain. + srcL := &c.link[0] + dstL := &c.link[len(c.link)-1] + srcL.b, srcL.p, srcL.n = src, 0, len(src) + dstL.b, dstL.n = dst, 0 + var lastFull, needProgress bool // for detecting progress + + // i is the index of the next Transformer to apply, for i in [low, high]. + // low is the lowest index for which c.link[low] may still produce bytes. + // high is the highest index for which c.link[high] has a Transformer. + // The error returned by Transform determines whether to increase or + // decrease i. We try to completely fill a buffer before converting it. + for low, i, high := c.errStart, c.errStart, len(c.link)-2; low <= i && i <= high; { + in, out := &c.link[i], &c.link[i+1] + nDst, nSrc, err0 := in.t.Transform(out.dst(), in.src(), atEOF && low == i) + out.n += nDst + in.p += nSrc + if i > 0 && in.p == in.n { + in.p, in.n = 0, 0 + } + needProgress, lastFull = lastFull, false + switch err0 { + case ErrShortDst: + // Process the destination buffer next. Return if we are already + // at the high index. + if i == high { + return dstL.n, srcL.p, ErrShortDst + } + if out.n != 0 { + i++ + // If the Transformer at the next index is not able to process any + // source bytes there is nothing that can be done to make progress + // and the bytes will remain unprocessed. lastFull is used to + // detect this and break out of the loop with a fatal error. + lastFull = true + continue + } + // The destination buffer was too small, but is completely empty. + // Return a fatal error as this transformation can never complete. + c.fatalError(i, errShortInternal) + case ErrShortSrc: + if i == 0 { + // Save ErrShortSrc in err. All other errors take precedence. + err = ErrShortSrc + break + } + // Source bytes were depleted before filling up the destination buffer. + // Verify we made some progress, move the remaining bytes to the errStart + // and try to get more source bytes. + if needProgress && nSrc == 0 || in.n-in.p == len(in.b) { + // There were not enough source bytes to proceed while the source + // buffer cannot hold any more bytes. Return a fatal error as this + // transformation can never complete. + c.fatalError(i, errShortInternal) + break + } + // in.b is an internal buffer and we can make progress. + in.p, in.n = 0, copy(in.b, in.src()) + fallthrough + case nil: + // if i == low, we have depleted the bytes at index i or any lower levels. + // In that case we increase low and i. In all other cases we decrease i to + // fetch more bytes before proceeding to the next index. + if i > low { + i-- + continue + } + default: + c.fatalError(i, err0) + } + // Exhausted level low or fatal error: increase low and continue + // to process the bytes accepted so far. + i++ + low = i + } + + // If c.errStart > 0, this means we found a fatal error. We will clear + // all upstream buffers. At this point, no more progress can be made + // downstream, as Transform would have bailed while handling ErrShortDst. + if c.errStart > 0 { + for i := 1; i < c.errStart; i++ { + c.link[i].p, c.link[i].n = 0, 0 + } + err, c.errStart, c.err = c.err, 0, nil + } + return dstL.n, srcL.p, err +} + +// Deprecated: use runes.Remove instead. +func RemoveFunc(f func(r rune) bool) Transformer { + return removeF(f) +} + +type removeF func(r rune) bool + +func (removeF) Reset() {} + +// Transform implements the Transformer interface. +func (t removeF) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + for r, sz := rune(0), 0; len(src) > 0; src = src[sz:] { + + if r = rune(src[0]); r < utf8.RuneSelf { + sz = 1 + } else { + r, sz = utf8.DecodeRune(src) + + if sz == 1 { + // Invalid rune. + if !atEOF && !utf8.FullRune(src) { + err = ErrShortSrc + break + } + // We replace illegal bytes with RuneError. Not doing so might + // otherwise turn a sequence of invalid UTF-8 into valid UTF-8. + // The resulting byte sequence may subsequently contain runes + // for which t(r) is true that were passed unnoticed. + if !t(r) { + if nDst+3 > len(dst) { + err = ErrShortDst + break + } + nDst += copy(dst[nDst:], "\uFFFD") + } + nSrc++ + continue + } + } + + if !t(r) { + if nDst+sz > len(dst) { + err = ErrShortDst + break + } + nDst += copy(dst[nDst:], src[:sz]) + } + nSrc += sz + } + return +} + +// grow returns a new []byte that is longer than b, and copies the first n bytes +// of b to the start of the new slice. +func grow(b []byte, n int) []byte { + m := len(b) + if m <= 32 { + m = 64 + } else if m <= 256 { + m *= 2 + } else { + m += m >> 1 + } + buf := make([]byte, m) + copy(buf, b[:n]) + return buf +} + +const initialBufSize = 128 + +// String returns a string with the result of converting s[:n] using t, where +// n <= len(s). If err == nil, n will be len(s). It calls Reset on t. +func String(t Transformer, s string) (result string, n int, err error) { + t.Reset() + if s == "" { + // Fast path for the common case for empty input. Results in about a + // 86% reduction of running time for BenchmarkStringLowerEmpty. + if _, _, err := t.Transform(nil, nil, true); err == nil { + return "", 0, nil + } + } + + // Allocate only once. Note that both dst and src escape when passed to + // Transform. + buf := [2 * initialBufSize]byte{} + dst := buf[:initialBufSize:initialBufSize] + src := buf[initialBufSize : 2*initialBufSize] + + // The input string s is transformed in multiple chunks (starting with a + // chunk size of initialBufSize). nDst and nSrc are per-chunk (or + // per-Transform-call) indexes, pDst and pSrc are overall indexes. + nDst, nSrc := 0, 0 + pDst, pSrc := 0, 0 + + // pPrefix is the length of a common prefix: the first pPrefix bytes of the + // result will equal the first pPrefix bytes of s. It is not guaranteed to + // be the largest such value, but if pPrefix, len(result) and len(s) are + // all equal after the final transform (i.e. calling Transform with atEOF + // being true returned nil error) then we don't need to allocate a new + // result string. + pPrefix := 0 + for { + // Invariant: pDst == pPrefix && pSrc == pPrefix. + + n := copy(src, s[pSrc:]) + nDst, nSrc, err = t.Transform(dst, src[:n], pSrc+n == len(s)) + pDst += nDst + pSrc += nSrc + + // TODO: let transformers implement an optional Spanner interface, akin + // to norm's QuickSpan. This would even allow us to avoid any allocation. + if !bytes.Equal(dst[:nDst], src[:nSrc]) { + break + } + pPrefix = pSrc + if err == ErrShortDst { + // A buffer can only be short if a transformer modifies its input. + break + } else if err == ErrShortSrc { + if nSrc == 0 { + // No progress was made. + break + } + // Equal so far and !atEOF, so continue checking. + } else if err != nil || pPrefix == len(s) { + return string(s[:pPrefix]), pPrefix, err + } + } + // Post-condition: pDst == pPrefix + nDst && pSrc == pPrefix + nSrc. + + // We have transformed the first pSrc bytes of the input s to become pDst + // transformed bytes. Those transformed bytes are discontiguous: the first + // pPrefix of them equal s[:pPrefix] and the last nDst of them equal + // dst[:nDst]. We copy them around, into a new dst buffer if necessary, so + // that they become one contiguous slice: dst[:pDst]. + if pPrefix != 0 { + newDst := dst + if pDst > len(newDst) { + newDst = make([]byte, len(s)+nDst-nSrc) + } + copy(newDst[pPrefix:pDst], dst[:nDst]) + copy(newDst[:pPrefix], s[:pPrefix]) + dst = newDst + } + + // Prevent duplicate Transform calls with atEOF being true at the end of + // the input. Also return if we have an unrecoverable error. + if (err == nil && pSrc == len(s)) || + (err != nil && err != ErrShortDst && err != ErrShortSrc) { + return string(dst[:pDst]), pSrc, err + } + + // Transform the remaining input, growing dst and src buffers as necessary. + for { + n := copy(src, s[pSrc:]) + nDst, nSrc, err := t.Transform(dst[pDst:], src[:n], pSrc+n == len(s)) + pDst += nDst + pSrc += nSrc + + // If we got ErrShortDst or ErrShortSrc, do not grow as long as we can + // make progress. This may avoid excessive allocations. + if err == ErrShortDst { + if nDst == 0 { + dst = grow(dst, pDst) + } + } else if err == ErrShortSrc { + if nSrc == 0 { + src = grow(src, 0) + } + } else if err != nil || pSrc == len(s) { + return string(dst[:pDst]), pSrc, err + } + } +} + +// Bytes returns a new byte slice with the result of converting b[:n] using t, +// where n <= len(b). If err == nil, n will be len(b). It calls Reset on t. +func Bytes(t Transformer, b []byte) (result []byte, n int, err error) { + return doAppend(t, 0, make([]byte, len(b)), b) +} + +// Append appends the result of converting src[:n] using t to dst, where +// n <= len(src), If err == nil, n will be len(src). It calls Reset on t. +func Append(t Transformer, dst, src []byte) (result []byte, n int, err error) { + if len(dst) == cap(dst) { + n := len(src) + len(dst) // It is okay for this to be 0. + b := make([]byte, n) + dst = b[:copy(b, dst)] + } + return doAppend(t, len(dst), dst[:cap(dst)], src) +} + +func doAppend(t Transformer, pDst int, dst, src []byte) (result []byte, n int, err error) { + t.Reset() + pSrc := 0 + for { + nDst, nSrc, err := t.Transform(dst[pDst:], src[pSrc:], true) + pDst += nDst + pSrc += nSrc + if err != ErrShortDst { + return dst[:pDst], pSrc, err + } + + // Grow the destination buffer, but do not grow as long as we can make + // progress. This may avoid excessive allocations. + if nDst == 0 { + dst = grow(dst, pDst) + } + } +} diff --git a/vendor/golang.org/x/text/unicode/cldr/base.go b/vendor/golang.org/x/text/unicode/cldr/base.go new file mode 100644 index 00000000..63cdc16c --- /dev/null +++ b/vendor/golang.org/x/text/unicode/cldr/base.go @@ -0,0 +1,105 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cldr + +import ( + "encoding/xml" + "regexp" + "strconv" +) + +// Elem is implemented by every XML element. +type Elem interface { + setEnclosing(Elem) + setName(string) + enclosing() Elem + + GetCommon() *Common +} + +type hidden struct { + CharData string `xml:",chardata"` + Alias *struct { + Common + Source string `xml:"source,attr"` + Path string `xml:"path,attr"` + } `xml:"alias"` + Def *struct { + Common + Choice string `xml:"choice,attr,omitempty"` + Type string `xml:"type,attr,omitempty"` + } `xml:"default"` +} + +// Common holds several of the most common attributes and sub elements +// of an XML element. +type Common struct { + XMLName xml.Name + name string + enclElem Elem + Type string `xml:"type,attr,omitempty"` + Reference string `xml:"reference,attr,omitempty"` + Alt string `xml:"alt,attr,omitempty"` + ValidSubLocales string `xml:"validSubLocales,attr,omitempty"` + Draft string `xml:"draft,attr,omitempty"` + hidden +} + +// Default returns the default type to select from the enclosed list +// or "" if no default value is specified. +func (e *Common) Default() string { + if e.Def == nil { + return "" + } + if e.Def.Choice != "" { + return e.Def.Choice + } else if e.Def.Type != "" { + // Type is still used by the default element in collation. + return e.Def.Type + } + return "" +} + +// Element returns the XML element name. +func (e *Common) Element() string { + return e.name +} + +// GetCommon returns e. It is provided such that Common implements Elem. +func (e *Common) GetCommon() *Common { + return e +} + +// Data returns the character data accumulated for this element. +func (e *Common) Data() string { + e.CharData = charRe.ReplaceAllStringFunc(e.CharData, replaceUnicode) + return e.CharData +} + +func (e *Common) setName(s string) { + e.name = s +} + +func (e *Common) enclosing() Elem { + return e.enclElem +} + +func (e *Common) setEnclosing(en Elem) { + e.enclElem = en +} + +// Escape characters that can be escaped without further escaping the string. +var charRe = regexp.MustCompile(`&#x[0-9a-fA-F]*;|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}|\\x[0-9a-fA-F]{2}|\\[0-7]{3}|\\[abtnvfr]`) + +// replaceUnicode converts hexadecimal Unicode codepoint notations to a one-rune string. +// It assumes the input string is correctly formatted. +func replaceUnicode(s string) string { + if s[1] == '#' { + r, _ := strconv.ParseInt(s[3:len(s)-1], 16, 32) + return string(r) + } + r, _, _, _ := strconv.UnquoteChar(s, 0) + return string(r) +} diff --git a/vendor/golang.org/x/text/unicode/cldr/cldr.go b/vendor/golang.org/x/text/unicode/cldr/cldr.go new file mode 100644 index 00000000..2197f8ac --- /dev/null +++ b/vendor/golang.org/x/text/unicode/cldr/cldr.go @@ -0,0 +1,130 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run makexml.go -output xml.go + +// Package cldr provides a parser for LDML and related XML formats. +// This package is intended to be used by the table generation tools +// for the various internationalization-related packages. +// As the XML types are generated from the CLDR DTD, and as the CLDR standard +// is periodically amended, this package may change considerably over time. +// This mostly means that data may appear and disappear between versions. +// That is, old code should keep compiling for newer versions, but data +// may have moved or changed. +// CLDR version 22 is the first version supported by this package. +// Older versions may not work. +package cldr // import "golang.org/x/text/unicode/cldr" + +import ( + "fmt" + "sort" +) + +// CLDR provides access to parsed data of the Unicode Common Locale Data Repository. +type CLDR struct { + parent map[string][]string + locale map[string]*LDML + resolved map[string]*LDML + bcp47 *LDMLBCP47 + supp *SupplementalData +} + +func makeCLDR() *CLDR { + return &CLDR{ + parent: make(map[string][]string), + locale: make(map[string]*LDML), + resolved: make(map[string]*LDML), + bcp47: &LDMLBCP47{}, + supp: &SupplementalData{}, + } +} + +// BCP47 returns the parsed BCP47 LDML data. If no such data was parsed, nil is returned. +func (cldr *CLDR) BCP47() *LDMLBCP47 { + return nil +} + +// Draft indicates the draft level of an element. +type Draft int + +const ( + Approved Draft = iota + Contributed + Provisional + Unconfirmed +) + +var drafts = []string{"unconfirmed", "provisional", "contributed", "approved", ""} + +// ParseDraft returns the Draft value corresponding to the given string. The +// empty string corresponds to Approved. +func ParseDraft(level string) (Draft, error) { + if level == "" { + return Approved, nil + } + for i, s := range drafts { + if level == s { + return Unconfirmed - Draft(i), nil + } + } + return Approved, fmt.Errorf("cldr: unknown draft level %q", level) +} + +func (d Draft) String() string { + return drafts[len(drafts)-1-int(d)] +} + +// SetDraftLevel sets which draft levels to include in the evaluated LDML. +// Any draft element for which the draft level is higher than lev will be excluded. +// If multiple draft levels are available for a single element, the one with the +// lowest draft level will be selected, unless preferDraft is true, in which case +// the highest draft will be chosen. +// It is assumed that the underlying LDML is canonicalized. +func (cldr *CLDR) SetDraftLevel(lev Draft, preferDraft bool) { + // TODO: implement + cldr.resolved = make(map[string]*LDML) +} + +// RawLDML returns the LDML XML for id in unresolved form. +// id must be one of the strings returned by Locales. +func (cldr *CLDR) RawLDML(loc string) *LDML { + return cldr.locale[loc] +} + +// LDML returns the fully resolved LDML XML for loc, which must be one of +// the strings returned by Locales. +func (cldr *CLDR) LDML(loc string) (*LDML, error) { + return cldr.resolve(loc) +} + +// Supplemental returns the parsed supplemental data. If no such data was parsed, +// nil is returned. +func (cldr *CLDR) Supplemental() *SupplementalData { + return cldr.supp +} + +// Locales returns the locales for which there exist files. +// Valid sublocales for which there is no file are not included. +// The root locale is always sorted first. +func (cldr *CLDR) Locales() []string { + loc := []string{"root"} + hasRoot := false + for l, _ := range cldr.locale { + if l == "root" { + hasRoot = true + continue + } + loc = append(loc, l) + } + sort.Strings(loc[1:]) + if !hasRoot { + return loc[1:] + } + return loc +} + +// Get fills in the fields of x based on the XPath path. +func Get(e Elem, path string) (res Elem, err error) { + return walkXPath(e, path) +} diff --git a/vendor/golang.org/x/text/unicode/cldr/collate.go b/vendor/golang.org/x/text/unicode/cldr/collate.go new file mode 100644 index 00000000..80ee28d7 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/cldr/collate.go @@ -0,0 +1,359 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cldr + +import ( + "bufio" + "encoding/xml" + "errors" + "fmt" + "strconv" + "strings" + "unicode" + "unicode/utf8" +) + +// RuleProcessor can be passed to Collator's Process method, which +// parses the rules and calls the respective method for each rule found. +type RuleProcessor interface { + Reset(anchor string, before int) error + Insert(level int, str, context, extend string) error + Index(id string) +} + +const ( + // cldrIndex is a Unicode-reserved sentinel value used to mark the start + // of a grouping within an index. + // We ignore any rule that starts with this rune. + // See http://unicode.org/reports/tr35/#Collation_Elements for details. + cldrIndex = "\uFDD0" + + // specialAnchor is the format in which to represent logical reset positions, + // such as "first tertiary ignorable". + specialAnchor = "<%s/>" +) + +// Process parses the rules for the tailorings of this collation +// and calls the respective methods of p for each rule found. +func (c Collation) Process(p RuleProcessor) (err error) { + if len(c.Cr) > 0 { + if len(c.Cr) > 1 { + return fmt.Errorf("multiple cr elements, want 0 or 1") + } + return processRules(p, c.Cr[0].Data()) + } + if c.Rules.Any != nil { + return c.processXML(p) + } + return errors.New("no tailoring data") +} + +// processRules parses rules in the Collation Rule Syntax defined in +// http://www.unicode.org/reports/tr35/tr35-collation.html#Collation_Tailorings. +func processRules(p RuleProcessor, s string) (err error) { + chk := func(s string, e error) string { + if err == nil { + err = e + } + return s + } + i := 0 // Save the line number for use after the loop. + scanner := bufio.NewScanner(strings.NewReader(s)) + for ; scanner.Scan() && err == nil; i++ { + for s := skipSpace(scanner.Text()); s != "" && s[0] != '#'; s = skipSpace(s) { + level := 5 + var ch byte + switch ch, s = s[0], s[1:]; ch { + case '&': // followed by or '[' ']' + if s = skipSpace(s); consume(&s, '[') { + s = chk(parseSpecialAnchor(p, s)) + } else { + s = chk(parseAnchor(p, 0, s)) + } + case '<': // sort relation '<'{1,4}, optionally followed by '*'. + for level = 1; consume(&s, '<'); level++ { + } + if level > 4 { + err = fmt.Errorf("level %d > 4", level) + } + fallthrough + case '=': // identity relation, optionally followed by *. + if consume(&s, '*') { + s = chk(parseSequence(p, level, s)) + } else { + s = chk(parseOrder(p, level, s)) + } + default: + chk("", fmt.Errorf("illegal operator %q", ch)) + break + } + } + } + if chk("", scanner.Err()); err != nil { + return fmt.Errorf("%d: %v", i, err) + } + return nil +} + +// parseSpecialAnchor parses the anchor syntax which is either of the form +// ['before' ] +// or +// [

    #VBW_{5$#Up)b}Ig*}DiqurNa^ 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%0AHGXPxdb@gt{vr5%NssK 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