qat-core 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,144 @@
1
+ require 'active_support/core_ext/object/deep_dup'
2
+ require 'active_support/core_ext/hash/compact'
3
+
4
+ # class Hash
5
+ class Hash
6
+ # Returns a copy of the current hash with non nil values throughout all tree
7
+ #@return [Hash]
8
+ #
9
+ # @example
10
+ # > hash = {a: nil, b: 'b'}
11
+ # > hash.deep_compact
12
+ # => {b: 'b'}
13
+ # > hash
14
+ # => {a: nil, b: 'b'}
15
+ #
16
+ # > hash = { a: nil, b: { ba: 'ba', bb: { bba: nil, bbb: 'bbb' }, bc: nil } }
17
+ # > hash.deep_compact
18
+ # => { b: { ba: 'ba', bb: { bbb: 'bbb' } } }
19
+ # > hash
20
+ # => { a: nil, b: { ba: 'ba', bb: { bba: nil, bbb: 'bbb' }, bc: nil } }
21
+ #
22
+ # > hash = { a: nil, b: 'value', c: [1, 2, 3] }
23
+ # > hash.deep_compact
24
+ # => { b: 'value', c: [1, 2, 3] }
25
+ # > hash
26
+ # => { a: nil, b: 'value', c: [1, 2, 3] }
27
+ #
28
+ # > hash = { a: nil, b: 'value', c: [1, nil, { ca: 3, cb: nil }] }
29
+ # > hash.deep_compact
30
+ # => { b: 'value', c: [1, { ca: 3 }] }
31
+ # > hash
32
+ # => { a: nil, b: 'value', c: [1, nil, { ca: 3, cb: nil }] }
33
+ #
34
+ def deep_compact
35
+ deep_dup.deep_compact!
36
+ end
37
+
38
+
39
+ # Replaces the current hash with non nil values throughout all tree
40
+ #@return [Hash]
41
+ #
42
+ # @example
43
+ # > hash = {a: nil, b: 'b'}
44
+ # > hash.deep_compact!
45
+ # => {b: 'b'}
46
+ # > hash
47
+ # => {b: 'b'}
48
+ #
49
+ # > hash = { a: nil, b: { ba: 'ba', bb: { bba: nil, bbb: 'bbb' }, bc: nil } }
50
+ # > hash.deep_compact!
51
+ # => { b: { ba: 'ba', bb: { bbb: 'bbb' } } }
52
+ # > hash
53
+ # => { b: { ba: 'ba', bb: { bbb: 'bbb' } } }
54
+ #
55
+ # > hash = { a: nil, b: 'value', c: [1, 2, 3] }
56
+ # > hash.deep_compact!
57
+ # => { b: 'value', c: [1, 2, 3] }
58
+ # > hash
59
+ # => { b: 'value', c: [1, 2, 3] }
60
+ #
61
+ # > hash = { a: nil, b: 'value', c: [1, nil, { ca: 3, cb: nil }] }
62
+ # > hash.deep_compact!
63
+ # => { b: 'value', c: [1, { ca: 3 }] }
64
+ # > hash
65
+ # => { b: 'value', c: [1, { ca: 3 }] }
66
+ #
67
+ def deep_compact!
68
+ self.compact!
69
+ self.each do |key, value|
70
+ self[key] = value.respond_to?(:deep_compact!) ? value.deep_compact! : value
71
+ end
72
+ end
73
+ end
74
+
75
+ # class Array
76
+ class Array
77
+ # Returns a copy of the the current array with non nil values throughout all tree
78
+ #@return [Array]
79
+ #
80
+ # @example
81
+ # > array = [nil, 'b']
82
+ # > array.deep_compact!
83
+ # => ['b']
84
+ # > array
85
+ # => [nil, 'b']
86
+ #
87
+ # > array = [nil, ['ba', [nil, 'bbb'], nil], 'c']
88
+ # > array.deep_compact!
89
+ # => [['ba', ['bbb']], 'c']
90
+ # > array
91
+ # => [nil, ['ba', [nil, 'bbb'], nil], 'c']
92
+ #
93
+ # > array = [nil, 'value', { c: [1, 2, 3] }]
94
+ # > array.deep_compact!
95
+ # => ['value', { c: [1, 2, 3] }]
96
+ # > array
97
+ # => [nil, 'value', { c: [1, 2, 3] }]
98
+ #
99
+ # > array = [nil, 'value', { c: [1, nil, { d: 3, e: nil }] }]
100
+ # > array.deep_compact!
101
+ # => ['value', { c: [1, { d: 3 }] }]
102
+ # > array
103
+ # => [nil, 'value', { c: [1, nil, { d: 3, e: nil }] }]
104
+ #
105
+ def deep_compact
106
+ deep_dup.deep_compact!
107
+ end
108
+
109
+
110
+ # Replaces the current array with non nil values throughout all tree
111
+ #@return [Array]
112
+ #
113
+ # @example
114
+ # > array = [nil, 'b']
115
+ # > array.deep_compact!
116
+ # => ['b']
117
+ # > array
118
+ # => ['b']
119
+ #
120
+ # > array = [nil, ['ba', [nil, 'bbb'], nil], 'c']
121
+ # > array.deep_compact!
122
+ # => [['ba', ['bbb']], 'c']
123
+ # > array
124
+ # => [['ba', ['bbb']], 'c']
125
+ #
126
+ # > array = [nil, 'value', { c: [1, 2, 3] }]
127
+ # > array.deep_compact!
128
+ # => ['value', { c: [1, 2, 3] }]
129
+ # > array
130
+ # => ['value', { c: [1, 2, 3] }]
131
+ #
132
+ # > array = [nil, 'value', { c: [1, nil, { d: 3, e: nil }] }]
133
+ # > array.deep_compact!
134
+ # => ['value', { c: [1, { d: 3 }] }]
135
+ # > array
136
+ # => ['value', { c: [1, { d: 3 }] }]
137
+ #
138
+ def deep_compact!
139
+ self.compact!
140
+ self.map! do |element|
141
+ element.respond_to?(:deep_compact!) ? element.deep_compact! : element
142
+ end
143
+ end
144
+ end
data/lib/qat/time.rb ADDED
@@ -0,0 +1,156 @@
1
+ require 'socket'
2
+ require 'resolv'
3
+ require 'active_support/core_ext/string/inflections'
4
+ require 'active_support/core_ext/time'
5
+ require 'timecop'
6
+ require 'chronic'
7
+ require 'qat/logger'
8
+ require_relative 'core/version'
9
+
10
+ # load the correct module depending on OS
11
+ if /cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM
12
+ require_relative 'time/zone/windows'
13
+ else
14
+ require_relative 'time/zone/unix'
15
+ end
16
+
17
+ module QAT
18
+
19
+ # This class represents QAT's Time extensions/enhancements.
20
+ #
21
+ # This class should be used globally to obtain {Time} object, allowing centralized modification of time generation.
22
+ # There are three main featured united in this class:
23
+ # * Clock Synchronization
24
+ # * Time zone change
25
+ # * Natural time expression parsing
26
+ #@since 0.1.0
27
+ class Time
28
+ include Logger
29
+ extend QAT::Time::Zone
30
+
31
+ class << self
32
+
33
+ # @!attribute default_sync_method
34
+ # @return [String] default method to be used in {synchronize}. Default: NTP
35
+ attr_accessor :default_sync_method
36
+
37
+ # Synchronizes the host's time/date with a remote server time/date
38
+ #
39
+ #@param host [String] host ip address/ hostname
40
+ #@param method [String] method used for synchronization: +NTP+ or +SSH+.
41
+ #@param opts [Hash] synchronization options
42
+ #@return [ActiveSupport::TimeWithZone] Current time
43
+ def synchronize(host, method=default_sync_method, opts={})
44
+ opts ||= {} # opts can be a *nil* when it comes from qat/cucumber
45
+ log.info { "Synchronizing with host #{host} using #{method} method" }
46
+ sync_meth = to_method_name method
47
+ unless respond_to? sync_meth
48
+ log.error { "No synchronize method #{method} defined!" }
49
+ raise NotImplementedError.new "No implementation of syncronization using the '#{method}' method"
50
+ end
51
+
52
+ host = nil if host.to_s.empty?
53
+ local_ips = Socket.ip_address_list.map &:ip_address
54
+
55
+ dns_timeout = (opts and (opts[:dns_timeout] || opts[:timeout])) || 15
56
+
57
+ Timeout.timeout dns_timeout do
58
+ if local_ips.include? Resolv.getaddress(host)
59
+ log.info { 'Target host is localhost, returning' }
60
+ return now
61
+ end
62
+ end
63
+
64
+ time_point = self.method(sync_meth).call(log, host, opts)
65
+ raise ArgumentError.new "Expected the result from #{sync_meth} to be a Time object" unless time_point.is_a? ::Time
66
+ log.info { "Synchronizing to #{time_point.strftime '%F %T,%L %z'}" }
67
+ Timecop.travel time_point
68
+ log.info { "Done!" }
69
+ now
70
+ end
71
+
72
+ # Parses a string containing a natural language date or time.
73
+ #
74
+ #@param timestamp [String] text to parse
75
+ #@return [Time] Result of the expression
76
+ #@see http://www.rubydoc.info/gems/chronic/#Usage Chronic Gem
77
+ def parse_expression timestamp
78
+ Chronic.time_class = zone
79
+ Chronic.parse timestamp
80
+ end
81
+
82
+ # Returns the current time zone. If none is set, the machine's time zone will be set.
83
+ #
84
+ #@return [ActiveSupport::TimeWithZone] Current time zone.
85
+ def zone
86
+ self.zone = get_local_tz unless ::Time.zone
87
+ ::Time.zone
88
+ end
89
+
90
+ # Sets the timezone
91
+ #
92
+ #@param zone [String] time zone to use
93
+ #@return [ActiveSupport::TimeWithZone]
94
+ #@see zone
95
+ def zone=(zone)
96
+ ::Time.zone = zone
97
+ end
98
+
99
+ # Returns the current time in the current time zone
100
+ #
101
+ #@return [ActiveSupport::TimeWithZone] Current time
102
+ def now
103
+ self.zone.now
104
+ end
105
+
106
+ # Defines synchronization instructions for a given method
107
+ #
108
+ #@param method [String] the method of synchronization (eg. HTTP, SSH, NTP)
109
+ #@yield [logger, host, options] Block to execute the synchronization
110
+ #@yieldparam [Log4r::Logger] logger Logging object with the Time channel
111
+ #@yieldparam [String] host Logging object with the Time channel
112
+ #@yieldparam [Hash] options Options passed through the {synchronize} method
113
+ #@yieldreturn [ActiveSupport::TimeWithZone] Object with the value of the current time
114
+ def sync_for_method(method, &block)
115
+ raise ArgumentError.new 'No method name defined!' unless method
116
+ raise ArgumentError.new "Block parameters should be 3: |logger, host, options|, but block only has #{block.arity} parameters" unless block.arity == 3
117
+ define_singleton_method to_method_name(method), &block
118
+ end
119
+
120
+ private
121
+ # Converts a string to a valid method name
122
+ #
123
+ #@param meth [String] wannabe method string
124
+ #@return [Symbol]
125
+ def to_method_name(meth)
126
+ :"sync_#{meth.gsub(' ', '_').underscore}"
127
+ end
128
+
129
+ end
130
+
131
+ end
132
+ end
133
+
134
+ QAT::Time.sync_for_method 'NTP' do |_, host, opts|
135
+ require 'net/ntp'
136
+ port = opts[:port] || "ntp"
137
+ timeout = opts[:dns_timeout] || 3
138
+ Net::NTP.get(host, port, timeout).time
139
+ end
140
+
141
+ QAT::Time.sync_for_method 'SSH' do |_, host, options|
142
+ require 'net/ssh'
143
+ ssh_opts = options.dup
144
+ user = ssh_opts.delete :user
145
+ command = ssh_opts.delete(:command) || 'date +%FT%T,%3N%z'
146
+ ssh_opts.select! { |opt| Net::SSH::VALID_OPTIONS.include? opt }
147
+ ssh_opts[:non_interactive] = true if ssh_opts[:non_interactive].nil?
148
+ result = ''
149
+ Net::SSH.start(host, user, ssh_opts) do |ssh|
150
+ result = ssh.exec! command
151
+ end
152
+
153
+ ::Time.parse result
154
+ end
155
+
156
+ QAT::Time.default_sync_method = 'NTP'
@@ -0,0 +1,13 @@
1
+ require 'timezone_local'
2
+
3
+ module QAT
4
+ class Time
5
+ module Zone
6
+ def get_local_tz
7
+ TimeZone::Local.get
8
+ end
9
+
10
+ extend self
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ require 'nokogiri'
2
+
3
+ module QAT
4
+ class Time
5
+ module Zone
6
+ def get_local_tz
7
+ local_zone = `tzutil /g`
8
+ tzdata = File.open(File.join(File.dirname(__FILE__), 'windows', 'tz_data.xml')) { |f| Nokogiri::XML(f) }
9
+ tzdata.at_xpath("//mapZone[@other='#{local_zone}']")['type']
10
+ end
11
+
12
+ extend self
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,680 @@
1
+ <?xml version="1.0" encoding="UTF-8" ?>
2
+ <!DOCTYPE supplementalData SYSTEM "../../common/dtd/ldmlSupplemental.dtd">
3
+ <!--
4
+ Copyright © 1991-2013 Unicode, Inc.
5
+ CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
6
+ For terms of use, see http://www.unicode.org/copyright.html
7
+ -->
8
+
9
+ <supplementalData>
10
+ <version number="$Revision$"/>
11
+ <windowsZones>
12
+ <mapTimezones otherVersion="7df0103" typeVersion="2016a">
13
+
14
+ <!-- (UTC-12:00) International Date Line West -->
15
+ <mapZone other="Dateline Standard Time" territory="001" type="Etc/GMT+12"/>
16
+ <mapZone other="Dateline Standard Time" territory="ZZ" type="Etc/GMT+12"/>
17
+
18
+ <!-- (UTC-11:00) Coordinated Universal Time-11 -->
19
+ <mapZone other="UTC-11" territory="001" type="Etc/GMT+11"/>
20
+ <mapZone other="UTC-11" territory="AS" type="Pacific/Pago_Pago"/>
21
+ <mapZone other="UTC-11" territory="NU" type="Pacific/Niue"/>
22
+ <mapZone other="UTC-11" territory="UM" type="Pacific/Midway"/>
23
+ <mapZone other="UTC-11" territory="ZZ" type="Etc/GMT+11"/>
24
+
25
+ <!-- (UTC-10:00) Hawaii -->
26
+ <mapZone other="Hawaiian Standard Time" territory="001" type="Pacific/Honolulu"/>
27
+ <mapZone other="Hawaiian Standard Time" territory="CK" type="Pacific/Rarotonga"/>
28
+ <mapZone other="Hawaiian Standard Time" territory="PF" type="Pacific/Tahiti"/>
29
+ <mapZone other="Hawaiian Standard Time" territory="UM" type="Pacific/Johnston"/>
30
+ <mapZone other="Hawaiian Standard Time" territory="US" type="Pacific/Honolulu"/>
31
+ <mapZone other="Hawaiian Standard Time" territory="ZZ" type="Etc/GMT+10"/>
32
+
33
+ <!-- (UTC-09:00) Alaska -->
34
+ <mapZone other="Alaskan Standard Time" territory="001" type="America/Anchorage"/>
35
+ <mapZone other="Alaskan Standard Time" territory="US" type="America/Anchorage America/Juneau America/Metlakatla America/Nome America/Sitka America/Yakutat"/>
36
+
37
+ <!-- (UTC-08:00) Baja California -->
38
+ <!-- Unmappable -->
39
+
40
+ <!-- (UTC-08:00) Pacific Time (US & Canada) -->
41
+ <mapZone other="Pacific Standard Time" territory="001" type="America/Los_Angeles"/>
42
+ <mapZone other="Pacific Standard Time" territory="CA" type="America/Vancouver America/Dawson America/Whitehorse"/>
43
+ <mapZone other="Pacific Standard Time" territory="MX" type="America/Tijuana America/Santa_Isabel"/>
44
+ <mapZone other="Pacific Standard Time" territory="US" type="America/Los_Angeles"/>
45
+ <mapZone other="Pacific Standard Time" territory="ZZ" type="PST8PDT"/>
46
+
47
+ <!-- (UTC-07:00) Arizona -->
48
+ <mapZone other="US Mountain Standard Time" territory="001" type="America/Phoenix"/>
49
+ <mapZone other="US Mountain Standard Time" territory="CA" type="America/Dawson_Creek America/Creston America/Fort_Nelson"/>
50
+ <mapZone other="US Mountain Standard Time" territory="MX" type="America/Hermosillo"/>
51
+ <mapZone other="US Mountain Standard Time" territory="US" type="America/Phoenix"/>
52
+ <mapZone other="US Mountain Standard Time" territory="ZZ" type="Etc/GMT+7"/>
53
+
54
+ <!-- (UTC-07:00) Chihuahua, La Paz, Mazatlan -->
55
+ <mapZone other="Mountain Standard Time (Mexico)" territory="001" type="America/Chihuahua"/>
56
+ <mapZone other="Mountain Standard Time (Mexico)" territory="MX" type="America/Chihuahua America/Mazatlan"/>
57
+
58
+ <!-- (UTC-07:00) Mountain Time (US & Canada) -->
59
+ <mapZone other="Mountain Standard Time" territory="001" type="America/Denver"/>
60
+ <mapZone other="Mountain Standard Time" territory="CA" type="America/Edmonton America/Cambridge_Bay America/Inuvik America/Yellowknife"/>
61
+ <mapZone other="Mountain Standard Time" territory="MX" type="America/Ojinaga"/>
62
+ <mapZone other="Mountain Standard Time" territory="US" type="America/Denver America/Boise"/>
63
+ <mapZone other="Mountain Standard Time" territory="ZZ" type="MST7MDT"/>
64
+
65
+ <!-- (UTC-06:00) Central America -->
66
+ <mapZone other="Central America Standard Time" territory="001" type="America/Guatemala"/>
67
+ <mapZone other="Central America Standard Time" territory="BZ" type="America/Belize"/>
68
+ <mapZone other="Central America Standard Time" territory="CR" type="America/Costa_Rica"/>
69
+ <mapZone other="Central America Standard Time" territory="EC" type="Pacific/Galapagos"/>
70
+ <mapZone other="Central America Standard Time" territory="GT" type="America/Guatemala"/>
71
+ <mapZone other="Central America Standard Time" territory="HN" type="America/Tegucigalpa"/>
72
+ <mapZone other="Central America Standard Time" territory="NI" type="America/Managua"/>
73
+ <mapZone other="Central America Standard Time" territory="SV" type="America/El_Salvador"/>
74
+ <mapZone other="Central America Standard Time" territory="ZZ" type="Etc/GMT+6"/>
75
+
76
+ <!-- (UTC-06:00) Central Time (US & Canada) -->
77
+ <mapZone other="Central Standard Time" territory="001" type="America/Chicago"/>
78
+ <mapZone other="Central Standard Time" territory="CA" type="America/Winnipeg America/Rainy_River America/Rankin_Inlet America/Resolute"/>
79
+ <mapZone other="Central Standard Time" territory="MX" type="America/Matamoros"/>
80
+ <mapZone other="Central Standard Time" territory="US" type="America/Chicago America/Indiana/Knox America/Indiana/Tell_City America/Menominee America/North_Dakota/Beulah America/North_Dakota/Center America/North_Dakota/New_Salem"/>
81
+ <mapZone other="Central Standard Time" territory="ZZ" type="CST6CDT"/>
82
+
83
+ <!-- (UTC-06:00) Guadalajara, Mexico City, Monterrey -->
84
+ <mapZone other="Central Standard Time (Mexico)" territory="001" type="America/Mexico_City"/>
85
+ <mapZone other="Central Standard Time (Mexico)" territory="MX" type="America/Mexico_City America/Bahia_Banderas America/Merida America/Monterrey"/>
86
+
87
+ <!-- (UTC-06:00) Saskatchewan -->
88
+ <mapZone other="Canada Central Standard Time" territory="001" type="America/Regina"/>
89
+ <mapZone other="Canada Central Standard Time" territory="CA" type="America/Regina America/Swift_Current"/>
90
+
91
+ <!-- (UTC-05:00) Bogota, Lima, Quito, Rio Branco -->
92
+ <mapZone other="SA Pacific Standard Time" territory="001" type="America/Bogota"/>
93
+ <mapZone other="SA Pacific Standard Time" territory="BR" type="America/Rio_Branco America/Eirunepe"/>
94
+ <mapZone other="SA Pacific Standard Time" territory="CA" type="America/Coral_Harbour"/>
95
+ <mapZone other="SA Pacific Standard Time" territory="CL" type="Pacific/Easter"/>
96
+ <mapZone other="SA Pacific Standard Time" territory="CO" type="America/Bogota"/>
97
+ <mapZone other="SA Pacific Standard Time" territory="EC" type="America/Guayaquil"/>
98
+ <mapZone other="SA Pacific Standard Time" territory="JM" type="America/Jamaica"/>
99
+ <mapZone other="SA Pacific Standard Time" territory="KY" type="America/Cayman"/>
100
+ <mapZone other="SA Pacific Standard Time" territory="PA" type="America/Panama"/>
101
+ <mapZone other="SA Pacific Standard Time" territory="PE" type="America/Lima"/>
102
+ <mapZone other="SA Pacific Standard Time" territory="ZZ" type="Etc/GMT+5"/>
103
+
104
+ <!-- (UTC-05:00) Chetumal -->
105
+ <mapZone other="Eastern Standard Time (Mexico)" territory="001" type="America/Cancun"/>
106
+ <mapZone other="Eastern Standard Time (Mexico)" territory="MX" type="America/Cancun"/>
107
+
108
+ <!-- (UTC-05:00) Eastern Time (US & Canada) -->
109
+ <mapZone other="Eastern Standard Time" territory="001" type="America/New_York"/>
110
+ <mapZone other="Eastern Standard Time" territory="BS" type="America/Nassau"/>
111
+ <mapZone other="Eastern Standard Time" territory="CA" type="America/Toronto America/Iqaluit America/Montreal America/Nipigon America/Pangnirtung America/Thunder_Bay"/>
112
+ <mapZone other="Eastern Standard Time" territory="CU" type="America/Havana"/>
113
+ <mapZone other="Eastern Standard Time" territory="HT" type="America/Port-au-Prince"/>
114
+ <mapZone other="Eastern Standard Time" territory="US" type="America/New_York America/Detroit America/Indiana/Petersburg America/Indiana/Vincennes America/Indiana/Winamac America/Kentucky/Monticello America/Louisville"/>
115
+ <mapZone other="Eastern Standard Time" territory="ZZ" type="EST5EDT"/>
116
+
117
+ <!-- (UTC-05:00) Indiana (East) -->
118
+ <mapZone other="US Eastern Standard Time" territory="001" type="America/Indianapolis"/>
119
+ <mapZone other="US Eastern Standard Time" territory="US" type="America/Indianapolis America/Indiana/Marengo America/Indiana/Vevay"/>
120
+
121
+ <!-- (UTC-04:30) Caracas -->
122
+ <mapZone other="Venezuela Standard Time" territory="001" type="America/Caracas"/>
123
+ <mapZone other="Venezuela Standard Time" territory="VE" type="America/Caracas"/>
124
+
125
+ <!-- (UTC-04:00) Asuncion -->
126
+ <mapZone other="Paraguay Standard Time" territory="001" type="America/Asuncion"/>
127
+ <mapZone other="Paraguay Standard Time" territory="PY" type="America/Asuncion"/>
128
+
129
+ <!-- (UTC-04:00) Atlantic Time (Canada) -->
130
+ <mapZone other="Atlantic Standard Time" territory="001" type="America/Halifax"/>
131
+ <mapZone other="Atlantic Standard Time" territory="BM" type="Atlantic/Bermuda"/>
132
+ <mapZone other="Atlantic Standard Time" territory="CA" type="America/Halifax America/Glace_Bay America/Goose_Bay America/Moncton"/>
133
+ <mapZone other="Atlantic Standard Time" territory="GL" type="America/Thule"/>
134
+
135
+ <!-- (UTC-04:00) Cuiaba -->
136
+ <mapZone other="Central Brazilian Standard Time" territory="001" type="America/Cuiaba"/>
137
+ <mapZone other="Central Brazilian Standard Time" territory="BR" type="America/Cuiaba America/Campo_Grande"/>
138
+
139
+ <!-- (UTC-04:00) Georgetown, La Paz, Manaus, San Juan -->
140
+ <mapZone other="SA Western Standard Time" territory="001" type="America/La_Paz"/>
141
+ <mapZone other="SA Western Standard Time" territory="AG" type="America/Antigua"/>
142
+ <mapZone other="SA Western Standard Time" territory="AI" type="America/Anguilla"/>
143
+ <mapZone other="SA Western Standard Time" territory="AW" type="America/Aruba"/>
144
+ <mapZone other="SA Western Standard Time" territory="BB" type="America/Barbados"/>
145
+ <mapZone other="SA Western Standard Time" territory="BL" type="America/St_Barthelemy"/>
146
+ <mapZone other="SA Western Standard Time" territory="BO" type="America/La_Paz"/>
147
+ <mapZone other="SA Western Standard Time" territory="BQ" type="America/Kralendijk"/>
148
+ <mapZone other="SA Western Standard Time" territory="BR" type="America/Manaus America/Boa_Vista America/Porto_Velho"/>
149
+ <mapZone other="SA Western Standard Time" territory="CA" type="America/Blanc-Sablon"/>
150
+ <mapZone other="SA Western Standard Time" territory="CW" type="America/Curacao"/>
151
+ <mapZone other="SA Western Standard Time" territory="DM" type="America/Dominica"/>
152
+ <mapZone other="SA Western Standard Time" territory="DO" type="America/Santo_Domingo"/>
153
+ <mapZone other="SA Western Standard Time" territory="GD" type="America/Grenada"/>
154
+ <mapZone other="SA Western Standard Time" territory="GP" type="America/Guadeloupe"/>
155
+ <mapZone other="SA Western Standard Time" territory="GY" type="America/Guyana"/>
156
+ <mapZone other="SA Western Standard Time" territory="KN" type="America/St_Kitts"/>
157
+ <mapZone other="SA Western Standard Time" territory="LC" type="America/St_Lucia"/>
158
+ <mapZone other="SA Western Standard Time" territory="MF" type="America/Marigot"/>
159
+ <mapZone other="SA Western Standard Time" territory="MQ" type="America/Martinique"/>
160
+ <mapZone other="SA Western Standard Time" territory="MS" type="America/Montserrat"/>
161
+ <mapZone other="SA Western Standard Time" territory="PR" type="America/Puerto_Rico"/>
162
+ <mapZone other="SA Western Standard Time" territory="SX" type="America/Lower_Princes"/>
163
+ <mapZone other="SA Western Standard Time" territory="TC" type="America/Grand_Turk"/>
164
+ <mapZone other="SA Western Standard Time" territory="TT" type="America/Port_of_Spain"/>
165
+ <mapZone other="SA Western Standard Time" territory="VC" type="America/St_Vincent"/>
166
+ <mapZone other="SA Western Standard Time" territory="VG" type="America/Tortola"/>
167
+ <mapZone other="SA Western Standard Time" territory="VI" type="America/St_Thomas"/>
168
+ <mapZone other="SA Western Standard Time" territory="ZZ" type="Etc/GMT+4"/>
169
+
170
+ <!-- (UTC-03:30) Newfoundland -->
171
+ <mapZone other="Newfoundland Standard Time" territory="001" type="America/St_Johns"/>
172
+ <mapZone other="Newfoundland Standard Time" territory="CA" type="America/St_Johns"/>
173
+
174
+ <!-- (UTC-03:00) Brasilia -->
175
+ <mapZone other="E. South America Standard Time" territory="001" type="America/Sao_Paulo"/>
176
+ <mapZone other="E. South America Standard Time" territory="BR" type="America/Sao_Paulo"/>
177
+
178
+ <!-- (UTC-03:00) Cayenne, Fortaleza -->
179
+ <mapZone other="SA Eastern Standard Time" territory="001" type="America/Cayenne"/>
180
+ <mapZone other="SA Eastern Standard Time" territory="AQ" type="Antarctica/Rothera"/>
181
+ <mapZone other="SA Eastern Standard Time" territory="BR" type="America/Fortaleza America/Araguaina America/Belem America/Maceio America/Recife America/Santarem"/>
182
+ <mapZone other="SA Eastern Standard Time" territory="FK" type="Atlantic/Stanley"/>
183
+ <mapZone other="SA Eastern Standard Time" territory="GF" type="America/Cayenne"/>
184
+ <mapZone other="SA Eastern Standard Time" territory="SR" type="America/Paramaribo"/>
185
+ <mapZone other="SA Eastern Standard Time" territory="ZZ" type="Etc/GMT+3"/>
186
+
187
+ <!-- (UTC-03:00) City of Buenos Aires -->
188
+ <mapZone other="Argentina Standard Time" territory="001" type="America/Buenos_Aires"/>
189
+ <mapZone other="Argentina Standard Time" territory="AR" type="America/Buenos_Aires America/Argentina/La_Rioja America/Argentina/Rio_Gallegos America/Argentina/Salta America/Argentina/San_Juan America/Argentina/San_Luis America/Argentina/Tucuman America/Argentina/Ushuaia America/Catamarca America/Cordoba America/Jujuy America/Mendoza"/>
190
+
191
+ <!-- (UTC-03:00) Greenland -->
192
+ <mapZone other="Greenland Standard Time" territory="001" type="America/Godthab"/>
193
+ <mapZone other="Greenland Standard Time" territory="GL" type="America/Godthab"/>
194
+
195
+ <!-- (UTC-03:00) Montevideo -->
196
+ <mapZone other="Montevideo Standard Time" territory="001" type="America/Montevideo"/>
197
+ <mapZone other="Montevideo Standard Time" territory="UY" type="America/Montevideo"/>
198
+
199
+ <!-- (UTC-03:00) Salvador -->
200
+ <mapZone other="Bahia Standard Time" territory="001" type="America/Bahia"/>
201
+ <mapZone other="Bahia Standard Time" territory="BR" type="America/Bahia"/>
202
+
203
+ <!-- (UTC-03:00) Santiago -->
204
+ <mapZone other="Pacific SA Standard Time" territory="001" type="America/Santiago"/>
205
+ <mapZone other="Pacific SA Standard Time" territory="AQ" type="Antarctica/Palmer"/>
206
+ <mapZone other="Pacific SA Standard Time" territory="CL" type="America/Santiago"/>
207
+
208
+ <!-- (UTC-02:00) Coordinated Universal Time-02 -->
209
+ <mapZone other="UTC-02" territory="001" type="Etc/GMT+2"/>
210
+ <mapZone other="UTC-02" territory="BR" type="America/Noronha"/>
211
+ <mapZone other="UTC-02" territory="GS" type="Atlantic/South_Georgia"/>
212
+ <mapZone other="UTC-02" territory="ZZ" type="Etc/GMT+2"/>
213
+
214
+ <!-- (UTC-01:00) Azores -->
215
+ <mapZone other="Azores Standard Time" territory="001" type="Atlantic/Azores"/>
216
+ <mapZone other="Azores Standard Time" territory="GL" type="America/Scoresbysund"/>
217
+ <mapZone other="Azores Standard Time" territory="PT" type="Atlantic/Azores"/>
218
+
219
+ <!-- (UTC-01:00) Cabo Verde Is. -->
220
+ <mapZone other="Cape Verde Standard Time" territory="001" type="Atlantic/Cape_Verde"/>
221
+ <mapZone other="Cape Verde Standard Time" territory="CV" type="Atlantic/Cape_Verde"/>
222
+ <mapZone other="Cape Verde Standard Time" territory="ZZ" type="Etc/GMT+1"/>
223
+
224
+ <!-- (UTC) Casablanca -->
225
+ <mapZone other="Morocco Standard Time" territory="001" type="Africa/Casablanca"/>
226
+ <mapZone other="Morocco Standard Time" territory="EH" type="Africa/El_Aaiun"/>
227
+ <mapZone other="Morocco Standard Time" territory="MA" type="Africa/Casablanca"/>
228
+
229
+ <!-- (UTC) Coordinated Universal Time -->
230
+ <mapZone other="UTC" territory="001" type="Etc/GMT"/>
231
+ <mapZone other="UTC" territory="GL" type="America/Danmarkshavn"/>
232
+ <mapZone other="UTC" territory="ZZ" type="Etc/GMT"/>
233
+
234
+ <!-- (UTC) Dublin, Edinburgh, Lisbon, London -->
235
+ <mapZone other="GMT Standard Time" territory="001" type="Europe/London"/>
236
+ <mapZone other="GMT Standard Time" territory="ES" type="Atlantic/Canary"/>
237
+ <mapZone other="GMT Standard Time" territory="FO" type="Atlantic/Faeroe"/>
238
+ <mapZone other="GMT Standard Time" territory="GB" type="Europe/London"/>
239
+ <mapZone other="GMT Standard Time" territory="GG" type="Europe/Guernsey"/>
240
+ <mapZone other="GMT Standard Time" territory="IE" type="Europe/Dublin"/>
241
+ <mapZone other="GMT Standard Time" territory="IM" type="Europe/Isle_of_Man"/>
242
+ <mapZone other="GMT Standard Time" territory="JE" type="Europe/Jersey"/>
243
+ <mapZone other="GMT Standard Time" territory="PT" type="Europe/Lisbon Atlantic/Madeira"/>
244
+
245
+ <!-- (UTC) Monrovia, Reykjavik -->
246
+ <mapZone other="Greenwich Standard Time" territory="001" type="Atlantic/Reykjavik"/>
247
+ <mapZone other="Greenwich Standard Time" territory="BF" type="Africa/Ouagadougou"/>
248
+ <mapZone other="Greenwich Standard Time" territory="CI" type="Africa/Abidjan"/>
249
+ <mapZone other="Greenwich Standard Time" territory="GH" type="Africa/Accra"/>
250
+ <mapZone other="Greenwich Standard Time" territory="GM" type="Africa/Banjul"/>
251
+ <mapZone other="Greenwich Standard Time" territory="GN" type="Africa/Conakry"/>
252
+ <mapZone other="Greenwich Standard Time" territory="GW" type="Africa/Bissau"/>
253
+ <mapZone other="Greenwich Standard Time" territory="IS" type="Atlantic/Reykjavik"/>
254
+ <mapZone other="Greenwich Standard Time" territory="LR" type="Africa/Monrovia"/>
255
+ <mapZone other="Greenwich Standard Time" territory="ML" type="Africa/Bamako"/>
256
+ <mapZone other="Greenwich Standard Time" territory="MR" type="Africa/Nouakchott"/>
257
+ <mapZone other="Greenwich Standard Time" territory="SH" type="Atlantic/St_Helena"/>
258
+ <mapZone other="Greenwich Standard Time" territory="SL" type="Africa/Freetown"/>
259
+ <mapZone other="Greenwich Standard Time" territory="SN" type="Africa/Dakar"/>
260
+ <mapZone other="Greenwich Standard Time" territory="ST" type="Africa/Sao_Tome"/>
261
+ <mapZone other="Greenwich Standard Time" territory="TG" type="Africa/Lome"/>
262
+
263
+ <!-- (UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna -->
264
+ <mapZone other="W. Europe Standard Time" territory="001" type="Europe/Berlin"/>
265
+ <mapZone other="W. Europe Standard Time" territory="AD" type="Europe/Andorra"/>
266
+ <mapZone other="W. Europe Standard Time" territory="AT" type="Europe/Vienna"/>
267
+ <mapZone other="W. Europe Standard Time" territory="CH" type="Europe/Zurich"/>
268
+ <mapZone other="W. Europe Standard Time" territory="DE" type="Europe/Berlin Europe/Busingen"/>
269
+ <mapZone other="W. Europe Standard Time" territory="GI" type="Europe/Gibraltar"/>
270
+ <mapZone other="W. Europe Standard Time" territory="IT" type="Europe/Rome"/>
271
+ <mapZone other="W. Europe Standard Time" territory="LI" type="Europe/Vaduz"/>
272
+ <mapZone other="W. Europe Standard Time" territory="LU" type="Europe/Luxembourg"/>
273
+ <mapZone other="W. Europe Standard Time" territory="MC" type="Europe/Monaco"/>
274
+ <mapZone other="W. Europe Standard Time" territory="MT" type="Europe/Malta"/>
275
+ <mapZone other="W. Europe Standard Time" territory="NL" type="Europe/Amsterdam"/>
276
+ <mapZone other="W. Europe Standard Time" territory="NO" type="Europe/Oslo"/>
277
+ <mapZone other="W. Europe Standard Time" territory="SE" type="Europe/Stockholm"/>
278
+ <mapZone other="W. Europe Standard Time" territory="SJ" type="Arctic/Longyearbyen"/>
279
+ <mapZone other="W. Europe Standard Time" territory="SM" type="Europe/San_Marino"/>
280
+ <mapZone other="W. Europe Standard Time" territory="VA" type="Europe/Vatican"/>
281
+
282
+ <!-- (UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague -->
283
+ <mapZone other="Central Europe Standard Time" territory="001" type="Europe/Budapest"/>
284
+ <mapZone other="Central Europe Standard Time" territory="AL" type="Europe/Tirane"/>
285
+ <mapZone other="Central Europe Standard Time" territory="CZ" type="Europe/Prague"/>
286
+ <mapZone other="Central Europe Standard Time" territory="HU" type="Europe/Budapest"/>
287
+ <mapZone other="Central Europe Standard Time" territory="ME" type="Europe/Podgorica"/>
288
+ <mapZone other="Central Europe Standard Time" territory="RS" type="Europe/Belgrade"/>
289
+ <mapZone other="Central Europe Standard Time" territory="SI" type="Europe/Ljubljana"/>
290
+ <mapZone other="Central Europe Standard Time" territory="SK" type="Europe/Bratislava"/>
291
+
292
+ <!-- (UTC+01:00) Brussels, Copenhagen, Madrid, Paris -->
293
+ <mapZone other="Romance Standard Time" territory="001" type="Europe/Paris"/>
294
+ <mapZone other="Romance Standard Time" territory="BE" type="Europe/Brussels"/>
295
+ <mapZone other="Romance Standard Time" territory="DK" type="Europe/Copenhagen"/>
296
+ <mapZone other="Romance Standard Time" territory="ES" type="Europe/Madrid Africa/Ceuta"/>
297
+ <mapZone other="Romance Standard Time" territory="FR" type="Europe/Paris"/>
298
+
299
+ <!-- (UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb -->
300
+ <mapZone other="Central European Standard Time" territory="001" type="Europe/Warsaw"/>
301
+ <mapZone other="Central European Standard Time" territory="BA" type="Europe/Sarajevo"/>
302
+ <mapZone other="Central European Standard Time" territory="HR" type="Europe/Zagreb"/>
303
+ <mapZone other="Central European Standard Time" territory="MK" type="Europe/Skopje"/>
304
+ <mapZone other="Central European Standard Time" territory="PL" type="Europe/Warsaw"/>
305
+
306
+ <!-- (UTC+01:00) West Central Africa -->
307
+ <mapZone other="W. Central Africa Standard Time" territory="001" type="Africa/Lagos"/>
308
+ <mapZone other="W. Central Africa Standard Time" territory="AO" type="Africa/Luanda"/>
309
+ <mapZone other="W. Central Africa Standard Time" territory="BJ" type="Africa/Porto-Novo"/>
310
+ <mapZone other="W. Central Africa Standard Time" territory="CD" type="Africa/Kinshasa"/>
311
+ <mapZone other="W. Central Africa Standard Time" territory="CF" type="Africa/Bangui"/>
312
+ <mapZone other="W. Central Africa Standard Time" territory="CG" type="Africa/Brazzaville"/>
313
+ <mapZone other="W. Central Africa Standard Time" territory="CM" type="Africa/Douala"/>
314
+ <mapZone other="W. Central Africa Standard Time" territory="DZ" type="Africa/Algiers"/>
315
+ <mapZone other="W. Central Africa Standard Time" territory="GA" type="Africa/Libreville"/>
316
+ <mapZone other="W. Central Africa Standard Time" territory="GQ" type="Africa/Malabo"/>
317
+ <mapZone other="W. Central Africa Standard Time" territory="NE" type="Africa/Niamey"/>
318
+ <mapZone other="W. Central Africa Standard Time" territory="NG" type="Africa/Lagos"/>
319
+ <mapZone other="W. Central Africa Standard Time" territory="TD" type="Africa/Ndjamena"/>
320
+ <mapZone other="W. Central Africa Standard Time" territory="TN" type="Africa/Tunis"/>
321
+ <mapZone other="W. Central Africa Standard Time" territory="ZZ" type="Etc/GMT-1"/>
322
+
323
+ <!-- (UTC+01:00) Windhoek -->
324
+ <mapZone other="Namibia Standard Time" territory="001" type="Africa/Windhoek"/>
325
+ <mapZone other="Namibia Standard Time" territory="NA" type="Africa/Windhoek"/>
326
+
327
+ <!-- (UTC+02:00) Amman -->
328
+ <mapZone other="Jordan Standard Time" territory="001" type="Asia/Amman"/>
329
+ <mapZone other="Jordan Standard Time" territory="JO" type="Asia/Amman"/>
330
+
331
+ <!-- (UTC+02:00) Athens, Bucharest -->
332
+ <mapZone other="GTB Standard Time" territory="001" type="Europe/Bucharest"/>
333
+ <mapZone other="GTB Standard Time" territory="CY" type="Asia/Nicosia"/>
334
+ <mapZone other="GTB Standard Time" territory="GR" type="Europe/Athens"/>
335
+ <mapZone other="GTB Standard Time" territory="RO" type="Europe/Bucharest"/>
336
+
337
+ <!-- (UTC+02:00) Beirut -->
338
+ <mapZone other="Middle East Standard Time" territory="001" type="Asia/Beirut"/>
339
+ <mapZone other="Middle East Standard Time" territory="LB" type="Asia/Beirut"/>
340
+
341
+ <!-- (UTC+02:00) Cairo -->
342
+ <mapZone other="Egypt Standard Time" territory="001" type="Africa/Cairo"/>
343
+ <mapZone other="Egypt Standard Time" territory="EG" type="Africa/Cairo"/>
344
+
345
+ <!-- (UTC+02:00) Damascus -->
346
+ <mapZone other="Syria Standard Time" territory="001" type="Asia/Damascus"/>
347
+ <mapZone other="Syria Standard Time" territory="SY" type="Asia/Damascus"/>
348
+
349
+ <!-- (UTC+02:00) E. Europe -->
350
+ <mapZone other="E. Europe Standard Time" territory="001" type="Europe/Chisinau"/>
351
+ <mapZone other="E. Europe Standard Time" territory="MD" type="Europe/Chisinau"/>
352
+
353
+ <!-- (UTC+02:00) Harare, Pretoria -->
354
+ <mapZone other="South Africa Standard Time" territory="001" type="Africa/Johannesburg"/>
355
+ <mapZone other="South Africa Standard Time" territory="BI" type="Africa/Bujumbura"/>
356
+ <mapZone other="South Africa Standard Time" territory="BW" type="Africa/Gaborone"/>
357
+ <mapZone other="South Africa Standard Time" territory="CD" type="Africa/Lubumbashi"/>
358
+ <mapZone other="South Africa Standard Time" territory="LS" type="Africa/Maseru"/>
359
+ <mapZone other="South Africa Standard Time" territory="MW" type="Africa/Blantyre"/>
360
+ <mapZone other="South Africa Standard Time" territory="MZ" type="Africa/Maputo"/>
361
+ <mapZone other="South Africa Standard Time" territory="RW" type="Africa/Kigali"/>
362
+ <mapZone other="South Africa Standard Time" territory="SZ" type="Africa/Mbabane"/>
363
+ <mapZone other="South Africa Standard Time" territory="ZA" type="Africa/Johannesburg"/>
364
+ <mapZone other="South Africa Standard Time" territory="ZM" type="Africa/Lusaka"/>
365
+ <mapZone other="South Africa Standard Time" territory="ZW" type="Africa/Harare"/>
366
+ <mapZone other="South Africa Standard Time" territory="ZZ" type="Etc/GMT-2"/>
367
+
368
+ <!-- (UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius -->
369
+ <mapZone other="FLE Standard Time" territory="001" type="Europe/Kiev"/>
370
+ <mapZone other="FLE Standard Time" territory="AX" type="Europe/Mariehamn"/>
371
+ <mapZone other="FLE Standard Time" territory="BG" type="Europe/Sofia"/>
372
+ <mapZone other="FLE Standard Time" territory="EE" type="Europe/Tallinn"/>
373
+ <mapZone other="FLE Standard Time" territory="FI" type="Europe/Helsinki"/>
374
+ <mapZone other="FLE Standard Time" territory="LT" type="Europe/Vilnius"/>
375
+ <mapZone other="FLE Standard Time" territory="LV" type="Europe/Riga"/>
376
+ <mapZone other="FLE Standard Time" territory="UA" type="Europe/Kiev Europe/Uzhgorod Europe/Zaporozhye"/>
377
+
378
+ <!-- (UTC+02:00) Istanbul -->
379
+ <mapZone other="Turkey Standard Time" territory="001" type="Europe/Istanbul"/>
380
+ <mapZone other="Turkey Standard Time" territory="TR" type="Europe/Istanbul"/>
381
+
382
+ <!-- (UTC+02:00) Jerusalem -->
383
+ <mapZone other="Israel Standard Time" territory="001" type="Asia/Jerusalem"/>
384
+ <mapZone other="Israel Standard Time" territory="IL" type="Asia/Jerusalem"/>
385
+
386
+ <!-- (UTC+02:00) Kaliningrad (RTZ 1) -->
387
+ <mapZone other="Kaliningrad Standard Time" territory="001" type="Europe/Kaliningrad"/>
388
+ <mapZone other="Kaliningrad Standard Time" territory="RU" type="Europe/Kaliningrad"/>
389
+
390
+ <!-- (UTC+02:00) Tripoli -->
391
+ <mapZone other="Libya Standard Time" territory="001" type="Africa/Tripoli"/>
392
+ <mapZone other="Libya Standard Time" territory="LY" type="Africa/Tripoli"/>
393
+
394
+ <!-- (UTC+03:00) Baghdad -->
395
+ <mapZone other="Arabic Standard Time" territory="001" type="Asia/Baghdad"/>
396
+ <mapZone other="Arabic Standard Time" territory="IQ" type="Asia/Baghdad"/>
397
+
398
+ <!-- (UTC+03:00) Kuwait, Riyadh -->
399
+ <mapZone other="Arab Standard Time" territory="001" type="Asia/Riyadh"/>
400
+ <mapZone other="Arab Standard Time" territory="BH" type="Asia/Bahrain"/>
401
+ <mapZone other="Arab Standard Time" territory="KW" type="Asia/Kuwait"/>
402
+ <mapZone other="Arab Standard Time" territory="QA" type="Asia/Qatar"/>
403
+ <mapZone other="Arab Standard Time" territory="SA" type="Asia/Riyadh"/>
404
+ <mapZone other="Arab Standard Time" territory="YE" type="Asia/Aden"/>
405
+
406
+ <!-- (UTC+03:00) Minsk -->
407
+ <mapZone other="Belarus Standard Time" territory="001" type="Europe/Minsk"/>
408
+ <mapZone other="Belarus Standard Time" territory="BY" type="Europe/Minsk"/>
409
+
410
+ <!-- (UTC+03:00) Moscow, St. Petersburg, Volgograd (RTZ 2) -->
411
+ <mapZone other="Russian Standard Time" territory="001" type="Europe/Moscow"/>
412
+ <mapZone other="Russian Standard Time" territory="RU" type="Europe/Moscow Europe/Simferopol Europe/Volgograd"/>
413
+
414
+ <!-- (UTC+03:00) Nairobi -->
415
+ <mapZone other="E. Africa Standard Time" territory="001" type="Africa/Nairobi"/>
416
+ <mapZone other="E. Africa Standard Time" territory="AQ" type="Antarctica/Syowa"/>
417
+ <mapZone other="E. Africa Standard Time" territory="DJ" type="Africa/Djibouti"/>
418
+ <mapZone other="E. Africa Standard Time" territory="ER" type="Africa/Asmera"/>
419
+ <mapZone other="E. Africa Standard Time" territory="ET" type="Africa/Addis_Ababa"/>
420
+ <mapZone other="E. Africa Standard Time" territory="KE" type="Africa/Nairobi"/>
421
+ <mapZone other="E. Africa Standard Time" territory="KM" type="Indian/Comoro"/>
422
+ <mapZone other="E. Africa Standard Time" territory="MG" type="Indian/Antananarivo"/>
423
+ <mapZone other="E. Africa Standard Time" territory="SD" type="Africa/Khartoum"/>
424
+ <mapZone other="E. Africa Standard Time" territory="SO" type="Africa/Mogadishu"/>
425
+ <mapZone other="E. Africa Standard Time" territory="SS" type="Africa/Juba"/>
426
+ <mapZone other="E. Africa Standard Time" territory="TZ" type="Africa/Dar_es_Salaam"/>
427
+ <mapZone other="E. Africa Standard Time" territory="UG" type="Africa/Kampala"/>
428
+ <mapZone other="E. Africa Standard Time" territory="YT" type="Indian/Mayotte"/>
429
+ <mapZone other="E. Africa Standard Time" territory="ZZ" type="Etc/GMT-3"/>
430
+
431
+ <!-- (UTC+03:30) Tehran -->
432
+ <mapZone other="Iran Standard Time" territory="001" type="Asia/Tehran"/>
433
+ <mapZone other="Iran Standard Time" territory="IR" type="Asia/Tehran"/>
434
+
435
+ <!-- (UTC+04:00) Abu Dhabi, Muscat -->
436
+ <mapZone other="Arabian Standard Time" territory="001" type="Asia/Dubai"/>
437
+ <mapZone other="Arabian Standard Time" territory="AE" type="Asia/Dubai"/>
438
+ <mapZone other="Arabian Standard Time" territory="OM" type="Asia/Muscat"/>
439
+ <mapZone other="Arabian Standard Time" territory="ZZ" type="Etc/GMT-4"/>
440
+
441
+ <!-- (UTC+04:00) Baku -->
442
+ <mapZone other="Azerbaijan Standard Time" territory="001" type="Asia/Baku"/>
443
+ <mapZone other="Azerbaijan Standard Time" territory="AZ" type="Asia/Baku"/>
444
+
445
+ <!-- (UTC+04:00) Izhevsk, Samara (RTZ 3) -->
446
+ <mapZone other="Russia Time Zone 3" territory="001" type="Europe/Samara"/>
447
+ <mapZone other="Russia Time Zone 3" territory="RU" type="Europe/Samara"/>
448
+
449
+ <!-- (UTC+04:00) Port Louis -->
450
+ <mapZone other="Mauritius Standard Time" territory="001" type="Indian/Mauritius"/>
451
+ <mapZone other="Mauritius Standard Time" territory="MU" type="Indian/Mauritius"/>
452
+ <mapZone other="Mauritius Standard Time" territory="RE" type="Indian/Reunion"/>
453
+ <mapZone other="Mauritius Standard Time" territory="SC" type="Indian/Mahe"/>
454
+
455
+ <!-- (UTC+04:00) Tbilisi -->
456
+ <mapZone other="Georgian Standard Time" territory="001" type="Asia/Tbilisi"/>
457
+ <mapZone other="Georgian Standard Time" territory="GE" type="Asia/Tbilisi"/>
458
+
459
+ <!-- (UTC+04:00) Yerevan -->
460
+ <mapZone other="Caucasus Standard Time" territory="001" type="Asia/Yerevan"/>
461
+ <mapZone other="Caucasus Standard Time" territory="AM" type="Asia/Yerevan"/>
462
+
463
+ <!-- (UTC+04:30) Kabul -->
464
+ <mapZone other="Afghanistan Standard Time" territory="001" type="Asia/Kabul"/>
465
+ <mapZone other="Afghanistan Standard Time" territory="AF" type="Asia/Kabul"/>
466
+
467
+ <!-- (UTC+05:00) Ashgabat, Tashkent -->
468
+ <mapZone other="West Asia Standard Time" territory="001" type="Asia/Tashkent"/>
469
+ <mapZone other="West Asia Standard Time" territory="AQ" type="Antarctica/Mawson"/>
470
+ <mapZone other="West Asia Standard Time" territory="KZ" type="Asia/Oral Asia/Aqtau Asia/Aqtobe"/>
471
+ <mapZone other="West Asia Standard Time" territory="MV" type="Indian/Maldives"/>
472
+ <mapZone other="West Asia Standard Time" territory="TF" type="Indian/Kerguelen"/>
473
+ <mapZone other="West Asia Standard Time" territory="TJ" type="Asia/Dushanbe"/>
474
+ <mapZone other="West Asia Standard Time" territory="TM" type="Asia/Ashgabat"/>
475
+ <mapZone other="West Asia Standard Time" territory="UZ" type="Asia/Tashkent Asia/Samarkand"/>
476
+ <mapZone other="West Asia Standard Time" territory="ZZ" type="Etc/GMT-5"/>
477
+
478
+ <!-- (UTC+05:00) Ekaterinburg (RTZ 4) -->
479
+ <mapZone other="Ekaterinburg Standard Time" territory="001" type="Asia/Yekaterinburg"/>
480
+ <mapZone other="Ekaterinburg Standard Time" territory="RU" type="Asia/Yekaterinburg"/>
481
+
482
+ <!-- (UTC+05:00) Islamabad, Karachi -->
483
+ <mapZone other="Pakistan Standard Time" territory="001" type="Asia/Karachi"/>
484
+ <mapZone other="Pakistan Standard Time" territory="PK" type="Asia/Karachi"/>
485
+
486
+ <!-- (UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi -->
487
+ <mapZone other="India Standard Time" territory="001" type="Asia/Calcutta"/>
488
+ <mapZone other="India Standard Time" territory="IN" type="Asia/Calcutta"/>
489
+
490
+ <!-- (UTC+05:30) Sri Jayawardenepura -->
491
+ <mapZone other="Sri Lanka Standard Time" territory="001" type="Asia/Colombo"/>
492
+ <mapZone other="Sri Lanka Standard Time" territory="LK" type="Asia/Colombo"/>
493
+
494
+ <!-- (UTC+05:45) Kathmandu -->
495
+ <mapZone other="Nepal Standard Time" territory="001" type="Asia/Katmandu"/>
496
+ <mapZone other="Nepal Standard Time" territory="NP" type="Asia/Katmandu"/>
497
+
498
+ <!-- (UTC+06:00) Astana -->
499
+ <mapZone other="Central Asia Standard Time" territory="001" type="Asia/Almaty"/>
500
+ <mapZone other="Central Asia Standard Time" territory="AQ" type="Antarctica/Vostok"/>
501
+ <mapZone other="Central Asia Standard Time" territory="CN" type="Asia/Urumqi"/>
502
+ <mapZone other="Central Asia Standard Time" territory="IO" type="Indian/Chagos"/>
503
+ <mapZone other="Central Asia Standard Time" territory="KG" type="Asia/Bishkek"/>
504
+ <mapZone other="Central Asia Standard Time" territory="KZ" type="Asia/Almaty Asia/Qyzylorda"/>
505
+ <mapZone other="Central Asia Standard Time" territory="ZZ" type="Etc/GMT-6"/>
506
+
507
+ <!-- (UTC+06:00) Dhaka -->
508
+ <mapZone other="Bangladesh Standard Time" territory="001" type="Asia/Dhaka"/>
509
+ <mapZone other="Bangladesh Standard Time" territory="BD" type="Asia/Dhaka"/>
510
+ <mapZone other="Bangladesh Standard Time" territory="BT" type="Asia/Thimphu"/>
511
+
512
+ <!-- (UTC+06:00) Novosibirsk (RTZ 5) -->
513
+ <mapZone other="N. Central Asia Standard Time" territory="001" type="Asia/Novosibirsk"/>
514
+ <mapZone other="N. Central Asia Standard Time" territory="RU" type="Asia/Novosibirsk Asia/Omsk"/>
515
+
516
+ <!-- (UTC+06:30) Yangon (Rangoon) -->
517
+ <mapZone other="Myanmar Standard Time" territory="001" type="Asia/Rangoon"/>
518
+ <mapZone other="Myanmar Standard Time" territory="CC" type="Indian/Cocos"/>
519
+ <mapZone other="Myanmar Standard Time" territory="MM" type="Asia/Rangoon"/>
520
+
521
+ <!-- (UTC+07:00) Bangkok, Hanoi, Jakarta -->
522
+ <mapZone other="SE Asia Standard Time" territory="001" type="Asia/Bangkok"/>
523
+ <mapZone other="SE Asia Standard Time" territory="AQ" type="Antarctica/Davis"/>
524
+ <mapZone other="SE Asia Standard Time" territory="CX" type="Indian/Christmas"/>
525
+ <mapZone other="SE Asia Standard Time" territory="ID" type="Asia/Jakarta Asia/Pontianak"/>
526
+ <mapZone other="SE Asia Standard Time" territory="KH" type="Asia/Phnom_Penh"/>
527
+ <mapZone other="SE Asia Standard Time" territory="LA" type="Asia/Vientiane"/>
528
+ <mapZone other="SE Asia Standard Time" territory="TH" type="Asia/Bangkok"/>
529
+ <mapZone other="SE Asia Standard Time" territory="VN" type="Asia/Saigon"/>
530
+ <mapZone other="SE Asia Standard Time" territory="ZZ" type="Etc/GMT-7"/>
531
+
532
+ <!-- (UTC+07:00) Krasnoyarsk (RTZ 6) -->
533
+ <mapZone other="North Asia Standard Time" territory="001" type="Asia/Krasnoyarsk"/>
534
+ <mapZone other="North Asia Standard Time" territory="RU" type="Asia/Krasnoyarsk Asia/Novokuznetsk"/>
535
+
536
+ <!-- (UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi -->
537
+ <mapZone other="China Standard Time" territory="001" type="Asia/Shanghai"/>
538
+ <mapZone other="China Standard Time" territory="CN" type="Asia/Shanghai"/>
539
+ <mapZone other="China Standard Time" territory="HK" type="Asia/Hong_Kong"/>
540
+ <mapZone other="China Standard Time" territory="MO" type="Asia/Macau"/>
541
+
542
+ <!-- (UTC+08:00) Irkutsk (RTZ 7) -->
543
+ <mapZone other="North Asia East Standard Time" territory="001" type="Asia/Irkutsk"/>
544
+ <mapZone other="North Asia East Standard Time" territory="RU" type="Asia/Irkutsk"/>
545
+
546
+ <!-- (UTC+08:00) Kuala Lumpur, Singapore -->
547
+ <mapZone other="Singapore Standard Time" territory="001" type="Asia/Singapore"/>
548
+ <mapZone other="Singapore Standard Time" territory="BN" type="Asia/Brunei"/>
549
+ <mapZone other="Singapore Standard Time" territory="ID" type="Asia/Makassar"/>
550
+ <mapZone other="Singapore Standard Time" territory="MY" type="Asia/Kuala_Lumpur Asia/Kuching"/>
551
+ <mapZone other="Singapore Standard Time" territory="PH" type="Asia/Manila"/>
552
+ <mapZone other="Singapore Standard Time" territory="SG" type="Asia/Singapore"/>
553
+ <mapZone other="Singapore Standard Time" territory="ZZ" type="Etc/GMT-8"/>
554
+
555
+ <!-- (UTC+08:00) Perth -->
556
+ <mapZone other="W. Australia Standard Time" territory="001" type="Australia/Perth"/>
557
+ <mapZone other="W. Australia Standard Time" territory="AQ" type="Antarctica/Casey"/>
558
+ <mapZone other="W. Australia Standard Time" territory="AU" type="Australia/Perth"/>
559
+
560
+ <!-- (UTC+08:00) Taipei -->
561
+ <mapZone other="Taipei Standard Time" territory="001" type="Asia/Taipei"/>
562
+ <mapZone other="Taipei Standard Time" territory="TW" type="Asia/Taipei"/>
563
+
564
+ <!-- (UTC+08:00) Ulaanbaatar -->
565
+ <mapZone other="Ulaanbaatar Standard Time" territory="001" type="Asia/Ulaanbaatar"/>
566
+ <mapZone other="Ulaanbaatar Standard Time" territory="MN" type="Asia/Ulaanbaatar Asia/Choibalsan"/>
567
+
568
+ <!-- (UTC+08:30) Pyongyang -->
569
+ <mapZone other="North Korea Standard Time" territory="001" type="Asia/Pyongyang"/>
570
+ <mapZone other="North Korea Standard Time" territory="KP" type="Asia/Pyongyang"/>
571
+
572
+ <!-- (UTC+09:00) Osaka, Sapporo, Tokyo -->
573
+ <mapZone other="Tokyo Standard Time" territory="001" type="Asia/Tokyo"/>
574
+ <mapZone other="Tokyo Standard Time" territory="ID" type="Asia/Jayapura"/>
575
+ <mapZone other="Tokyo Standard Time" territory="JP" type="Asia/Tokyo"/>
576
+ <mapZone other="Tokyo Standard Time" territory="PW" type="Pacific/Palau"/>
577
+ <mapZone other="Tokyo Standard Time" territory="TL" type="Asia/Dili"/>
578
+ <mapZone other="Tokyo Standard Time" territory="ZZ" type="Etc/GMT-9"/>
579
+
580
+ <!-- (UTC+09:00) Seoul -->
581
+ <mapZone other="Korea Standard Time" territory="001" type="Asia/Seoul"/>
582
+ <mapZone other="Korea Standard Time" territory="KR" type="Asia/Seoul"/>
583
+
584
+ <!-- (UTC+09:00) Yakutsk (RTZ 8) -->
585
+ <mapZone other="Yakutsk Standard Time" territory="001" type="Asia/Yakutsk"/>
586
+ <mapZone other="Yakutsk Standard Time" territory="RU" type="Asia/Yakutsk Asia/Chita Asia/Khandyga"/>
587
+
588
+ <!-- (UTC+09:30) Adelaide -->
589
+ <mapZone other="Cen. Australia Standard Time" territory="001" type="Australia/Adelaide"/>
590
+ <mapZone other="Cen. Australia Standard Time" territory="AU" type="Australia/Adelaide Australia/Broken_Hill"/>
591
+
592
+ <!-- (UTC+09:30) Darwin -->
593
+ <mapZone other="AUS Central Standard Time" territory="001" type="Australia/Darwin"/>
594
+ <mapZone other="AUS Central Standard Time" territory="AU" type="Australia/Darwin"/>
595
+
596
+ <!-- (UTC+10:00) Brisbane -->
597
+ <mapZone other="E. Australia Standard Time" territory="001" type="Australia/Brisbane"/>
598
+ <mapZone other="E. Australia Standard Time" territory="AU" type="Australia/Brisbane Australia/Lindeman"/>
599
+
600
+ <!-- (UTC+10:00) Canberra, Melbourne, Sydney -->
601
+ <mapZone other="AUS Eastern Standard Time" territory="001" type="Australia/Sydney"/>
602
+ <mapZone other="AUS Eastern Standard Time" territory="AU" type="Australia/Sydney Australia/Melbourne"/>
603
+
604
+ <!-- (UTC+10:00) Guam, Port Moresby -->
605
+ <mapZone other="West Pacific Standard Time" territory="001" type="Pacific/Port_Moresby"/>
606
+ <mapZone other="West Pacific Standard Time" territory="AQ" type="Antarctica/DumontDUrville"/>
607
+ <mapZone other="West Pacific Standard Time" territory="FM" type="Pacific/Truk"/>
608
+ <mapZone other="West Pacific Standard Time" territory="GU" type="Pacific/Guam"/>
609
+ <mapZone other="West Pacific Standard Time" territory="MP" type="Pacific/Saipan"/>
610
+ <mapZone other="West Pacific Standard Time" territory="PG" type="Pacific/Port_Moresby"/>
611
+ <mapZone other="West Pacific Standard Time" territory="ZZ" type="Etc/GMT-10"/>
612
+
613
+ <!-- (UTC+10:00) Hobart -->
614
+ <mapZone other="Tasmania Standard Time" territory="001" type="Australia/Hobart"/>
615
+ <mapZone other="Tasmania Standard Time" territory="AU" type="Australia/Hobart Australia/Currie"/>
616
+
617
+ <!-- (UTC+10:00) Magadan -->
618
+ <mapZone other="Magadan Standard Time" territory="001" type="Asia/Magadan"/>
619
+ <mapZone other="Magadan Standard Time" territory="RU" type="Asia/Magadan"/>
620
+
621
+ <!-- (UTC+10:00) Vladivostok, Magadan (RTZ 9) -->
622
+ <mapZone other="Vladivostok Standard Time" territory="001" type="Asia/Vladivostok"/>
623
+ <mapZone other="Vladivostok Standard Time" territory="RU" type="Asia/Vladivostok Asia/Sakhalin Asia/Ust-Nera"/>
624
+
625
+ <!-- (UTC+11:00) Chokurdakh (RTZ 10) -->
626
+ <mapZone other="Russia Time Zone 10" territory="001" type="Asia/Srednekolymsk"/>
627
+ <mapZone other="Russia Time Zone 10" territory="RU" type="Asia/Srednekolymsk"/>
628
+
629
+ <!-- (UTC+11:00) Solomon Is., New Caledonia -->
630
+ <mapZone other="Central Pacific Standard Time" territory="001" type="Pacific/Guadalcanal"/>
631
+ <mapZone other="Central Pacific Standard Time" territory="AU" type="Antarctica/Macquarie"/>
632
+ <mapZone other="Central Pacific Standard Time" territory="FM" type="Pacific/Ponape Pacific/Kosrae"/>
633
+ <mapZone other="Central Pacific Standard Time" territory="NC" type="Pacific/Noumea"/>
634
+ <mapZone other="Central Pacific Standard Time" territory="NF" type="Pacific/Norfolk"/>
635
+ <mapZone other="Central Pacific Standard Time" territory="PG" type="Pacific/Bougainville"/>
636
+ <mapZone other="Central Pacific Standard Time" territory="SB" type="Pacific/Guadalcanal"/>
637
+ <mapZone other="Central Pacific Standard Time" territory="VU" type="Pacific/Efate"/>
638
+ <mapZone other="Central Pacific Standard Time" territory="ZZ" type="Etc/GMT-11"/>
639
+
640
+ <!-- (UTC+12:00) Anadyr, Petropavlovsk-Kamchatsky (RTZ 11) -->
641
+ <mapZone other="Russia Time Zone 11" territory="001" type="Asia/Kamchatka"/>
642
+ <mapZone other="Russia Time Zone 11" territory="RU" type="Asia/Kamchatka Asia/Anadyr"/>
643
+
644
+ <!-- (UTC+12:00) Auckland, Wellington -->
645
+ <mapZone other="New Zealand Standard Time" territory="001" type="Pacific/Auckland"/>
646
+ <mapZone other="New Zealand Standard Time" territory="AQ" type="Antarctica/McMurdo"/>
647
+ <mapZone other="New Zealand Standard Time" territory="NZ" type="Pacific/Auckland"/>
648
+
649
+ <!-- (UTC+12:00) Coordinated Universal Time+12 -->
650
+ <mapZone other="UTC+12" territory="001" type="Etc/GMT-12"/>
651
+ <mapZone other="UTC+12" territory="KI" type="Pacific/Tarawa"/>
652
+ <mapZone other="UTC+12" territory="MH" type="Pacific/Majuro Pacific/Kwajalein"/>
653
+ <mapZone other="UTC+12" territory="NR" type="Pacific/Nauru"/>
654
+ <mapZone other="UTC+12" territory="TV" type="Pacific/Funafuti"/>
655
+ <mapZone other="UTC+12" territory="UM" type="Pacific/Wake"/>
656
+ <mapZone other="UTC+12" territory="WF" type="Pacific/Wallis"/>
657
+ <mapZone other="UTC+12" territory="ZZ" type="Etc/GMT-12"/>
658
+
659
+ <!-- (UTC+12:00) Fiji -->
660
+ <mapZone other="Fiji Standard Time" territory="001" type="Pacific/Fiji"/>
661
+ <mapZone other="Fiji Standard Time" territory="FJ" type="Pacific/Fiji"/>
662
+
663
+ <!-- (UTC+13:00) Nuku'alofa -->
664
+ <mapZone other="Tonga Standard Time" territory="001" type="Pacific/Tongatapu"/>
665
+ <mapZone other="Tonga Standard Time" territory="KI" type="Pacific/Enderbury"/>
666
+ <mapZone other="Tonga Standard Time" territory="TK" type="Pacific/Fakaofo"/>
667
+ <mapZone other="Tonga Standard Time" territory="TO" type="Pacific/Tongatapu"/>
668
+ <mapZone other="Tonga Standard Time" territory="ZZ" type="Etc/GMT-13"/>
669
+
670
+ <!-- (UTC+13:00) Samoa -->
671
+ <mapZone other="Samoa Standard Time" territory="001" type="Pacific/Apia"/>
672
+ <mapZone other="Samoa Standard Time" territory="WS" type="Pacific/Apia"/>
673
+
674
+ <!-- (UTC+14:00) Kiritimati Island -->
675
+ <mapZone other="Line Islands Standard Time" territory="001" type="Pacific/Kiritimati"/>
676
+ <mapZone other="Line Islands Standard Time" territory="KI" type="Pacific/Kiritimati"/>
677
+ <mapZone other="Line Islands Standard Time" territory="ZZ" type="Etc/GMT-14"/>
678
+ </mapTimezones>
679
+ </windowsZones>
680
+ </supplementalData>